Java と Selenium を使用して、いくつかのテスト ケースを自動化しています。これには、検索結果を含む 1 つのページを読み込み、その 1 つのページの 100 ~ 1000 個のリンクをそれぞれ反復処理することが含まれます。約 100 の結果のみをチェックするようにテスト構成を設定することは、通常は問題ありませんが、それよりも多く、ある時点で NoSuchWindowException がスローされます (WebDriverException のサブクラス)。これは、親ハンドルから新しく開いたウィンドウ ハンドルに切り替えると発生します。
do while ループ内に try-catch ステートメントを記述して、例外をキャッチし、手順を再試行しました。コード:
boolean completed = false;
do{
try{
//click the search result
driver.findElement(By.xpath("my xpath string")).click();
//switch to the new window
for(String winHandle: driver.getWindowHandles()){
driver.switchTo().window(winHandle);
}
//for our test we need to save the source
source = driver.getPageSource();
//close popup window and and switch back to the parent handle
driver.close();
driver.switchTo().window(parentHandle);
completed = true;
}catch(WebDriverException ex){
System.out.println("something went wrong while switching windows... retrying");
driver.close();
driver.switchTo().window(parentHandle);
}
}while(!completed);
例外がキャッチされたとき、さまざまなアプローチを試しました。たとえば、driver.quit() を使用して親 URL を保存してから、ドライバーを再起動しようとしました。ただし、Selenium は、driver.quit() を呼び出した後、Firefox ドライバーを起動できなかったと不平を言いました...
コードのキャッチ部分をより適切に処理する方法はありますか?