【发布时间】: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