如何从DOM中删除元素?

vic*_*hsu 9 dom element wait protractor

每当我尝试等待从我的量角器测试正在测试的网页上的当前DOM树中删除DOM元素时,我就遇到了这个问题.当我尝试等待DOM元素被另一个线程中的user2912739提供的这种漂亮的技术隐藏时,我已经掌握了它.

var el = element(by.css('.your-css-class'));
return browser.wait(protractor.until.elementIsNotVisible(el));
Run Code Online (Sandbox Code Playgroud)

这很不错.但是,当等待从DOM树中删除的元素时.isDisplayed(),.isPresent()或者上面的行似乎都不起作用.测试将继续运行,但看起来它正在尝试获取该元素但从未成功,因此它最终会根据配置文件的超时设置超时.例如.这是日志.

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

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

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

han*_*uan 19

不知道你从哪里来protractor.until,因为它不是核心库的一部分.这就是你用量角器做的方法:

var el = element(by.css('.your-css-class'));
return browser.wait(function() {
  return el.isPresent().then(function(present) {
    return !present;
  })
});
Run Code Online (Sandbox Code Playgroud)

一旦壮举(expectedConditions)(可能是量角器1.7),您可以:

var EC = protractor.ExpectedConditions;

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

  • 当你处理模态交互时,这种用例很常见,例如用户点击save/ok按钮然后等到模态消失.在这种情况下,有一些模态插件在模态关闭/消失后立即删除其模态html元素.这是我们的量角器测试代码需要在模态关闭后立即知道,所以我们可以断言结果. (3认同)
  • 是的,但你提到的问题仍未被提及.isDisplayed会抛出错误; isPresent不会.如果要检查isDisplayed,则需要执行以下操作:`return browser.wait(EC.not(EC.visibilityOf(el))` (2认同)