web-dev-qa-db-ja.com

chromedriverバイナリの場所を指定する方法

以前、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'

私はWindows7を使用しており、Rubyバージョン1.9.3p551を使用しており、チュートリアルを参照しています http://watirwebdriver.com/chrome/

Watir(およびSelenium-WebDriver)にchromedriver.exeの場所を伝えるにはどうすればよいですか?

12
paul

ソリューション1-Selenium :: WebDriver :: Chrome.driver_path =

Chromedriverバイナリの指定を可能にするSelenium::WebDriver::Chrome.driver_path=メソッドがあります。

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がドライバーを起動したとき、値の設定は使用されていないようでした。最初の解決策が推奨されるアプローチですが、これは代替手段です。

もう1つのオプションは、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
12
Justin Ko

Selenium webdriver 3.x configsで、以下を変更します。

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アプリへのパスを定義します chromepage 。 chromeポータブルを使用して、さまざまなバージョンのchromeを使用できます。

2
Juanma Jurado

セレンを更新するdriver_path 直接。

新しいChromeブラウザウィンドウを起動する前に、これを呼び出すだけです。

Selenium::WebDriver::Chrome::Service.driver_path = Rails.root.join( "lib", "chromedriver" ).to_s

もちろん、パスをchromedriverがある場所に変更してください。

注意: driver_pathは文字列である必要があるため、FileまたはPathオブジェクトを渡さないでください。

0
Joshua Pinter