2017-06-22 15 views
5

私は分度器を初めて使いました。この関数のasync/awaitはどのように機能しますか?誰も私にそれを説明できますか?投射器の非同期/待機についての説明

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

これは、キューのようにすべてのアクションを1つずつ呼び出す抽象化です。各アクションは特別なオブジェクトPromiseを返します。これは、今後受信される非同期操作の結果を表します。

2)第2の方法 - 非同期/のawait

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

これは、新しい抽象化が周りのオブジェクトを約束や行動一つ一つを簡単に連鎖することができますです。アドバンテージはPromise Managerではなく、ネイティブ言語の構築であり、try/catchやその他の使い慣れた構造で、コードを同期したように見せます。

あなたは

しかし、/、まだ待って非同期に内部の約束で動作する「アクションから返された約束が解決されるまで、コードの実行を一時停止」のように待つと考えることができます。アドバイス非同期を使用しての

カップル/ protractorJSで待っています:

1)は必ず無効に制御フロー/約束管理を行います。https://github.com/angular/protractor/blob/master/lib/config.ts#L631 混合は、予期しない結果につながる可能性が有効になって制御フローをお待ちしています。

2)あなたのすべての非同期アクションにawaitを追加するのを忘れないでください(通常、これはすべての分度器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'); 
    });