我正在使用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位上运行。
您的'System.out.println()'调用** ever **显示窗口句柄计数> 1吗?我可以理解它从来没有找到窗口,因为你永远不会刷新循环内'handles'的内容,所以它总是会有一组窗口句柄被初始化,这可能是一个单独的句柄。 – JimEvans 2013-04-25 17:07:29
更新了代码以刷新每次迭代的句柄。仍然只看到原来的窗口。 – Merkidemis 2013-04-25 19:45:39
我可以断言,全局的窗口检测并不是全部打破,对于所有页面,无处不在。您可以尝试增加IEDriverServer.exe日志记录的详细程度(在您的语言选择中搜索网页以了解如何执行此操作),或提供一个演示此问题的完整示例(包括完整的HTML页面)。 – JimEvans 2013-04-26 14:02:57