2016-10-05 17 views
2

私たちは、本プロジェクトでは、angularJSアプリケーションを自動化するために、プロトラクター3.6バージョンを使用しています。多くのスタンドアロンの角型アプリケーションがiframeとして実装されています。フレームワーク内の暗黙的および明示的な待機アプローチ

これは、SPAに直接当たるアプリケーションにアクセスすることも、当社のマスター統合アプリケーションを通じてアクセスすることも可能です。

現在のアプローチ: チームは、暗黙の待機が助けにならない場所で30秒間の暗黙のwait()と静的な待機(60秒間)を使用しています。

問題: テストスクリプトを実行するたびに矛盾した結果が表示され、実行時間が大幅に長くなることがありました。

ソリューション: 暗黙的な待機と静的な待機に明示的な待機を追加しました。これにより、整合性が向上し、実行時間が短縮されました。

質問: 3つのすべての待機(暗黙の待機、明示的な待機、thred.sleep)をフレームワークで一緒に使用するのは正しいですか。 注:いくつかのナビゲーションでは、thread.sleep()を使用しなければなりませんでした。暗黙の待機と明示的な待機の両方が機能していません。

答えて

1

はい、複数のタイプの待機を使用しても問題ありません。暗黙の待機時間の95%を使用しますが、一部の条件で明示的に待機する必要があります。アプリが完全に角度で正しく同期されている(つまり未払いの$ httpコールがない - more info)場合は、アプリケータが角度/アプリの準備ができていることを知る傾向があるので、あまり待つ必要はありません。

暗黙:私はあなたのアプリケーションを知らないと、これは非常によくあなたのケースに当てはまることができませんでしたしかし、私は、トピックに関するいくつかの考えを与えるでしょうをこれらは、一貫性と安定性の両方のために、最善の策です。私はあなたに挑戦し、あなたの待ち時間の問題のほとんどが、暗黙の待ち(適切な使用例、複数の条件にまたがって複合されている)の適切な使用によっておそらく解決できると言うでしょう。しかし、再び、私はあなたのアプリを知らない、私はそれが再訪する価値があると思う。 hereのリストをよく読んでください。頻繁に使うのはpresenceOf()visibilityOf()とその対応語stalenessOf()invisibilityOf()です。

明示的:私はこれらを避けることを非常に難しくしていますが、場合によっては必要であることがわかりました。数秒間アニメーションが発生するなど、暗黙の待機で追跡するものはありません。

// wait for an attribute to be present i.e. "ng-invalid" to be added to a class 
// el = element, attr = attribute to check (i.e. class, id etc), target = attribute value to look for 
Util.prototype.waitForAttributePresent = function (el, attr, target, time) { 
    var timeout = time || 0; 
    return browser.wait(function() { 
     return el.getAttribute(attr).then(function (val) { 
      return ~val.indexOf(target) < 0; 
     }); 
    }, timeout); 
}; 

ユースケース:

// waits 5 seconds for the elements class to contain "active" 
var el = $('div'); 
Util.waitForAttributePresent(el, 'class', 'active', 5000); 
expect(true).toBe(true); 

静的:私は、下記のようなより多くの暗黙の待機アプローチを試してみて、これらのシナリオをキャプチャして使用するために私自身のいくつかのメソッドを、作成した静的に何を意味するのかわからない、明示的な待機と同じように聞こえる何らかの条件に基づいてではなく、一定の時間、それを停止しています。

0

暗黙の待ちがうまくいかなかった理由の詳細を共有すると、コミュニティがより技術的に話すのを助けることができます。

あなたの質問に対する簡単な答えは、SUT、自動化の目標、プロジェクトの優先順位に応じて、両方の種類の待機(「明示的」と「静的」の違いはわかりません)あなたの技術的な知識。

明示的な待機が使用されていたが、もっと効率的な暗黙の待機を実装する方法があったのは何度も見てきました。しかし、時には、そのような努力が利益を上回るので、私は常に「大きな勝利」を目指します。暗黙のうちにどのように待つかを考えれば、最も多くの実行時間が節約されるか、(より重要なことに)実行の安定性が向上します。これらの領域がどこにあるかを判断するには、最初に分析作業が必要になります。

注意すべきことは、ほとんどの場合、実行の安定性が実行時間より重要であることです。明示的な待機を使用するとより安定したテストが行​​われる場合、明示的に待機することは絶対に有効です。 安定性を維持しながら待機時間を短縮する方法を探すために、最適化のラウンドの間にいつでもそれらのケースに戻ることができます。

テストの自動化に近づいための私の順序は次のとおりです。

  • がテスト
  • 最適化
  • 手順を安定に動作

    1. 書き込みテスト1 & 2は必須ですが、ステップ3ではなく、依存あなたのプロジェクトの優先順位。たとえば、既存のテストを最適化するよりも新しいテストを追加することが重要です。一方、実行時間が非常に長く、したがってCIシステムが提供している利益を低下させる場合があります。そのような場合、既存のテストを最適化することがおそらくより重要になります。

      最後に、明示的および暗黙的な待機を混在させることは推奨されません。 See- http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits

      Combining implicit wait and explicit wait together results in unexpected wait times

      Clarification on the cause of mixing Implicit and Explicit waits of Selenium doc

    関連する問題