2014-12-31 15 views
7

Trước đó tôi đã đặt nhị phân Chrome, "chromedriver.exe", trong thư mục "C:/Windows" và Watir đã chọn nó từ đó. Bây giờ tôi phải di chuyển dự án của mình sang một máy khác để tôi không thể mã hóa đường dẫn thực thi. Tôi cũng muốn các mã nhị phân được lưu giữ với mã của chúng tôi trên Git thay vì làm cho mỗi kỹ sư kiểm tra cập nhật thủ công nhị phân khi các phiên bản mới hơn được phát hành.Cách xác định vị trí của nhị phân chromedriver

Bây giờ tôi đã đặt nhị phân Chrome ở đường dẫn tuyệt đối, nhưng không tìm thấy nó. Đây là những gì tôi đã cố gắng (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 

Đầu ra là:

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' 

Tôi đang trên Windows 7, Sử dụng Ruby phiên bản 1.9.3p551 và tôi đang đề cập đến hướng dẫn http://watirwebdriver.com/chrome/.

Làm cách nào để nói với Watir (và Selenium-WebDriver) vị trí của chromedriver.exe?

+0

Os của bạn có 32 BIT hoặc 64 BIT? –

+0

Hệ điều hành của tôi là 64 bit – paul

+0

trình điều khiển bạn đã đặt trong đường dẫn đó từ danh sách này: http://chromedriver.storage.googleapis.com/index.html?path=2.13/ –

Trả lời

10

Giải pháp 1 - Selenium :: WebDriver :: Chrome.driver_path =

Có một phương pháp Selenium::WebDriver::Chrome.driver_path= cho phép nêu rõ các nhị phân 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 

Giải pháp 2 - Chỉ định: driver_path trong khi khởi chạy trình duyệt

Thay vào đó, bạn cũng có thể chỉ định đường dẫn trình điều khiển khi khởi tạo trình duyệt. Đây là một chút đẹp hơn trong đó bạn không cần phải có mã Selenium, nhưng sẽ được lặp đi lặp lại nếu bạn khởi tạo trình duyệt ở những nơi khác nhau.

# 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 

Giải pháp 3 - Cập nhật ENV [ 'PATH']

Khi Ban đầu tôi đã trả lời câu hỏi này, vì lý do gì, tôi đã không thể để có được những giải pháp trên để làm việc. Đặt giá trị dường như không được sử dụng khi Selenium-WebDriver khởi động trình điều khiển. Trong khi giải pháp đầu tiên là cách tiếp cận được khuyến nghị, đây là giải pháp thay thế.

Một tùy chọn khác là thêm lập trình thư mục mong muốn vào đường dẫn, được lưu trữ trong ENV['PATH']. Bạn có thể nhìn thấy trong Selenium :: WebDriver :: nền tảng nhị phân được xác định bằng cách kiểm tra nếu thực thi tồn tại trong bất kỳ thư mục trong đường dẫn (từ phiên bản 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 

Để chỉ định thư mục bao gồm các nhị phân, bạn chỉ cần thay đổi ENV['PATH'] (để thêm các thư mục):

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

Thử nghiệm nó cho chrome, tức là cả hai. Nó hoạt động ... – paul

2

Trong Selenium webdriver 3.x configs, thay đổi:

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: Xác định đường dẫn đến chromedriver chromedriver page

nhị phân: Xác định đường dẫn đến nhị phân ứng dụng chrome chromepage.Bạn có thể sử dụng Chrome xách tay để sử dụng các phiên bản chrome khác nhau.

+0

"error_message": "tùy chọn không xác định: {: driver_path => \ – qwebek

Các vấn đề liên quan