我正在测试的网站是带有角度的单页应用程序。
因此,很多DOM都是提前加载并隐藏的。根据用户的操作,将显示隐藏的DOM。无论是显示还是隐藏DOM,量角器都会将其视为整个DOM树的一部分。当我通过id找到一个元素时:
this.usernameTextbox = element(by.id('username'));
它检测到有多个元素具有相同的id,一个元素可见(ng-show
)而另一个元素被隐藏(ng-hide
)。
量角器是否有办法只找到未隐藏的元素?
答案 0 :(得分:1)
您是否尝试过以下操作:
browser.wait(function(){
return element(by.id('username')).isDisplayed();
}, 1000).then(function(){
//Your code here
});
答案 1 :(得分:1)
您无法可靠地告诉webdriver仅查找可见元素,您需要获取与定位器匹配的所有元素并将其过滤掉以检查"displayedness"。
换句话说,使用element.all()
按ID查找所有元素,并使用filter()
过滤掉可见的那个,示例代码:
var username = element.all(by.id("username")).filter(function (elm) {
return elm.isDisplayed().then(function (value) {
return value;
});
}).first();
"可靠"在这里,我的意思是理论上你可以检查display: none
或visibility: hidden
(reference)的存在,但不要这样做,因为"显示性"本身是一个非常复杂的事情,webdriver通过isDisplayed()
方法公开/实现。