如何将无头 chrome 与水豚和硒一起使用
How to use headless chrome with capybara and selenium
Chrome版本:59.0.3071.104
使用 Cucumber、Capybara、Selenium 实现 Headless 自动化测试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.
在 Headless 中使用水豚和硒的正确方法是什么 Chrome。谢谢。
编辑 1:我使用 Ruby-Binding, Capybara and 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 & 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
Windows 支持即将到来 Chrome 60.
下载"Chome Canary"并在chromeOptions.
中给出安装路径binary
下载最新的 "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
1) 确保你没有其他注册驱动程序,我自己犯了这个错误并且有一个 iphone
驱动程序,它以旧方式使用 args
,这就是为什么我正在收到警告。
2) 确保你在 Linux 上有 Chrome 版本 57+,在 macOS 上有 59+或 60+ 在 Windows;
3) Add/update 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
我可以在当前版本的 Chrome 上使用它,但它会显示空白 window。如果你想摆脱它,那么你需要使用 "Chrome Canary" build.
下面的代码结合了@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
更新 2020-02-01
对 Chrome 驱动程序的支持已于 Mar 24, 2019, creator recommended everybody to move to 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
上一个答案
使用 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
并查看测试 运行ning
$ CHROME_HEADLESS=false bin/rails test:system
Chrome版本:59.0.3071.104
使用 Cucumber、Capybara、Selenium 实现 Headless 自动化测试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.
在 Headless 中使用水豚和硒的正确方法是什么 Chrome。谢谢。
编辑 1:我使用 Ruby-Binding, Capybara and 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 & 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
Windows 支持即将到来 Chrome 60.
下载"Chome Canary"并在chromeOptions.
binary
下载最新的 "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
1) 确保你没有其他注册驱动程序,我自己犯了这个错误并且有一个 iphone
驱动程序,它以旧方式使用 args
,这就是为什么我正在收到警告。
2) 确保你在 Linux 上有 Chrome 版本 57+,在 macOS 上有 59+或 60+ 在 Windows;
3) Add/update 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
我可以在当前版本的 Chrome 上使用它,但它会显示空白 window。如果你想摆脱它,那么你需要使用 "Chrome Canary" build.
下面的代码结合了@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
更新 2020-02-01
对 Chrome 驱动程序的支持已于 Mar 24, 2019, creator recommended everybody to move to 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
上一个答案
使用 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
并查看测试 运行ning
$ CHROME_HEADLESS=false bin/rails test:system