【问题标题】:Ruby Selenium - warning that :driver_path is deprecatedRuby Selenium - 警告 :driver_path 已弃用
【发布时间】:2020-03-25 13:14:09
【问题描述】:

使用 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,但我都没有使用它们。我试过“gem install webdrivers”,但失败了。

关于采取的路径的任何建议:忽略弃用消息,或使用私有服务类(如果是,如何使用它),或尝试用 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)

【问题讨论】:

    标签: ruby selenium selenium-webdriver watir


    【解决方案1】:

    即使在实例化驱动程序变量之前,您也可以通过显式分配 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"

    【讨论】:

    • 谢谢@Rajagopalan。这解决了警告。另一方面,根据rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Chrome/…,Service 类是私有的。是否有可能该类不再是私有的并且文档没有更新?还是使用私有类比弃用的功能“更安全”?
    • driver_path 是 Service 下的类方法,可以访问,Service 类属于 module Selenium module WebDriver module Chrome class Service &lt; WebDriver::Service 由于有折旧消息,显然他们已经改变了一些东西,我不知道是什么改变它。
    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 2020-12-06
    • 2015-03-23
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多