我该如何纠正这个Selenium初始化命令的弃用警告?

20
使用Rails 6,我正在尝试为系统测试设置无头模式下的Selenium。 我在application_system_test_case.db中使用以下语句:
driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400]

(根据敏捷网络开发的Rails 6教程)

但它给了我这个废弃警告:

Selenium [DEPRECATION] [:browser_options] :options作为驱动程序初始化的参数已被废弃。如果需要,使用一个值为capabilities/options的数组的:capabilities代替。

我在Selenium文档中进行了一些搜索,但我的基本代码技能仍然让我不清楚应该如何纠正这个问题。有人可以建议我如何纠正这个问题吗?

(我业余猜测试了一些东西,比如:

driven_by :selenium, :capabilities['headless_chrome', 'screen_size: 1400, 1400']

所有的结果都会导致错误

5个回答

21

使用选项更新新警告版本,而非能力

Capybara.register_driver :headless_chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument('--headless')

  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: options
  )
end

Capybara.register_driver :chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new

  Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: options
  )
end

Capybara.default_driver = :chrome

1
除了使用 add_argument 来添加命令行参数外,您可能还需要使用 add_preference 添加键/值设置。 - Tom Wilson
如果它是这么复杂的话,我想我不想知道。 - codenoob

12
在Selenium 4中,options必须以数组capabilities的形式传递:
def selenium_options
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument('--headless')
  options
end

# optional
def selenium_capabilities_chrome
  Selenium::WebDriver::Remote::Capabilities.chrome
end

def driver_init
  caps = [
    selenium_options,
    selenium_capabilities_chrome,
  ]

  Selenium::WebDriver.for(:chrome, capabilities: caps)
end

driver = driver_init

8

我已经多次偶然发现了这个线程。让我困扰的不仅是过时的消息,还有在启动测试套件时出现的 Puma 服务器日志。最终,我解决了弃用警告并关闭了 Puma 日志记录。以下是我的当前设置:

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  # provides devise methods such as login_session
  include Devise::Test::IntegrationHelpers

  # removes noisy logs when launching tests
  Capybara.server = :puma, { Silent: true }

  Capybara.register_driver :headless_chrome do |app|
    options = Selenium::WebDriver::Chrome::Options.new(args: %w[headless window-size=1400,1000])
    Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
  end

  Capybara.register_driver(:chrome) do |app|
    options = Selenium::WebDriver::Chrome::Options.new(args: %w[window-size=1400,1000])
    Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
  end

  ENV['HEADLESS'] ? driven_by(:headless_chrome) : driven_by(:chrome)
end

因此,您可以使用以下方式启动测试:

HEADLESS=1 rails test:all

3

抑制警告

一行修复:

# rails_helper.rb
Selenium::WebDriver.logger.ignore(:browser_options)

建议在这里

或者

(可能是)任何版本的Capybara > 3.36.0

编辑:@silvia96有3.38.0版本仍然收到警告


这是一个相当令人困惑的 bug,因为如果你查看 Capybara 驱动程序注册表,你会发现它已经知道了 如何使用 capabilities实际的 bug 是由于 Gem 版本测试设置为 ~ 而不是 >=。修复已在主要版本中进行,任何版本的 Capybara 在 3.36.0 之后,很可能都会解决此问题。

4
我有3.38.0版本,但仍然看到警告。 - silva96

0
综合其他有用的解决方案,这是我的代码。 删除 Puma 日志,使用无头 Chrome,忽略浏览器选项错误:
require "test_helper"

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :headless_chrome
  Capybara.server = :puma, { Silent: true }
  Selenium::WebDriver.logger.ignore(:browser_options)

end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接