Chrome版本:59.0.3071.104
使用Cucumber,Capybara,Selenium实现无头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
当进行黄瓜测试时,它说:
WARN Selenium [DEPRECATION]:不推荐使用args或:开关。使用 Selenium :: WebDriver :: Chrome :: Options#add_argument。
使用Headless Chrome进行水豚和硒的正确方法是什么?谢谢。
编辑1:我使用Ruby-Binding,Capybara和Working 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&amp;中的示例Chrome Command Line Switches我收到了错误。
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
答案 0 :(得分:7)
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
答案 1 :(得分:3)
使用Rails应用运行无头Chrome的最简单方法是将以下宝石添加到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
答案 2 :(得分:2)
Windows 60支持Windows。
下载&#34; Chome Canary&#34;并在binary
chromeOptions.
下载最新的&#34; chromedriver&#34;并添加到环境变量中的路径。
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
答案 3 :(得分:0)
我可以使用当前版本的Chrome,但它会显示一个空白窗口。如果你想摆脱它,那么你需要使用&#34; Chrome Canary&#34;建立。
以下代码是@ 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