2017-06-22 73 views
5

我是量角器的新手。這個函數中的異步/等待如何工作?有人可以向我解釋嗎?在量角器中解釋異步/等待

it('TC_01 - Verify Cockpit page title', async (done) => { 
    headerPage.waitForTitleContain('PEAX', 30000); 
    expect(await headerPage.getTitle()).toEqual('PEAX'); 
    done(); 
}); 

回答

8

這是關於JavaScript的異步性質。

目前量角器提出了幾種方法來處理異步操作,(我沒有描述直接承諾鏈接,和發電機這裏):

1)無極經理/控制流

https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#control-flows

這是一個抽象,使得你所有的動作被一個接一個地調用,就像一個隊列一樣。每個操作都會返回一個特殊對象 - Promise。它表示異步操作的結果,將來會收到。

2)第二種方法 - 異步/等待

https://ponyfoo.com/articles/understanding-javascript-async-await#using-async-await

它是新的抽象各地承諾的對象,並允許輕鬆連鎖動作一個接一個。優點是這是本地語言的建設,而不是Promise Manager,並且使你的代碼看起來像synchronized,try/catch和其他熟悉的結構。

你能想到的等待,如「暫停代碼執行,直到承諾,從返回的行動解決」

但是異步/等待仍然有效裏面的承諾。

夫婦使用異步時建議的/等待與protractorJS:

1)確保您使用的控制流/承諾經理:https://github.com/angular/protractor/blob/master/lib/config.ts#L631 混合功能的控制流等待可能會導致不可預測的結果。

2)不要忘記預先安排所有的異步操作(通常這是所有的量角器API方法)。如果你會忘記這麼做 - 沒有等待的動作不會與其他動作排隊,所以動作的順序將被打破

3)確保你使用的nodejs支持這個 - 至少nodejs 7.8.x或更新)。如果打字稿使用,設置編譯目標 「目標」: 「es2017」

更多閱讀: https://github.com/igniteram/protractor/blob/93f2e4943cc291064bc04e789b1c33b270446af9/docs/control-flow.md

https://github.com/SeleniumHQ/selenium/wiki/WebDriverJs#option-3-migrate-to-asyncawait

-3

對於等待,您將需要使用then函數處理承諾。下面的代碼會給你一個想法。

element(by.xpath("xpath")).click().then(function(){ 
     var list = element(by.id('id')); 
     var until = protractor.ExpectedConditions; 
     browser.wait(until.presenceOf(list), 80000, 'Message: took too long'); 
    });