2016-08-11 7 views
1

すべての種類の待機(waitForPageLoad、Thread.sleep、および要素がページにロードされるのを明示的に待つ)した後でも、断続的に失敗しても、テストスイートは「要素が見つかりません」というエラーを断続的にスローしません。Selenium Automationテストスイートが断続的に失敗するのはなぜですか?

同じテストケースを個別に実行すると、細かく実行されることもあります。n個のテストケースと一緒に実行されることもあります。30からなる完全な自動テストスイートを実行しようとすると、 40のテストケース。

誰も私に同じ根本的な原因を見つけるのを手伝ってもらえますか?

私は、次の段階でのMavenを通じてテストスイートを実行しています:

<executions><execution>   
<phase>site</phase>    
    <goals>    
     <goal>send-mail</goal>    
    </goals>  
</execution> </executions> 

が、それはMavenのフェーズが実行していた中で任意の関係を持っていますか?

+0

セレンのwebdriver JS&chromedriverで同様の動作が見られます。私がセレンとクロムドライバのバージョンを更新するまで、スイートは一貫して特定のテストで失敗しましたが、今でも失敗しますが、いくつかのテストはリストの下にあります。非常に奇妙な。 – anjunatl

答えて

0

Mavenについてはわかりませんが、ページが読み込まれるのを待っていますが、必ずしも必要な要素が読み込まれているとは限りません。

私はあなたが望む要素が実際に存在していたことを確信する必要があると思います。存在していれば、それは対話的でした。

あなたはThread.sleep()を使用していますが、これはページ上の要素の存在に関するインテリジェンスがなくても、特定の期間だけ待つことになります。

あなたがしなければならないことは、要素が利用可能になるようにポーリングすることです。 Explicit Waitsを調べてみてくださいhttp://www.seleniumhq.org/docs/04_webdriver_advanced.jsp

ここでは、WebDriverWaitとExpectedConditionの2つの要素を組み合わせて、その要素が最大30秒間クリック可能になるまで待つようにします。

また、テストは孤立していても実行は不十分であると言います。これは、あなたの環境をよく知られている状態にリセットしていないことを示しています。簡単な例は、各テストの後にブラウザを閉じることです。より良い方法は、同じテストを何度も繰り返すために、テストケースごとに不変のVM(またはドッカーのコンテナ)を起動することです。

あなたはそれをしたくない場合がありますが、あなたのテストがどのようにして浸漬を処理するかを見てみましょう。

あなたの主な関心事になるはずですが、安定して再現性があります。テストが失敗した時を見て、あなたが望む要素がその特定の時間に実際に利用可能であったことを確認してください。メモリリークなど。ブラウザを遅くし、3秒以上スリープ状態にすることができます。もしあなたが欠陥をカバーするのを待つつもりならば、それをカバーして不具合が解消されるまで、取り組んでいます。

関連する問題