2015-02-10 30 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