2015-02-10 71 views
9

每当我尝试等待一个DOM元素从我的量角器测试测试的网页上的当前DOM树中移除时,我会遇到此问题。当我尝试等待一个DOM元素被另一个线程中的user2912739提供的这种不错的技术隐藏起来时,我已经有了它的一窍不通。如何等待元素从DOM中删除?

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

这个作品相当不错。但是,当涉及到等待从DOM树中删除的元素.isDisplayed().isPresent()或上述行似乎不工作。测试将继续运行,但看起来好像它试图获取该元素,但从未成功,因此最终根据配置文件的超时设置超时。例如。这是日志。

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

的这种使用情况下可当你正在处理测试,如果一个元素从DOM树中移除,相当频繁实例,当用户单击取消该模式元素的操作时,会关闭并从页面中删除的模式,或者您只是想要“删除”以便该页面不再存在的元素。因此,在测试中,您只需要在从DOM树中移除后立即继续测试运行。

我已经通过量角器和网络驱动程序API进行了搜索,似乎没有这个工作的API。

+0

我是新来的量角器这是我第一次看到了如何使用'直到'。没有文件说它是在'量角器'里面定义的... – llamerr 2016-01-25 16:27:49

回答

15

不知道你从哪里得到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))); 
+0

谢谢,汉克丹, 这是类似的方法,我在我以前的帖子 http://stackoverflow.com/questions/26411574/protractor-wait-for -element-to-become-invisible-hidden – vichsu 2015-02-11 22:40:36

+0

但是当等待元素从DOM中“移除”时,el.isPresent()或el.isDisplayed()不会在它发生时立即返回promise,或者它已经不是DOM的一部分,因为它从来没有实现过。结果是量角器只会在Jasmine函数块中超时这段代码。我想我们正在处理一个永远不能满足的条件。 – vichsu 2015-02-11 22:57:44

+0

你能澄清一下吗?我不确定你是什么意思。 – hankduan 2015-02-12 20:13:31