【问题标题】:Selenium driver - windowhandle messes upSelenium webdriver - 窗口句柄搞砸了
【发布时间】:2016-09-29 05:21:04
【问题描述】:

我在 Firefox 版本 48.x.x 上使用 Selenium WebDriver。为此,我需要使用 GeckoDriver/Marionette 驱动程序来与 Firefox 驱动程序通信。在旧版本的 Firefox 中,Selenium 驱动程序能够使用 driver.getWindowHandle() 获取浏览器窗口的会话 ID,但是在新的(?) Gecko/Marionette 驱动程序中,此函数返回一个短整数,而不是十六进制的长文本字符串.这是一个错误吗?还是壁虎/木偶驱动的新功能?

这是我遇到麻烦的地方:

1 - 我使用 Gecko/Marionette 驱动程序启动 Firefox 浏览器

final File file = new File("/Applications/geckodriver");
System.setProperty("webdriver.gecko.driver", file.getAbsolutePath());
driver = new FirefoxDriver(); 

它工作正常。然后我打印出浏览器窗口会话ID的值:

System.out.println("WindowHandle ID = " + driver.getWindowHandle());

它显示了一些不正确的 10 到 20 之间的短整数。

然后我打印出浏览器会话,我可以看到实际的会话 ID( () 之间的 MAC 字段):

Brwowser Session = BrowserSession [driver=FirefoxDriver: Firefox on MAC (**bc4eb9db-608b-5643-8ec9-136b6c54f6a2**), user=Admin, lastPage=null]

现在我认为新的 Gecko/Marionette 搞砸了 driver.getWindowHandle() 功能?由于这个显示停止器,我无法将 Selenium 控件从一个窗口切换到另一个窗口或弹出窗口。

问题

无论如何我可以获得实际的浏览器窗口会话 ID 吗?请帮忙。我真的需要克服这个巨大的障碍。我一直在寻找解决方案,但没有找到。

我正在用 Java 编写代码。

非常感谢大家。

【问题讨论】:

  • 你能提到使用的 Selenium 版本吗?
  • @Chandra... Selenium v​​ 3.0 beta; Firefox v 48。它仅适用于窗口。我尝试为我的 Mac 设置相同的设置,但没有成功。

标签: java selenium firefox


【解决方案1】:

使用 Selenium 2.53.1 + Firefox (v 48) 和以下代码

System.setProperty("webdriver.firefox.marionette", file.getAbsolutePath());

System.setProperty("webdriver.gecko.driver", file.getAbsolutePath());

【讨论】:

  • Chandra.. 我确实使用了第二个设置。让我尝试第一个,看看它是否能让我克服这个障碍。谢谢
  • Chandra.. 尝试一下,它与第一个选项 System.setProperty("webdriver.firefox.marionette", file.getAbsolutePath()); 配合使用效果很好。