2017-06-16 95 views
6

Google Chrome版本59.0.3071.104如何使用無頭鍍鉻與水豚和硒

用黃瓜,水豚,硒實現與無頭Chrome的自動化測試。

features/support/env.rb

require 'rubygems' 
require 'capybara/cucumber' 

Capybara.register_driver :selenium_chrome do |app| 
    Capybara::Selenium::Driver.new(app, :browser => :chrome, args: ['headless']) 
end 

Capybara.default_driver = :selenium_chrome 

當運行一個測試的黃瓜,它說:

WARN Selenium [DEPRECATION] :args or :switches is deprecated. Use Selenium::WebDriver::Chrome::Options#add_argument instead.

什麼是使用水豚和硒與無頭瀏覽器的正確方法。謝謝。編輯1:我試過以下使用Ruby-Binding,CapybaraWorking Example。但它也會帶來錯誤。

require 'rubygems' 
require 'capybara/cucumber' 
require 'selenium-webdriver' 

Capybara.register_driver :selenium_chrome do |app| 
    options = Selenium::WebDriver::Chrome::Options.new 
    options.add_argument('--headless') 
    driver = Selenium::WebDriver.for :chrome, options: options 
    Capybara::Selenium::Driver.new(
    app, 
    browser: :chrome, 
    desired_capabilities: driver 
) 
end 

Capybara.default_driver = :selenium_chrome 

錯誤:

> undefined method `each' for 
> #<Selenium::WebDriver::Remote::Capabilities:0xd13baac> (NoMethodError) 

編輯2: 下載最新ChromeDriver 2.30

ChromeDriver Capabilities & 使用的例子,我得到一個錯誤。

Net::ReadTimeout (Net::ReadTimeout)

require 'rubygems' 
require 'capybara/cucumber' 
require 'selenium-webdriver' 

Capybara.register_driver :selenium_chrome do |app| 
    caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    "chromeOptions" => { 
     "binary" => "/chromedriver_win32/chromedriver.exe", 
     "args" => [ "--disable-web-security", "--headless" ] 
    } 
) 
    Capybara::Selenium::Driver.new(
    app, 
    browser: :chrome, 
    desired_capabilities: caps 
) 
end 

Capybara.default_driver = :selenium_chrome 

回答

5

1)確保你沒有其他註冊驅動程序,我犯了這個錯誤我自己,有一個iphone驅動程序,這是在舊的方式使用args,這就是爲什麼我得到的警告。

2)請確保您有Chrome版本57+在Linux上,59+在MacOS或60+在Windows上;

3)添加/更新寶石selenium-webdriver;

4)以下司機添加到您的spec_helper.rbrails_helper.rb

Capybara.register_driver :chrome do |app| 
    Capybara::Selenium::Driver.new app, browser: :chrome, 
    options: Selenium::WebDriver::Chrome::Options.new(args: %w[headless disable-gpu]) 
end 

Capybara.javascript_driver = :chrome 
+0

謝謝。我成功擺脫了這個警告。 – kstratis

1

的Windows支持在Chrome 60

下載 「丁目金絲雀」 來,給安裝路徑爲binarychromeOptions.

下載最新的 「chromedriver」,並加入到環境變量中的路徑。

require 'rubygems' 
require 'capybara/cucumber' 
require 'selenium-webdriver' 

Capybara.register_driver :selenium_chrome do |app| 
    caps = Selenium::WebDriver::Remote::Capabilities.chrome(
    "chromeOptions" => { 
     "binary" => "C:/Users/YOURUSERNAME/AppData/Local/Google/Chrome SxS/Application/chrome.exe", 
     "args" => [ "--disable-web-security", "--headless", "--disable-gpu" ] 
    } 
) 
    Capybara::Selenium::Driver.new(
    app, 
    browser: :chrome, 
    desired_capabilities: caps 
) 
end 

Capybara.default_driver = :selenium_chrome 
0

我能得到的Chrome當前版本的這個工作,但它會顯示一個空白窗口。如果你想擺脫這一點,那麼你需要使用「鉻金絲雀」構建。

下面的代碼是@ lucas-caton和@ shawn-derik的答案的組合,但解決了上面提到的問題。

Capybara.register_driver :chrome do |app| 
    Capybara::Selenium::Driver.new(
    app, 
    browser: :chrome, 
    options: Selenium::WebDriver::Chrome::Options.new(
     binary: 'C:/Users/USERNAME/AppData/Local/Google/Chrome SxS/Application/chrome.exe', 
     args: %w[no-sandbox headless disable-gpu] 
    ) 
) 
end