【问题标题】:RemoteWebDriver works once, then throws NoSuchWindowExceptionRemoteWebDriver 工作一次,然后抛出 NoSuchWindowException
【发布时间】:2014-05-13 17:43:51
【问题描述】:

我在设置 Selenium Grid 时遇到了一个奇怪的问题。我的 RemoteWebDriver 工作一次,然后如果我尝试用它做任何其他事情,就会抛出 NoSuchWindowException。

例如,如果我运行以下测试(我只是为了探索这个问题而编写的):

@Test
public void testStuff() {
    try{Thread.sleep(2000);}catch(Exception e){}
    driver.get("http://www.google.com");
    try{Thread.sleep(2000);}catch(Exception e){}
    driver.get("http://www.stackoverflow.com");
    System.out.println(driver.getTitle());
}

一个 IE 浏览器会在我将其发送到的虚拟机上弹出。然后该浏览器成功进入谷歌。但是,当我尝试用它做任何其他事情时(比如转到另一个网站,或获取窗口的标题),我得到以下异常:

org.openqa.selenium.NoSuchWindowException: Unable to get browser(WARNING: The server did not provide any stacktrace information)

我尝试了各种组合,每次都得到相同的结果:我可以成功调用 RemoteWebDriver 的方法一次,但第二次抛出此异常。

有人知道是什么原因造成的吗?

我检查过的内容:

  • IEDriverServer 和 VM 都是 64 位的。

  • Hub 和 Node 的控制台都没有提供有用的线索。节点控制台包含:

     INFO - 执行:[get: http://www.google.com] 在 URL:/session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url)
      信息 - 完成:/session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url
      信息 - 执行:[获取:http://www.stackoverflow.com] 在 URL:/session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url)
      信息 - 完成:/session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url
      警告 - 抛出异常
      org.openqa.selenium.NoSuchWindowException:无法获取浏览器(警告:服务器未提供任何堆栈跟踪信息)
  • 针对 Richard 的评论,WebDriver 确实在测试结束时退出。我在控制台中打印出以下内容:

    成功 strt RemoteWebDriver: WINDOWS 上的 Internet Explorer (40b01604-9217-4f67-b809-61cd90d23c84) 准备退出 RemoteWebDriver:WINDOWS 上的 Internet Explorer (40b01604-9217-4f67-b809-61cd90d23c84) 成功退出 RemoteWebDriver: WINDOWS 上的 Internet Explorer (null)

  • 此外,在 VM 的任务管理器中,“IEDriverServer”进程在测试结束时消失。但奇怪的是,浏览器本身并没有关闭。我不知道是什么原因造成的,也不知道它是否相关。

【问题讨论】:

  • 如何初始化驱动程序?你是如何在测试结束时退出驱动程序的?其他几个cmets。我在使用 64 位版本的 IEDriverServer 时遇到问题,建议尝试 32 位版本。另一个是 IEDriverServer 不喜欢它,如果你有一个 IE 实例完全打开。如果您没有正确退出 IEDriverServer 的第一个实例,并且 IE 窗口处于打开状态,这可能是问题的原因。
  • @Richard 好的,这真的很奇怪。我的代码正在退出驱动程序。我什至设置了一些 System.out.println() 来确认这一点。但是在VM中,浏览器并没有关闭!我在VM中打开任务管理器观察进程,我看到在调用driver.quit()之后,IEDriverServer从进程列表中删除了——但是ie浏览器并没有关闭!另外,在我手动关闭它并再次运行测试后,它仍然以同样的方式失败。
  • 我也有同样的问题!

标签: selenium selenium-webdriver selenium-grid


【解决方案1】:

在我看来,这是 IEDriverServer.exe 的一个典型问题,如果节点机器上的配置未正确完成,就会发生。

请务必遵守Selenium Website 中描述的所有要求。此处引用对应部分:

所需配置

  • 必须下载 IEDriverServer 可执行文件并将其放置在您的 PATH 中。
  • 在 IE 7 或更高版本的 Windows Vista 或 Windows 7 上,您必须将每个区域的保护模式设置设置为相同的值。该值可以打开或关闭,只要每个区域都相同。要设置保护模式设置,请从“工具”菜单中选择“Internet 选项...”,然后单击“安全”选项卡。对于每个区域,标签底部都有一个标记为“启用保护模式”的复选框。
  • 此外,对于 IE 10 及更高版本,必须禁用“增强保护模式”。此选项位于 Internet 选项对话框的高级选项卡中。
  • 必须将浏览器缩放级别设置为 100%,以便可以将本机鼠标事件设置为正确的坐标。
  • 仅对于 IE 11,您需要在目标计算机上设置一个注册表项,以便驱动程序可以保持与其创建的 Internet Explorer 实例的连接。对于 32 位 Windows 安装,您必须在注册表编辑器中检查的项是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE。对于 64 位 Windows 安装,密钥是 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BFCACHE。请注意,FEATURE_BFCACHE 子项可能存在也可能不存在,如果不存在,则应创建它。 重要提示:在此键中,创建一个名为 iexplore.exe 的 DWORD 值,值为 0。

我遇到了同样的问题,并且能够通过这些提示解决它。

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多