我在 Firefox 版本 48.x.x 上使用 Selenium WebDriver。为此,我需要使用 GeckoDriver/Marionette 驱动程序才能与 Firefox 驱动程序对话。在旧版本的 Firefox 中,Selenium 驱动程序能够使用 driver.getWindowHandle()
获取浏览器窗口的 session ID。然而,在新的(?)Gecko/Marionette 驱动程序中,此函数返回一个短整数,而不是一个长的十六进制文本字符串。这是一个错误吗?或者 Gecko/Marionette 驱动程序的新功能?
这是我遇到麻烦的地方:
1 - 我使用 Gecko/Marionette 驱动程序启动 Firefox 浏览器
final File file = new File("/Applications/geckodriver");
System.setProperty("webdriver.gecko.driver", file.getAbsolutePath());
driver = new FirefoxDriver();
效果很好。然后我打印出浏览器窗口 session ID 的值:
System.out.println("WindowHandle ID = " + driver.getWindowHandle());
它显示了一些 10 到 20 之间的短整数,这是不正确的。
然后我打印出浏览器 session ,我可以看到实际的 session ID( () 之间的 MAC 字段):
Brwowser Session = BrowserSession [driver=FirefoxDriver: Firefox on MAC (**bc4eb9db-608b-5643-8ec9-136b6c54f6a2**), user=Admin, lastPage=null]
现在我认为新的 Gecko/Marionette 搞乱了 driver.getWindowHandle()
功能 ?由于这个问题,我无法将 Selenium 控件从一个窗口切换到另一个窗口或弹出窗口。
问题:
我是否可以获得实际的浏览器窗口 session ID?请帮忙。我真的需要克服这个巨大的障碍。我一直在寻找解决方案,但没有找到。
我正在用 Java 编写。
非常感谢大家。
最佳答案
使用 Selenium 2.53.1 + Firefox (v 48) 和以下代码
System.setProperty("webdriver.firefox.marionette", file.getAbsolutePath());
或
System.setProperty("webdriver.gecko.driver", file.getAbsolutePath());
关于java - Selenium 驱动程序 - 窗口句柄搞砸了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761986/