每当我尝试等待从我的量角器测试正在测试的网页上的当前DOM树中删除DOM元素时,我就遇到了这个问题。当我尝试等待DOM元素被另一个线程中的user2912739提供的这种漂亮的技术隐藏起来时,我已经掌握了它。
var el = element(by.css('.your-css-class'));
return browser.wait(protractor.until.elementIsNotVisible(el));
这很不错。但是,当等待从DOM树中删除的元素.isDisplayed()
和.isPresent()
或上述行似乎不起作用时。测试将继续运行,但看起来它正在尝试获取该元素但从未成功,因此它最终会根据配置文件的超时设置超时。例如。这是日志。
超时:等待规格完成30000毫秒后超时
每当您处理测试是否从DOM树中删除元素时,这种情况的用例可能非常频繁,例如,当用户单击取消该模态元素的操作时,关闭并从页面中删除的模式,或者您只想“删除”的元素,以便它不再存在于页面上。因此,在测试中,您只想在从DOM树中删除它后立即继续测试运行。
我搜索了量角器和网络驱动程序api,似乎没有api可以完成这项工作。
答案 0 :(得分:19)
不确定您从哪里获得protractor.until
,因为它不属于核心库。这就是你用量角器做的方法:
var el = element(by.css('.your-css-class'));
return browser.wait(function() {
return el.isPresent().then(function(present) {
return !present;
})
});
一旦feat(expectedConditions)进入(可能是量角器1.7),您就可以:
var EC = protractor.ExpectedConditions;
var el = element(by.css('.your-css-class'));
return browser.wait(EC.not(EC.presenceOf(el)));