2012-08-15 46 views
6

我正在開發一個應用程序,在這個應用程序中我們需要檢查Web應用程序是否正在運行以及提供預期結果的URL。有沒有辦法將已經運行的瀏覽器附加到java中的selenium webdriver?

我們的調度程序每天運行這個應用程序12次。在每次啓動時,firefox驅動程序都會執行並打開一個新的瀏覽器窗口來執行操作。

我想要一種技巧,我們可以打開firefox瀏覽器1次,並在selenium驅動程序的每次調用中重複使用它。

回答

6

我其實並不完全確定你可以切換到驅動程序不會產生的窗口。我認爲從事Selenium 2項目工作的人員在切換到由不同的驅動程序產生的窗口方面做了一些工作。當你這樣做:

driver.getWindowHandles() 

所有你得到的是驅動程序對象產生的窗口被調用。

這是一個很舊的功能請求:Allow webdriver to attach to a running browser。所以現在不可能。

+1

那是對的。只要所有的窗口都是從同一個驅動程序實例啓動的,重用Windows並不是太大的問題。你只需要想出一種能夠關閉子窗口並打開父窗口的方法。 – djangofan 2013-06-04 15:53:18

5

你可以看到an example I wrote證明重用瀏覽器在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; 

} 

在一個項目中,我做到了,我創建了返回某些INT狀態碼,這取決於我的窗口配置的方法。如果狀態碼是我期望的,那麼我知道下一個測試可以繼續而不需要再次登錄或不打開新窗口。

當然,如果你的測試框架,比如Surefire或者TestNG,通過類派生線程,那麼你需要每個類一個webdriver實例。如果您的測試框架通過方法派生,那麼您需要將webdriver實例作爲參數傳遞給測試方法,以便線程可以訪問它。

相關問題