2012-08-15 34 views
6

私は、Webアプリケーションが実行されているかどうか、および期待される結果を提供するURLを確認する必要のあるアプリケーションを開発しています。すでに実行中のブラウザをJavaのSelenium Webdriverに接続する方法はありますか?

スケジューラはこのアプリケーションを1日に12回実行します。起動するたびに、firefoxドライバが実行され、新しいブラウザウィンドウが開き、操作が実行されます。

私はfirefoxブラウザを1回開いて、セレンドライバが呼び出すたびに再利用するテクニックが必要です。

答えて

6

実際には、ドライバによって生成されていないウィンドウに切り替えることはできません。私はセレン2のプロジェクトに取り組んでいる人々は、別のドライバーによって生まれたウィンドウに切り替えるのにちょっとした作業をしたと思います。あなたがするとき:

driver.getWindowHandles() 

あなたが得るのは、それが呼び出されたドライバオブジェクトによって生成されたウィンドウだけです。

これはかなり古い機能要求です:Allow webdriver to attach to a running browser。それでは、今は不可能です。

+1

そうです。すべてのウィンドウが同じドライバインスタンスから起動されている限り、ウィンドウを再利用するのはあまり問題になりません。子ウィンドウを閉じ、親ウィンドウを開いたままにする方法が必要です。 – djangofan

5

WebDriverでブラウザを再利用するとうまく動作することがわかるan example I wroteが表示されます。基本的に、ブラウザウィンドウがWebDriverからインスタンス化されている限り、getWindowHandles()を使用して常に取得できます。複数のウィンドウが開いている場合は、Listを使用してそれらのウィンドウを追跡してください。さまざまな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; 

} 

は、私は窓の私の配置に応じて、特定のint型のステータスコードを返すメソッドを作成しました。ステータスコードが私の予想どおりであれば、次のテストは、再度ログインするか新しいウィンドウを開くことなく進めることができます。

もちろん、SurefireやTestNGなどのテストフレームワークがスレッドごとにスレッドをフォークする場合、クラスごとに1つのWebdriverインスタンスが必要です。あなたのテストフレームワークがメソッドでフォークするならば、スレッドがそれにアクセスできるように、テストメソッドへの引数としてwebdriverインスタンスを渡す必要があります。

関連する問題