Javascript 量角器:具有相同属性的元素的定位策略
我正在测试的站点是一个带有angular的单页应用程序 正因为如此,许多DOM被提前加载并隐藏。根据用户的操作,将显示隐藏的DOM。无论DOM是显示还是隐藏,量角器都将其视为整个DOM树的一部分。当我按id定位元素时: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.
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()公开/实现的一件相当复杂的事情
方法。我使用此解决方案仅与可见元素交互: