从任意位置启动 Watir/Selenium Chrome 驱动程序二进制文件

Launch Watir/Selenium Chrome driver binary from an arbitrary location

我想使用 Watir 为旧版本的 chrome 启动 chrome,比如 /Application/Google Chrome 30.app

这里有一个参考 link 说 chrome 驱动程序期望 Chrome 安装在特定位置:

Mac /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome

这是在非标准位置设置 Chrome 可执行文件的参考 link

ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/other/chrome/binary");

我如何使用 Watir 做到这一点,给定语法

driver = Watir::Browser.new :chrome

谢谢!

为特定浏览器实例设置二进制文件

可以使用 :desired_capabilities 作为 "chromeOptions":

将 Chrome 选项从 Watir 传递到 Selenium
caps = {"chromeOptions" => {"binary" => 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'}}
browser = Watir::Browser.new(:chrome, desired_capabilities: caps)

关于 binary 值的注释(来自 Chromedriver page):

Path to the Chrome executable to use (on Mac OS X, this should be the actual binary, not just the app. e.g., '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome')

设置默认二进制

除了为每个浏览器设置二进制,您还可以设置默认二进制位置:

Selenium::WebDriver::Chrome.path = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
browser = Watir::Browser.new :chrome

我的建议是完全不使用 WatiR,而是使用“Selenium bindings”。无论如何,我认为语法更容易理解。就使用 ChromeOptions 二进制位置参数而言,我会更好地信任 Selenium 绑定。

直接更新您的 Selenium driver_path

只需在启动新的 Chrome 浏览器之前调用它 window:

Selenium::WebDriver::Chrome::Service.driver_path = "/path/to/other/chrome/binary"

当然,将路径更改为您的 chromedriver 所在的位置。对我们来说,我们使用 Rails.root.join( "lib", "chromedriver" ).to_s 因为它对项目来说是动态的,我们可以将其签入回购协议,它只适用于我们所有的工程师。

注意:driver_path 需要是一个字符串,所以不要传入 FilePath 对象。