Ruby Selenium-警告:不推荐使用驱动程序路径

Ruby Selenium-警告:不推荐使用驱动程序路径,ruby,selenium,selenium-webdriver,watir,Ruby,Selenium,Selenium Webdriver,Watir,使用Ruby selenium webdriver 3.142.6 我的测试可以工作,但在运行开始时会显示警告 WARN Selenium [DEPRECATION] :driver_path is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead. require "selenium-webdriver" require "test/unit" require "byebug"

使用Ruby selenium webdriver 3.142.6

我的测试可以工作,但在运行开始时会显示警告

WARN Selenium [DEPRECATION] :driver_path is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.
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
...
根据Ruby文档,Selenium::WebDriver::Service是一个私有API

在web上搜索与警告相关的文章时,会引用Capybara、RoR和chromedriver帮助,我没有使用它们。我尝试过“gem安装webdrivers”,但失败了

路径上的任何建议:忽略弃用消息,或者使用私有服务类(如果是,如何使用),或者尝试用webdrivers替换selenium webdriver,或者其他什么

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

WARN Selenium [DEPRECATION] :driver_path is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.
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
...
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

即使在实例化驱动程序变量之前,也可以通过显式分配驱动程序路径变量来避免此错误。请看下面的代码

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\u path=“C:/Ruby26/chromedriver.exe”

即使在实例化驱动程序变量之前,也可以通过显式分配驱动程序路径变量来避免此错误。请看下面的代码

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\u path=“C:/Ruby26/chromedriver.exe”

谢谢你,拉贾戈帕兰。这就解决了警告问题。另一方面,根据服务类别是私有的。是否可能该类不再是私有的,文档也不会更新?或者使用私有类是否比不推荐的功能“更安全”?driver_path是属于开放访问的服务的类方法,Service class属于
模块Selenium模块WebDriver模块Chrome类服务
,因为存在折旧消息,很明显,他们改变了一些东西,我不知道这是什么变化。谢谢@Rajagopalan。这就解决了警告问题。另一方面,根据服务类别是私有的。是否可能该类不再是私有的,文档也不会更新?或者使用私有类是否比不推荐的功能“更安全”?driver_path是属于开放访问的服务的类方法,Service class属于
模块Selenium模块WebDriver模块Chrome类服务
,因为存在折旧消息,很明显,他们改变了一些东西,我不知道这是什么变化。