2017-10-12 10 views
0

JavaScriptエラーが発生するたびにエラーダイアログが表示されます。これは常に悪い兆候です。そのため、エラーダイアログが表示された場合にテストが失敗するようにテストを設定します。Selenium - エラー状態を監視し、「ハッピーパス」テストコードを実行する

私は(非常に擬似コード!)のような何かをしたいと思います。

// start a new 'guard' thread; 
start { 
    found = this.driver.wait(untilVisible(By.css('.myErrorDialog')), VERY_LONG_TIMEOUT); 
    if (found) { 
     // the error dialog appeared! That's bad! 
     throw(); 
    } 
} 

// now run the test 
login(); 
clickButton(); 
testBannerContains(); 

しかし、私は問題を抱えており、セレンが行動をスケジュールする方法と関係していると思います。

私が見つけたのは、1人のドライバーにとっては、一度に1つのものしかスケジュールできないため、私がテストの初期に設定したガードは、テストの本体が起動しないようにブロックします。

'これは起こりません'や同じテストで2つの独立したスレッドを作成する方法などの条件を処理するより良い方法はありますか?

+0

マルチスレッドは[TestNG](http://testng.org/doc/documentation-main.html#parallel-running)で組み込まれています。それができない場合は、[this](http://roadtoautomation.blogspot.in/2015/01/road-to-parallel-execution-of-selenium_11.html)のようなものを試すことができます。 [ExpectedConditions.isAlertPresent()](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#alertIsPresent--)はより良い/より簡単かもしれません/適切なオプション。 – user2611581

+0

これはウェブページへの最初のナビゲーションでのみ起こりますか? – JOberloh

+0

@JonahOberlohいいえ、これはテストが実行されている間はいつでも可能です。テストの全期間中、エラーダイアログが表示された場合、テストは即座に失敗する必要があります –

答えて

0

コードに問題があるのは、直ちに実行し、エラーダイアログが表示されるまでの時間がVERY_LONG_TIMEOUTになるのを待つことです。それが決してないので、それは待っています。

私はこのようなことはしていませんが、エラーダイアログが表示されたときにトリガされるイベントを監視するJSイベントハンドラが必要だと思います。そこにいくつかのガイダンスについては、下のリンクを参照してください。

Can my WebDriver script catch a event from the webpage?

1つのオプションは、いくつかのJS変数に発火し、その後true(または何でも)を格納するために、そのイベントを監視することです。ページを出る前に、変数がtrueに設定されているかどうかを確認し、そうであればテストに失敗してください。 JavascriptExecutorを使用してJS変数を設定して取得できます。いくつかのGoogleの検索は、あなたがそれを使用するために必要なすべてを取得する必要があります。

関連する問題