如何使用无头铬与水豚和selenium

Chrome版本:59.0.3071.104

使用Cucumber,Capybara,Selenium实现无头Chrome的自动化测试。

function/支持/ 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 

在进行黄瓜测试时,它说:

警告Selenium [DEPRECATION]:不推荐使用args或:开关。 请改用Selenium :: WebDriver :: Chrome :: Options#add_argument。

使用Headless Chrome的水豚和selenium的正确方法是什么? 谢谢。

编辑1:我尝试使用Ruby-Binding , Capybara和工作示例进行以下操作 。 但它也会产生错误。

 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 > # (NoMethodError) 

编辑2:下载最新的ChromeDriver 2.30

使用ChromeDriverfunction和Chrome命令行开关中的示例,我收到错误消息。

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 

1)确保你没有其他注册的驱动程序,我自己犯了这个错误并且有一个iphone驱动程序,它以旧方式使用args ,这就是我收到警告的原因。

2)确保您在Linux上使用Chrome版本57+ ,在macOS上使用59+或在Windows上使用60+ ;

3)添加/更新gem 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 

使用Rails应用程序运行无头Chrome的最简单方法是将以下gem添加到Gemfile

 gem 'chromedriver-helper' gem 'selenium-webdriver' 

并使用以下内容更新application_system_test_case.rb

 require "test_helper" class ApplicationSystemTestCase < ActionDispatch::SystemTestCase driver = ENV['CHROME_HEADLESS'] == 'false' ? :selenium_chrome : :selenium_chrome_headless driven_by driver, screen_size: [1400, 1400] end 

没有必要传递args因为驱动程序已经可以使用,可用的驱动程序是:rack_test:selenium:selenium_chrome:selenium_chrome_headless

你可以运行Headless Chrome

 $ bin/rails test:system 

或者您也可以运行Chrome并查看测试运行情况

 $ CHROME_HEADLESS=false bin/rails test:system 

Windows 60支持Windows 60。

下载“Chome Canary”并在chromeOptions.安装路径作为binary chromeOptions.

下载最新的“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 

我可以使用当前版本的Chrome,但它会显示一个空白窗口。 如果你想摆脱它,那么你需要使用“Chrome Canary”构建。

下面的代码是@ 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