如何使用无头铬与水豚和硒

时间:2017-06-16 14:19:08

标签: ruby selenium cucumber capybara google-chrome-headless

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-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&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

4 个答案:

答案 0 :(得分:7)

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

2)确保Linux上的Chrome版本 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

答案 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