2016-11-01 1 views
0

私は、Java selenium webdriverプロジェクトに多くのThread.sleep()コマンドを持っています。私はしばしば、sleepコマンドを使用することは悪い習慣であり、ブラウザインスタンスが起動された後、暗黙のうちにコマンドが代わりに宣言されるべきであり、スクリプト全体を処理することを頻繁に読んでいます。このプロジェクトではこれは私の仕事ではありません。Thread.sleep()は、implicitlyWaitよりも優れていることを証明しています

特定の要素に対して多くのNoSuchElementExceptionsがスローされているので、問題を引き起こす各要素の直前にsleepコマンドを追加しました。スクリプトは合格しました。スリープコマンドを解除して30秒間暗黙のうちに宣言したとき、スクリプトはWebdriverException/NoSuchElementExceptionで失敗しました。なぜなら、webdriverはこれらの要素のそれぞれを見つけることができないからです。スリープコマンドは、2〜3秒で要素を見つけることです。 Thread.sleep()はここで優れていると証明していますか?私がExplicitlyWaitを使用しなければならない場合、期待される条件を必要とする多くの要素があるので、それらを多く宣言しなければなりません。回避策はありますか?

答えて

1

要素の検索を明示的に待機します。例外をスローする前に条件または最大待機時間まで待機します。

WebDriverWait wait = new WebDriverWait(WebDriverRefrence,20); // pass time in seconds as much you need 
WebElement myElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("your element's id"))); 

注: FluentWaitあまりにも別の良いオプションかもしれません。

+1

明示的な待機に関する問題は、それが個々のケースであることです。関係するすべての要素に対して1つ宣言することはできません。つまり、Thread.sleep()と同様に、スクリプトで何度も宣言する必要があります。正しい? –

3

Thread.sleep() - 待機するたびに設定します。 "ダム"待つ。それは指定された時間を待つ。あなたの要素が25msで利用可能な場合、指定された10秒間待機し、毎回の無駄な時間につながります。

暗黙の待機 - 設定すると、WebDriverインスタンスの寿命を通して一度も維持されます。指定された時間が、すべて.findElement()となるまで待ちます。したがって、要素が存在しないことなどをチェックする必要がある場合は、暗黙の待機で指定された時間だけチェックが行われ、無駄な時間につながります。

明示的な待機WebDriverWait) - 待機するたびに設定します。これはFluentWaitの特定のインスタンスです。 ExpectedConditionsを使用して、すべての一般的なニーズ(可視、クリック可能など)でカスタマイズできます。これがベストプラクティスです。

流暢な待ち時間 - 待ち時間があるたびに設定します。スイス軍のナイフが待っています。何かできることは...完全にカスタマイズ可能です。非常に具体的な例では便利ですが、一般的に待ち時間のほとんどはWebDriverWaitでカバーされ、ExpectedConditionsでカバーされます。私は待機を使用する方法

...

私はページオブジェクトモデルを使用すると、ページがロードされたときに実行され、各ページオブジェクトのコンストラクタで、私は上の要素を待つWebDriverWaitを使用利用可能なページ。その要素が利用可能になると、全ページが読み込まれたことがわかります。今、私はそのページから欲しい要素を掻き取ることができます。ページの状態を変更した場合、新しい要素が表示されるのを待つ別のWebDriverWaitがあります。これは動的ページの変更が完了したことを示します。今すぐ私は再び意地をつくことができます。

あなたは本当にすべての.findElement()コールを待つ必要はありません。上記のように、ページがロードされるのを待つか、動的なページの変更を待ってください。非常に特定のインスタンスでのみ待機する必要があります...どこにでもない。

注:Do not mix implicit and explicit waits。あなたは悪い/奇妙な結果を得るでしょう。

関連する問題