2017-06-16 53 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