Chrome版本:59.0.3071.104
使用 Cucumber、Capybara、Selenium 实现 Headless Chrome 自动化测试。
功能/支持/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 [弃用] :args 或 :switches 已弃用。使用 相反,Selenium::WebDriver::Chrome::Options#add_argument。
在 Headless Chrome 中使用水豚和硒的正确方法是什么。谢谢你。
编辑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
> #<Selenium::WebDriver::Remote::Capabilities:0xd13baac> (NoMethodError)
编辑2: 下载最新的 ChromeDriver 2.30
使用ChromeDriver功能和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) 确保您的 Chrome 版本为 Linux 上的 57+、macOS 上的 59+ 或 Windows 上的 60+;
3) 添加/更新 gem
selenium-webdriver
;
4) 将以下 driver 添加到您的
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
对 ChromeDriver 的支持已于 2019 年 3 月 24 日结束,创建者建议大家移至 https://github.com/titusfortner/webdrivers,话虽如此,以下是对我有用的配置:
require "test_helper"
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driver = ENV['DRIVER'] ? ENV['DRIVER'].to_sym : :headless_chrome
driven_by :selenium, using: driver, screen_size: [1400, 1400]
end
运行测试时,您还可以通过传递
DRIVER
变量来指定不同的驱动程序,例如:
$ DRIVER=firefox bin/rails test:system
$ DRIVER=headless_firefox bin/rails test:system
$ DRIVER=chrome bin/rails test:system
$ DRIVER=headless_chrome bin/rails test:system
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
下载“Chome Canary”并在
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
下面的代码是@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
sudo apt install chromium-chromedriver
。
gem 'selenium-webdriver'
放入您的
Gemfile
。
Capybara.current_driver = :selenium_chrome_headless
放入您的测试助手中。