我是量角器的新手。這個函數中的異步/等待如何工作?有人可以向我解釋嗎?在量角器中解釋異步/等待
it('TC_01 - Verify Cockpit page title', async (done) => {
headerPage.waitForTitleContain('PEAX', 30000);
expect(await headerPage.getTitle()).toEqual('PEAX');
done();
});
我是量角器的新手。這個函數中的異步/等待如何工作?有人可以向我解釋嗎?在量角器中解釋異步/等待
it('TC_01 - Verify Cockpit page title', async (done) => {
headerPage.waitForTitleContain('PEAX', 30000);
expect(await headerPage.getTitle()).toEqual('PEAX');
done();
});
這是關於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/SeleniumHQ/selenium/wiki/WebDriverJs#option-3-migrate-to-asyncawait
對於等待,您將需要使用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');
});