如何使用无头铬与水豚和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.rb
或rails_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