RemoteWebDriver工作一次,然后抛出NoSuchWindowException

时间:2014-05-13 17:43:52

标签: selenium selenium-webdriver selenium-grid

我在设置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 - Executing: [get: http://www.google.com] at URL: /session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url)
     INFO - Done: /session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url
     INFO - Executing: [get: http://www.stackoverflow.com] at URL: /session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url)
     INFO - Done: /session/de0a7b62-33a1-4330-b9a9-25b99f5504-cf/url
     WARN - Exception thrown
     org.openqa.selenium.NoSuchWindowException: Unable to get browser (WARNING: The server did not provide any stacktrace information)
  • 在回应理查德的评论时,WebDriver确实在测试结束时退出。我在控制台中打印出以下内容:

    成功stst 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”进程在测试结束时消失。但奇怪的是,浏览器本身并没有关闭。我不知道是什么原因引起的,以及它是否相关。

1 个答案:

答案 0 :(得分:1)

这听起来像IEDriverServer.exe的典型问题,如果节点机器上的配置没有正确完成,就会发生。

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

  

必需的配置

     
      
  • 必须下载IEDriverServer exectuable并将其放入PATH。
  •   
  • 在Windows Vista或Windows 7上的IE 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的值为0的DWORD值。
  •   

我有同样的问题,能够用这些提示来解决它。