2014-12-31 58 views
7

早些時候,我已經將Chrome二進制文件「chromedriver.exe」放在「C:/ Windows」目錄中,Watir從那裏選取它。現在我必須將我的項目移動到另一臺機器,所以我無法對可執行文件路徑進行硬編碼。我還希望二進制代碼保存在Git上,而不是讓每個測試工程師在發佈新版本時手動更新二進制代碼。如何指定chromedriver二進制文件的位置

現在我已將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(及硒的webdriver)的chromedriver.exe的位置?

+0

你的Os有32位或64位系統? –

+0

我的操作系統是64位 – paul

+0

哪個驅動程序已放置在該列表的該路徑中:http://chromedriver.storage.googleapis.com/index.html?path=2.13/ –

回答

10

溶液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瀏覽器初始化

作爲替代過程中,你也可以初始化時指定驅動程序路徑瀏覽器。這有點更好,因爲你不需要有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 [「路徑」]

當我最初回答了這個問題,無論出於何種原因,我一直沒能得到上述溶液工作。當Selenium-WebDriver啓動驅動時,設置該值似乎沒有被使用。雖然第一種解決方案是推薦的方法,但這也是一種選擇。

另一種選擇是編程方式添加所需的目錄的路徑,其被存儲在ENV['PATH']。您可以在硒:: webdriver的::平臺的二進制通過檢查,如果在任何文件夾存在於路徑(從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 
+0

測試它的鉻,即兩者。它的工作... – paul

2

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 page

二進制:定義爲二進制的Chrome應用chromepage路徑。你可以使用chrome portable來使用不同版本的chrome。

+0

「error_message」:「未知選項:{:driver_path => \ – qwebek

相關問題