12

分度器 (2.5.x) を使用して E2E テストされている複雑な Angular (1.5.x) アプリケーションを維持しています。このアプローチでは、主にテストが不安定に見えるという問題が発生しています。あるプル リクエストで完全に機能したテストが、別のプル リクエストでは失敗します。これは、by.linkTest(...) などの単純なロケーターに関係します。失敗したテストをデバッグしたところ、アプリは正しいページにあり、リンクが存在し、アクセスできます。

他の誰かがこれらの一貫性の問題を経験しましたか? 原因または回避策を知っていますか?

4

4 に答える 4

14

エンド ツー エンドのテストを増やすのはやめましょう。

とはいえ、相互の無慈悲な「不安定さ」の敵に取り組むためにできることはいくつかあります。

  • 最新の分度器(現在は 4.0.0)への更新も最新seleniumchromedriverものをもたらします。
  • Angular アニメーションをオフにする
  • ビルトインまたはカスタムの Expected Conditionsのセットでドラゴン を使用します。これはおそらく、問題にアプローチするための最も信頼できる方法です。残念ながら、これはユースケースと問題に固有のものであり、問​​題のある場所で実際のテストを変更する必要があります。たとえば、要素をクリックする必要がある場合は、クリック可能になるまで待ちます。browser.wait()

    var EC = protractor.ExpectedConditions;
    var elm = $("#myid");
    
    browser.wait(EC.elementToBeClickable(elm), 5000);
    elm.click();
    
  • ブラウザー ウィンドウを最大化します(ランダムな要素が表示されない、またはクリックできないというエラーを回避するため)。これをonPrepare():

    browser.driver.manage().window().maximize();
    
  • 分度器とジャスミンのタイムアウトを増やす
  • 制御フローを微調整して分度器を遅くします(4.0.0 で動作するかどうかは不明です。テストしてください)
  • browser.waitForAngular();問題のある場所に手動で呼び出します。これが役立つ理由はわかりませんが、不安定なテストの修正に確実に役立ったというレポートを見てきました。
  • 仕様でジャスミンdone()コールバックを使用します。これは、たとえば、が呼び出されるit()までブロックを開始しないようにするのに役立ちます。donebeforeEach()
  • onPrepare()functionから promise を返します。これは通常、テスト実行の準備が整っていることを確認するのに役立ちます
  • 失敗したテストを自動的に再実行するprotractor-flakeパッケージを使用します。問題の簡単な回避策のようなもの

テキストボックスへのゆっくりとした入力、JavaScript によるクリックなど、問題固有の「トリック」もあります。

于 2016-07-26T13:47:14.083 に答える