量角器:定位具有相同属性的元素的策略

时间:2015-05-19 23:37:49

标签: javascript selenium selenium-webdriver webdriver protractor

我正在测试的网站是带有角度的单页应用程序。

因此,很多DOM都是提前加载并隐藏的。根据用户的操作,将显示隐藏的DOM。无论是显示还是隐藏DOM,量角器都会将其视为整个DOM树的一部分。当我通过id找到一个元素时:

this.usernameTextbox = element(by.id('username'));

它检测到有多个元素具有相同的id,一个元素可见(ng-show)而另一个元素被隐藏(ng-hide)。

量角器是否有办法只找到未隐藏的元素?

2 个答案:

答案 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: nonevisibility: hiddenreference)的存在,但不要这样做,因为"显示性"本身是一个非常复杂的事情,webdriver通过isDisplayed()方法公开/实现。