首页 文章

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

提问于
浏览
8

Chrome版本:59.0.3071.104

使用Cucumber,Capybara,Selenium实现无头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或:开关 . 请改用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 CapabilitiesChrome 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 回答

  • 7

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

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

    3)添加/更新gem selenium-webdriver ;

    4)将以下 driver 添加到 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
    
  • 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
    
  • 1

    Windows 60支持Windows 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
    
  • 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
    

相关问题