如何从DOM中删除元素?

时间:2015-02-10 00:22:40

标签: 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().isPresent()或上述行似乎不起作用时。测试将继续运行,但看起来它正在尝试获取该元素但从未成功,因此它最终会根据配置文件的超时设置超时。例如。这是日志。

  

超时:等待规格完成30000毫秒后超时

每当您处理测试是否从DOM树中删除元素时,这种情况的用例可能非常频繁,例如,当用户单击取消该模态元素的操作时,关闭并从页面中删除的模式,或者您只想“删除”的元素,以便它不再存在于页面上。因此,在测试中,您只想在从DOM树中删除它后立即继续测试运行。

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

1 个答案:

答案 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)));