Ruby Selenium - 警告:driver_path 已弃用

Ruby Selenium - warning that :driver_path is deprecated

使用 Ruby selenium-webdriver 3.142.6

我的测试有效,但在 运行 开始时显示警告

WARN Selenium [DEPRECATION] :driver_path is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.

根据 Ruby 文档 Selenium::WebDriver::Service 是私有的 API。

在网络上搜索与警告相关的文章提到了我正在使用的 Capybara、RoR 和 chromedriver-help,none。我试过 'gem install webdrivers' 但失败了。

关于采取的路径的任何建议:忽略弃用消息,或使用私有服务 class(以及如何使用它),或尝试用 webdrivers 替换 selenium-webdriver,或其他还有吗?

这是成功创建带有警告的 Selenium 驱动程序的代码

require "selenium-webdriver"
require "test/unit"
require "byebug"

...

class GoogleTest < Test::Unit::TestCase

  def setup

    case $browser_arg
    when 'chrome'
        browser = :chrome
        driver_path = '/selenium_browser_drivers/chromedriver'
    when 'firefox'
        browser = :firefox
        driver_path = '/selenium_browser_drivers/geckodriver'
    else
          raise ArgumentError.new("Unexpected browser argument '#{$browser_arg}'") 
          exit      
    end
      @se = Selenium::WebDriver.for browser, :driver_path => driver_path

  end
...

宝石文件

source 'https://rubygems.org'

gem 'selenium-webdriver', '~> 3.142.0'
gem 'test-unit', '~> 3.3.0'
gem 'byebug', '~> 9.1.0'

Gemfile.lock

GEM
  remote: https://rubygems.org/
  specs:
    byebug (9.1.0)
    childprocess (3.0.0)
    power_assert (1.1.5)
    rubyzip (2.0.0)
    selenium-webdriver (3.142.6)
      childprocess (>= 0.5, < 4.0)
      rubyzip (>= 1.2.2)
    test-unit (3.3.4)
      power_assert

PLATFORMS
  ruby

DEPENDENCIES
  byebug (~> 9.1.0)
  selenium-webdriver (~> 3.142.0)
  test-unit (~> 3.3.0)

BUNDLED WITH
   2.0.2

命令gem列表的输出

backports (3.15.0)
bigdecimal (default: 1.3.4)
builder (3.2.3)
bundler (2.0.2, 1.16.1, default: 1.16.0)
byebug (9.1.0)
childprocess (3.0.0, 0.8.0)
cmath (default: 1.0.0)
csv (default: 1.0.0)
cucumber (3.1.2)
cucumber-core (3.2.1)
cucumber-expressions (6.0.1)
cucumber-tag_expressions (1.1.1)
cucumber-wire (0.0.1)
date (default: 1.0.0)
dbm (default: 1.0.0)
did_you_mean (1.2.0)
diff-lcs (1.3)
etc (default: 1.0.0)
fcntl (default: 1.0.0)
ffi (1.9.18)
fiddle (default: 1.0.0)
fileutils (default: 1.0.2)
gherkin (5.1.0)
io-console (default: 0.4.6)
ipaddr (default: 1.2.0)
json (default: 2.1.0)
minitest (5.10.3)
multi_json (1.13.1)
multi_test (0.1.2)
net-telnet (0.1.1)
openssl (default: 2.1.0)
power_assert (1.1.5, 1.1.1)
psych (default: 3.0.2)
rake (12.3.0)
rdoc (default: 6.0.1)
rspec (3.9.0, 3.7.0, 3.6.0)
rspec-core (3.9.0, 3.7.1, 3.6.0)
rspec-expectations (3.9.0, 3.7.0, 3.6.0)
rspec-mocks (3.9.0, 3.7.0, 3.6.0)
rspec-support (3.9.0, 3.7.1, 3.7.0, 3.6.0)
rubyzip (2.0.0, 1.2.1)
scanf (default: 1.0.0)
sdbm (default: 1.0.0)
selenium-webdriver (3.142.6, 3.8.0)
stringio (default: 0.0.1)
strscan (default: 1.0.0)
test-unit (3.3.4, 3.2.7)
webrick (default: 1.4.2)
xmlrpc (0.3.0)
zlib (default: 1.0.0)

您甚至可以在实例化驱动程序变量之前通过显式分配 driver_path 变量来避免此错误。看下面代码

require 'selenium-webdriver'
Selenium::WebDriver::Chrome::Service.driver_path = "C:/Ruby26/chromedriver.exe"
driver = Selenium::WebDriver.for :chrome
driver.manage.timeouts.implicit_wait = 10
driver.navigate.to("https://www.google.com/")
driver.find_element(name: 'q').send_keys 'raja'

此代码未给出该警告。因为我在创建驱动器之前分配了该值 Selenium::WebDriver::Chrome::Service.driver_path = "C:/Ruby26/chromedriver.exe"