2017-03-07 43 views
12

我很好奇waitForAngularEnabled()是如何工作的? 雖然看起來並不複雜,但我無法在任何地方得到滿意的答案。所以希望有人幫助我清除。waitForAngularEnabled如何工作?

我的目標是檢查標準並暫停/鎖定運行測試,直到滿足標準。例如,這裏是例子。

A.暫停運行測試,並等待頁面被載入

... 
    let theElement = ...; 
    browser.waitForAngularEnabled(false); 
    browser.wait(protractor.ExpectedConditions.presenceOf(theElement)); 

B.使用browser.wait()時,另一種方法類似用途與一個

browser.wait(() => { 
     browser.waitForAngularEnabled(false); 
     return browser.isElementPresent(by.id('the-element-id')); 
    }, timeout); // timeout may not be given 

所以問題是:

  1. 一旦waitForAngularEnabled(false)被調用會發生什麼? (一旦條件滿足或超時發生在我的情況)
  2. 我應該還原waitForAngularEnabled(true)以繼續正常測試嗎?
  3. 如果我該做,該放哪裏?

希望能得到一些背景原理明確的答案。

謝謝!

+0

您是否看到量角器的API文檔? http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngular AND http://www.protractortest.org/#/api?view=ProtractorBrowser.prototype.waitForAngularEnabled –

+1

是的,我做了,但我並不滿意。 你能否回答問題1? 在此先感謝。 – first87

+0

要回答問題#1,我們需要知道爲什麼你要把它關掉。您是否在Angular結束時獲得與$ http或$ timeout輪詢相關的超時?另外,看起來這個函數只是'browser.ignoreSynchronization'的替代品,並且這在'waitForAngular()'函數中用來決定是否使用它。這就是兩個 – Gunderson

回答

13

1.一旦waitForAngularEnabled(false)被調用會發生什麼? (一旦標準是滿足或超時發生在我的情況)

根據經驗我發現,這似乎導致量角器表現爲單純的webdriver。它不等待Angular「安頓下來」(沒有掛起的HTTP請求或查看更新),這是true的行爲。相反,如果您使用false設置,則需要使用ExpectedConditions或類似方法來驗證可靠地執行測試步驟的先決條件,就如同使用普通的Webdriver測試一樣。

2.我應該還原waitForAngularEnabled(true)以繼續正常測試嗎?

是的。然而,我發現在量角器5.1.1和5.1.2中,無論是否使用控制流,在相同的執行過程中分散不同的waitForAngularEnabled值似乎會產生不可預知的結果;即啓用狀態不遵循與其他量角器/ Webdriver調用相同的異步語義。到目前爲止,我的結論是,您無法在同一個執行中可靠地混合waitForAngularEnabled(false)和waitForAngularEnabled(true)。我懷疑這是一個量角器錯誤,但我還沒有開發出一個簡單可靠的測試來證明它支持提交量角器問題。有一個可能相關的問題here,現在已關閉但未完全確診。

3.如果我該做,該放哪裏?

「之前」您做需要恢復等待角語義的量角器/ Webdriver調用。但是,如上所述,目前尚不清楚您是否可以可靠地保證在true設置的背景下真正地進行此類呼叫。

如果你必須有一些測試,使用false和其他true,你可以在不同的執行運行它們(獨立的進程;不相同protractorng e2e命令來運行它們)。採取這種方法時我沒有遇到任何問題。

+0

感謝您的回答。他們足夠豐富,對我非常有幫助,因此我可以用一些有用的慣例與量角器一起工作。再次感謝,威爾。 – first87

+0

太好了。希望隨着更多的官方信息出現,或者錯誤被提交或修復,我們可以改進這一點。 – Will

+0

我遇到了在Angular 4中使用'waitForAngularEnabled(true)'的問題,類似於[this issue](https://github.com/angular/protractor/issues/4233)。 – Will