gpt4 book ai didi

ruby - 如何指定 chromedriver 二进制文件的位置

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:56 25 4
gpt4 key购买 nike

之前我将 Chrome 二进制文件“chromedriver.exe”放在“C:/Windows”目录中,Watir 从那里挑选它。现在我必须将我的项目移动到另一台机器上,这样我就不能对可执行路径进行硬编码。我还希望二进制文件与我们的代码一起保存在 Git 上,而不是让每个测试工程师在发布新版本时手动更新二进制文件。

现在我已将 Chrome 二进制文件放在绝对路径中,但找不到。这是我尝试过的 (hooks.rb):

  Before do
puts "inside hooks in before"
profile = Selenium::WebDriver::Chrome::Profile.new
profile['download.prompt_for_download'] = false
profile['download.default_directory'] = File.join(File.absolute_path('../..', File.dirname(__FILE__)),"browsers/chromedriver.exe")
@browser = Watir::Browser.new :chrome, :profile => profile
end

输出是:

inside hooks in before

Selenium::WebDriver::Error::WebDriverError: Unable to find the chromedriver executable. Please download the server from http://chromedriver.storage.googleapis.com/index.html and place it somewhere on your PATH. More info at http://code.google.com/p/selenium/wiki/ChromeDriver.
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.44.0/lib/selenium/webdriver/chrome/service.rb:21:in `executable_path'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.44.0/lib/selenium/webdriver/chrome/service.rb:34:in `default_service'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.44.0/lib/selenium/webdriver/chrome/bridge.rb:14:in `initialize'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.44.0/lib/selenium/webdriver/common/driver.rb:37:in `new'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.44.0/lib/selenium/webdriver/common/driver.rb:37:in `for'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/selenium-webdriver-2.44.0/lib/selenium/webdriver.rb:67:in `for'
C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-webdriver-0.6.11/lib/watir-webdriver/browser.rb:46:in `initialize'
C:/Users/Admin/watircukepractice/test_puppies/features/support/hooks.rb:11:in `new'
C:/Users/Admin/watircukepractice/test_puppies/features/support/hooks.rb:11:in `Before'

我在 Windows 7 上,使用 Ruby 版本 1.9.3p551,我指的是教程 http://watirwebdriver.com/chrome/ .

我如何告诉 Watir(和 Selenium-WebDriver)chromedriver.exe 的位置?

最佳答案

解决方案 1 - Selenium::WebDriver::Chrome.driver_path=

Selenium::WebDriver::Chrome.driver_path= 方法允许指定 chromedriver 二进制文件:

require 'watir'

# Specify the driver path
chromedriver_path = File.join(File.absolute_path('../..', File.dirname(__FILE__)),"browsers","chromedriver.exe")
Selenium::WebDriver::Chrome.driver_path = chromedriver_path

# Start the browser as normal
b = Watir::Browser.new :chrome
b.goto 'www.google.com'
b.close

解决方案 2 - 在浏览器初始化期间指定 :driver_path

作为替代方案,您还可以在初始化浏览器时指定驱动程序路径。这更好一些,因为您不需要 Selenium 代码,但如果您在不同的地方初始化浏览器,将会重复。

# Determine the driver path
chromedriver_path = File.join(File.absolute_path('../..', File.dirname(__FILE__)),"browsers","chromedriver.exe")

# Initialize the browser with the driver path
browser = Watir::Browser.new :chrome, driver_path: chromedriver_path

解决方案 3 - 更新 ENV['PATH']

当我最初回答这个问题时,无论出于何种原因,我都无法使上述解决方案起作用。当 Selenium-WebDriver 启动驱动程序时似乎没有使用设置值。虽然第一种解决方案是推荐的方法,但这是一种替代方法。

另一种选择是以编程方式将所需目录添加到存储在 ENV['PATH'] 中的路径中。您可以在 Selenium::WebDriver::Platform 中看到二进制文件所在的位置,方法是检查可执行文件是否存在于路径中的任何文件夹中(从版本 2.44.0 开始):

def find_binary(*binary_names)
paths = ENV['PATH'].split(File::PATH_SEPARATOR)
binary_names.map! { |n| "#{n}.exe" } if windows?

binary_names.each do |binary_name|
paths.each do |path|
exe = File.join(path, binary_name)
return exe if File.executable?(exe)
end
end

nil
end

要指定包含二进制文件的文件夹,您只需更改 ENV['PATH'](附加目录):

require 'watir'

# Determine the directory containing chromedriver.exe
chromedriver_directory = File.join(File.absolute_path('../..', File.dirname(__FILE__)),"browsers")

# Add that directory to the path
ENV['PATH'] = "#{ENV['PATH']}#{File::PATH_SEPARATOR}#{chromedriver_directory}"

# Start the browser as normal
b = Watir::Browser.new :chrome
b.goto 'www.google.com'
b.close

关于ruby - 如何指定 chromedriver 二进制文件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com