Webアプリケーションが実行されているかどうか、および期待される結果を提供するURLを確認する必要があるアプリケーションを開発しています。
私たちのスケジューラーは、このアプリケーションを1日12回実行します。起動するたびに、Firefoxドライバーが実行され、操作を実行するための新しいブラウザーウィンドウが開きます。
Firefoxブラウザを1回開いて、selenium-driverによるすべての呼び出しで再利用する手法が必要です。
Webアプリケーションが実行されているかどうか、および期待される結果を提供するURLを確認する必要があるアプリケーションを開発しています。
私たちのスケジューラーは、このアプリケーションを1日12回実行します。起動するたびに、Firefoxドライバーが実行され、操作を実行するための新しいブラウザーウィンドウが開きます。
Firefoxブラウザを1回開いて、selenium-driverによるすべての呼び出しで再利用する手法が必要です。
ドライバーによって生成されないウィンドウに切り替えることができるかどうかは、実際には完全にはわかりません。セレン2プロジェクトに取り組んでいる人々は、別のドライバーによって生成されたウィンドウへの切り替えに少し取り組んできたと思います。あなたがするとき:
driver.getWindowHandles()
取得するのは、呼び出されたドライバーオブジェクトによって生成されたウィンドウだけです。
これはかなり古い機能リクエストです。実行中のブラウザにWebドライバを接続できるようにします。ですから、今は不可能です。
私が書いた例を見ると、WebDriverでブラウザーを再利用しても問題なく機能することが証明されています。基本的に、ブラウザウィンドウがWebDriverからインスタンス化されている限り、getWindowHandles()を使用して常にそれを取得できます。複数のウィンドウを開いている場合は、リストを使用してそれらを追跡します。さまざまなWebDriverメソッドを使用して、特定の方法で表示されたり、特定の情報が含まれているウィンドウを識別できます。
つまり、ブラウザウィンドウがWebDriverによって開かれていなかった場合、WebDriverはそれにフックすることができません。
大まかな例:
public static boolean selectWindow(WebDriver driver, String windowTitle){
//Search ALL currently available windows
for (String handle : driver.getWindowHandles()) {
String newWindowTitle = driver.switchTo().window(handle).getTitle();
if(newWindowTitle.equalsIgnoreCase(windowTitle))
//if it was found break out of the wait
return true;
}
return false;
}
私が行った1つのプロジェクトでは、ウィンドウの配置に応じて、特定のintステータスコードを返すメソッドを作成しました。ステータスコードが私が期待しているものである場合、次のテストは再度ログインせずに、または新しいウィンドウを開かずに続行できることがわかります。
もちろん、SurefireやTestNGなどのテストフレームワークがクラスごとにスレッドをフォークする場合は、クラスごとに1つのWebドライバーインスタンスが必要です。テストフレームワークがメソッドによってフォークする場合は、スレッドがアクセスできるように、webdriverインスタンスを引数としてtestメソッドに渡す必要があります。