-1

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 ドライバーを起動できなかったと不平を言いました...

コードのキャッチ部分をより適切に処理する方法はありますか?

4

1 に答える 1

0

さて、タラが残したコメントのおかげで解決策を見つけました。

次のステートメントを catch ブロックから単純に削除しました。

driver.close();
driver.switchTo().window(parentHandle);

これで、catch ブロック自体が別のキャッチされていない例外を生成することはなくなり、ループは以前のコードを再試行して正しく機能します...

于 2013-08-07T13:54:12.677 に答える