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