java - Selenium 驱动程序 - 窗口句柄搞砸了

标签 java selenium firefox

我在 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/

相关文章:

java - Tomcat 6 - 请求的资源......不可用

java - 使用 java 反射运行时,HDFS Parquet 文件读取器抛出 DistributedFileSystem.class not found

java - Bufferedreader 和文件路径 - 简单

java - 使用 Mockito 和 Android 模拟 Drawable

python - Python 中的 Selenium : Select the second element with given link text

firefox - Postman 插件就像 Firefox 中的一样

javascript - 事件相机 FirefoxOS

javascript - 单击 Javascript 警报时如何保留我的 Firefox 首选项?

ruby - 使用 Selenium 和 Ruby 将键盘快捷键发送到 chrome

javascript - 如何使用 angularjs 开发 firefox 插件