如何将 Headless chrome 与水豚和硒一起使用

问题描述 投票:0回答:5

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-BindingCapybara工作示例尝试了以下操作。但它也会出错。

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
ruby selenium cucumber capybara google-chrome-headless
5个回答
13
投票

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

10
投票

更新2020-02-01

对 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


之前的回答

使用 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
    

2
投票
Chrome 60 中即将提供 Windows 支持。

下载“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
    

0
投票
我可以在当前版本的 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
    

0
投票
2024 年 3 月更新:

现在你唯一需要的东西是:

    在底层操作系统中运行
  1. sudo apt install chromium-chromedriver
  2. gem 'selenium-webdriver'
     放入您的 
    Gemfile
  3. Capybara.current_driver = :selenium_chrome_headless
     放入您的测试助手中。
© www.soinside.com 2019 - 2024. All rights reserved.