Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器:具有相同属性的元素的定位策略_Javascript_Selenium_Selenium Webdriver_Webdriver_Protractor - Fatal编程技术网

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

Javascript 量角器:具有相同属性的元素的定位策略,javascript,selenium,selenium-webdriver,webdriver,protractor,Javascript,Selenium,Selenium Webdriver,Webdriver,Protractor,我正在测试的站点是一个带有angular的单页应用程序 正因为如此,许多DOM被提前加载并隐藏。根据用户的操作,将显示隐藏的DOM。无论DOM是显示还是隐藏,量角器都将其视为整个DOM树的一部分。当我按id定位元素时: this.usernameTextbox = element(by.id('username')); 它检测到有多个元素具有相同的id,一个元素可见(ng show),另一个元素隐藏(ng hide) 量角器是否有办法仅定位未隐藏的元素?您是否尝试过以下方法: browser.

我正在测试的站点是一个带有angular的单页应用程序

正因为如此,许多DOM被提前加载并隐藏。根据用户的操作,将显示隐藏的DOM。无论DOM是显示还是隐藏,量角器都将其视为整个DOM树的一部分。当我按id定位元素时:

this.usernameTextbox = element(by.id('username'));
它检测到有多个元素具有相同的id,一个元素可见(
ng show
),另一个元素隐藏(
ng hide


量角器是否有办法仅定位未隐藏的元素?

您是否尝试过以下方法:

browser.wait(function(){
    return element(by.id('username')).isDisplayed();
}, 1000).then(function(){
    //Your code here
});
您无法可靠地告诉webdriver仅定位可见元素,您需要获取与定位器匹配的所有元素,并通过检查将它们过滤掉

换句话说,使用
element.all()
按id查找所有元素,并使用 要过滤掉可见的,示例代码:

var username = element.all(by.id("username")).filter(function (elm) {
    return elm.isDisplayed().then(function (value) {
        return value;
    });
}).first();


这里所说的“可靠”是指理论上,您可以检查
display:none
visibility:hidden
()的存在,但千万不要这样做,因为“显示性”本身是webdriver通过
isDisplayed()公开/实现的一件相当复杂的事情
方法。

我使用此解决方案仅与可见元素交互: