Как указать местоположение двоичного файла chromedriver
ранее я поставил Chrome binary, " chromedriver.exe", в "C:/Windows-справочник и Ватир собирали его оттуда. Теперь я должен переместить свой проект на другую машину, чтобы я не мог жестко закодировать исполняемый путь. Я также хочу, чтобы двоичный файл сохранялся с нашим кодом на Git, а не заставлял каждого инженера вручную обновлять двоичный файл по мере выпуска новых версий.
теперь я разместил Chrome binary на абсолютном пути, но он не найден. Вот что я попробовал. (крючки.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?
2 ответов
Решение 1-Селен:: 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 во время инициализации браузера
в качестве альтернативы, вы можете также указать путь к драйверу при инициализации браузера. Это немного приятнее в том, что вам не нужно иметь код Селена, но будет повторяющимся, если вы инициализируете браузер в разных местах.
# 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']
другой вариант-программно добавить нужные каталог к пути, который хранится в 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
на Selenium webdriver 3.x
конфигов, изменения:
caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"binary" => <path to chrome (example: chrome portable)>})
Capybara::Selenium::Driver.new(app, :browser => :chrome, :driver_path => <path to chrome driver>, :desired_capabilities => caps)
driver_path: определить путь к chromedriver страница chromedriver
binary: определить путь к двоичному chrome app chromepage. Вы можете использовать портативный chrome для использования различных версий chrome.