4

我正在使用Selenium WebDriver來自動化我的公司網站。在一個點上,web應用程序中打開通過下一個新的窗口:Selenium IEServerDriver找不到IE9的新窗口

<a onclick="WindowController.openWindow('quote.action?quoteProcessName=Shortform',WindowController.WINDOW_IS_TRACKED);" tabindex="1">Express Quote</a> 
我們使用jQuery

,但我認爲這是習俗。我在測試團隊,不做任何網站的開發。無論如何,它使用JavaScript打開一個新窗口。腳本點擊這個鏈接後,我需要它連接到新窗口。

問題是WebDriver在IE9中運行時似乎沒有找到新窗口。下面是我使用的嘗試,並切換到新窗口中的代碼:

public boolean switchTo(final WebRobot robot, final String pageTitle) { 
    boolean found = false; 

    int count = 0; 
    while (!found && count < 20) { 
     final Set<String> handles = robot.getDriver().getWindowHandles(); 
     final Iterator<String> itr = handles.iterator(); 
     while (itr.hasNext()) { 
      try { 
       final String current = itr.next(); 
       robot.getDriver().switchTo().window(current); 
       if (robot.getDriver().getTitle().contains(pageTitle)) { 
        robot.getLogger().debug("Switching to " + pageTitle); 
        found = true; 
       } 
      } catch (final NoSuchWindowException e) { 
       count++; 
       try { 
        Thread.sleep(2000); 
        System.out.println("Handles: " + robot.getDriver().getWindowHandles().size()); 
       } catch (final InterruptedException ignored) { 
        //Nothing to do here 
       } 
      } 
     } 
    } 
    return found; 
} 

(WebRobot是我寫的,讓我輕鬆切換瀏覽器和執行模式與webdriver的一類robot.getDriver()返回Selenium WebDriver對象)。

新窗口打開後,robot.getDriver()。getWindowHandles()。size()永遠是1.是否有東西我缺少拿起新窗口?

此代碼完美適用於Firefox,Chrome和IE8,但不支持IE9。我使用的是IEDriverServer版本爲2.32.3.0的64位版本。我使用Selenium WebDriver 2.32,並在Windows 7 64位上運行。

+0

您的'System.out.println()'調用** ever **顯示窗口句柄計數> 1嗎?我可以理解它從來沒有找到窗口,因爲你永遠不會刷新循環內'handles'的內容,所以它總是會有一組窗口句柄被初始化,這可能是一個單獨的句柄。 – JimEvans 2013-04-25 17:07:29

+0

更新了代碼以刷新每次迭代的句柄。仍然只看到原來的窗口。 – Merkidemis 2013-04-25 19:45:39

+0

我可以斷言,全局的窗口檢測並不是全部打破,對於所有頁面,無處不在。您可以嘗試增加IEDriverServer.exe日誌記錄的詳細程度(在您的語言選擇中搜索網頁以瞭解如何執行此操作),或提供一個演示此問題的完整示例(包括完整的HTML頁面)。 – JimEvans 2013-04-26 14:02:57

回答

0

http://grokbase.com/t/gg/webdriver/128hgbmcw0/getwindowhandles-return-only-1-window-in-ie

newSet.removeAll(oldSet); newWindow = newSet.toArray()[0];

+0

http://selenium.10932.n7.nabble.com/Unable-to-run-Selenium-tests-in-IE-Browser -td22982.html – 2013-05-22 10:12:46

+0

第一個鏈接轉到提示循環並等待新窗口句柄出現的線程,我已經這樣做了。另外,稍後在線程中,其他用戶表示他們仍然存在相同的問題。第二個鏈接告訴我,我需要使用IEServerDriver,我已經這麼做了,否則IE甚至不會打開。謝謝,但這些都不能提供解決方案。 – Merkidemis 2013-05-23 15:19:37