如何等待从DOM中删除元素?

如何等待从DOM中删除元素?,dom,element,wait,protractor,Dom,Element,Wait,Protractor,每当我试图等待从我的量角器测试正在测试的网页上的当前DOM树中删除DOM元素时,我就会遇到这个问题。当我尝试等待DOM元素在另一个线程中使用user2912739提供的这种优秀技术隐藏时,我已经掌握了窍门 var el = element(by.css('.your-css-class')); return browser.wait(protractor.until.elementIsNotVisible(el)); 这相当不错。但是,在等待从DOM树中删除元素时,.isDisplayed()

每当我试图等待从我的量角器测试正在测试的网页上的当前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树中删除后继续运行它


我搜索了量角器和web驱动程序api,似乎没有api可以完成这项工作

不确定您从哪里获得了
量角器。直到
来自as,这不是核心库的一部分。以下是使用量角器的方法:

var el = element(by.css('.your-css-class'));
return browser.wait(function() {
  return el.isPresent().then(function(present) {
    return !present;
  })
});
一旦进入(可能是量角器1.7),您可以执行以下操作:

var EC = protractor.ExpectedConditions;

var el = element(by.css('.your-css-class'));
return browser.wait(EC.not(EC.presenceOf(el)));

谢谢,Hankduan,这与我在上一篇文章中的方法类似,但当涉及到等待元素是否从DOM中“删除”时,el.isPresent()或el.isDisplayed()都不能在承诺发生时立即返回,或者它已经不是DOM的一部分,因为它永远不会实现。结果是,量角器将在Jasmine it功能块中为这段代码超时。我想我们正在处理一个永远无法满足的条件。你能澄清一下吗?我不确定你的意思。当你处理模式交互时,这种用例非常常见,例如,用户单击保存/确定按钮,然后等待模式消失。在这种情况下,有一些模态插件在模态关闭/消失后立即删除其模态html元素。此时,我们的量角器测试代码需要在模态关闭后立即知道,以便我们可以断言结果。是的,但您从未提及的问题显示出来。isDisplayed将抛出一个错误;我现在不会。如果您正在检查是否显示isDisplayed,则需要执行以下操作:
返回浏览器。等待(EC.not(EC.visibilityOf(el))
我对量角器不熟悉,这是我第一次看到如何使用该量角器,直到
。没有文档说它是在
量角器中定义的。。。