使用 geckodriver v0.11 在 Firefox 中设置用户代理

Setting the user agent in Firefox using geckodriver v0.11

我正在努力更新我们的 selenium 测试以在 Firefox v50.x 上运行,因此我需要使它们与 geckodriver v0.11 兼容

现在看来,现在使用 Firefox::Profile 初始化网络驱动程序会使网络驱动程序崩溃,因为它无法识别配置文件中设置的任何字段:

ArgumentError
unknown option: {:profile=>#<Selenium::WebDriver::Firefox::Profile:0x00000005088bf8 @model="selenium_profile", @native_events=false, @secure_ssl=false, @untrusted_issuer=true, @load_no_focus_lib=false, @additional_prefs={}, @extensions={}>}

我仍然可以通过不使用配置文件初始化 webdriver 来进行测试 运行,但是我们的一些测试将失败,因为它们要求我们有一个特定的用户代理。

阅读文档后,您现在似乎应该使用 moz:firefoxOptions 来实现此功能,但我找不到任何代码示例来说明如何实际使用 moz:firefoxoptions 来实现任何功能

谁能给我一个代码示例,说明如何使用 moz:firefoxOptions 或使用 selenium-webdriver 3.0.3 和 geckodriver v0.11 设置 firefox 用户代理的任何其他方式?

目前您无法通过 geckodriver 的配置文件选项传递配置文件。这在 Issue #2933, and I currently have a PR (PR #3174) 中记录,用于添加此功能。

现在,您应该能够执行以下操作:

通过

创建配置文件
profile = Selenium::WebDriver::Firefox::Profile.new('/path/to/profile')

profile = Selenium::WebDriver::Firefox::Profile.from_name('name_of_profile')

然后

caps = Selenium::WebDriver::Remote::W3CCapabilities.firefox
caps[:firefox_options] = { profile: profile.as_json['zip'] }
driver = Selenium::WebDriver.for(:firefox, desired_capabilities: caps)

[:firefox_options] 在代码

中被翻译成 moz:firefoxOptions

附带说明一下,您还可以 运行 使用旧版 FF 驱动程序而不是 geckodriver,因为您 运行 反对 FF50