【问题标题】:Selenium IEServerDriver not finding new windows for IE9Selenium IEServerDriver 找不到 IE9 的新窗口
【发布时间】:2013-04-18 12:07:00
【问题描述】:

我正在使用 Selenium WebDriver 来自动化我的公司网站。在某一时刻,Web 应用程序通过以下方式打开一个新窗口:

<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 的 64 位版本,版本 2.32.3.0。我正在使用 Selenium WebDriver 2.32,并在 Windows 7 64bit 上运行。

【问题讨论】:

  • 您的System.out.println() 调用曾经是否显示窗口句柄计数> 1?我可以理解它永远找不到窗口,因为您永远不会在循环中刷新handles 的内容,因此它始终具有初始化它所用的一组窗口句柄,这可能是单个句柄。
  • 更新了代码以刷新每次迭代的句柄。仍然只能看到原始窗口。
  • 我可以明确地说,对于所有页面,任何地方,窗口检测都没有在全球范围内被破坏。您可以尝试增加 IEDriverServer.exe 日志记录的详细程度(在 Web 上搜索如何使用您选择的语言执行此操作),或者提供一个完整的示例来演示该问题,包括完整的 HTML 页面。
  • 很遗憾我无法提供 HTML 源代码。公司财产等等。这是日志文件:redlightning.net/ieLog.txt

标签: java internet-explorer selenium internet-explorer-9 webdriver


【解决方案1】:

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

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

【讨论】:

  • 第一个链接指向一个线程,建议循环并等待新窗口句柄出现,我已经在这样做了。另外,稍后在线程中其他用户表示他们仍然遇到同样的问题。第二个链接告诉我我需要使用 IEServerDriver,我已经在使用它,否则 IE 甚至无法打开。谢谢,但这些都没有提供解决方案。
【解决方案2】:

打开兼容模式解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多