13

铬版本: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 [DEPRECATION] :args 或 :switches 已弃用。请改用 Selenium::WebDriver::Chrome::Options#add_argument。

将 capybara 和 selenium 与 Headless Chrome 一起使用的正确方法是什么。谢谢你。

编辑 1:我使用Ruby-BindingCapybaraWorking 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中的示例我得到一个错误。

网络::ReadTimeout (网络::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
4

4 回答 4

12

1)确保您没有其他注册的驱动程序,我自己犯了这个错误并且有一个以旧方式iphone使用的驱动程序,这args就是我收到警告的原因。

2) 确保您的 Chrome 版本在 Linux 上为57+,在 macOS 上为 59+ 或在Windows 上为60+

3)添加/更新gem selenium-webdriver

4)将以下驱动程序添加到您的spec_helper.rbrails_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
于 2017-06-22T10:08:30.013 回答
9

更新 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
于 2018-05-29T16:01:13.030 回答
2

Chrome 60 将支持 Windows。

下载“Chome Canary”并给出安装路径binarychromeOptions.

下载最新的“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
于 2017-06-16T18:49:20.910 回答
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
于 2017-07-17T13:42:52.167 回答