Ruby Selenium - 警告:driver_path 已弃用

0 ruby selenium watir selenium-webdriver

使用 Ruby selenium-webdriver 3.142.6

\n\n

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

\n\n
WARN Selenium [DEPRECATION] :driver_path is deprecated. Use :service with an instance of Selenium::WebDriver::Service instead.\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据 Ruby 文档,Selenium::WebDriver::Service 是一个私有 API。

\n\n

在网上搜索与该警告相关的文章,参考了 Capybara、RoR 和 chromedriver-help,但我\xe2\x80\x99m 都没有使用这些内容。我尝试过“gem install webdrivers”,但失败了。

\n\n

关于采取的路径有什么建议:忽略弃用消息,或使用私有 Service 类(如果是的话如何使用它),或尝试用 webdrivers 替换 selenium-webdriver,或其他什么?

\n\n

这是成功创建 Selenium 驱动程序的代码,但出现警告

\n\n
require "selenium-webdriver"\nrequire "test/unit"\nrequire "byebug"\n\n...\n\nclass GoogleTest < Test::Unit::TestCase\n\n  def setup\n\n    case $browser_arg\n    when \'chrome\'\n        browser = :chrome\n        driver_path = \'/selenium_browser_drivers/chromedriver\'\n    when \'firefox\'\n        browser = :firefox\n        driver_path = \'/selenium_browser_drivers/geckodriver\'\n    else\n          raise ArgumentError.new("Unexpected browser argument \'#{$browser_arg}\'") \n          exit      \n    end\n      @se = Selenium::WebDriver.for browser, :driver_path => driver_path\n\n  end\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

宝石文件

\n\n
source \'https://rubygems.org\'\n\ngem \'selenium-webdriver\', \'~> 3.142.0\'\ngem \'test-unit\', \'~> 3.3.0\'\ngem \'byebug\', \'~> 9.1.0\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

Gemfile.lock

\n\n
GEM\n  remote: https://rubygems.org/\n  specs:\n    byebug (9.1.0)\n    childprocess (3.0.0)\n    power_assert (1.1.5)\n    rubyzip (2.0.0)\n    selenium-webdriver (3.142.6)\n      childprocess (>= 0.5, < 4.0)\n      rubyzip (>= 1.2.2)\n    test-unit (3.3.4)\n      power_assert\n\nPLATFORMS\n  ruby\n\nDEPENDENCIES\n  byebug (~> 9.1.0)\n  selenium-webdriver (~> 3.142.0)\n  test-unit (~> 3.3.0)\n\nBUNDLED WITH\n   2.0.2\n
Run Code Online (Sandbox Code Playgroud)\n\n

命令 gem list 的输出

\n\n
backports (3.15.0)\nbigdecimal (default: 1.3.4)\nbuilder (3.2.3)\nbundler (2.0.2, 1.16.1, default: 1.16.0)\nbyebug (9.1.0)\nchildprocess (3.0.0, 0.8.0)\ncmath (default: 1.0.0)\ncsv (default: 1.0.0)\ncucumber (3.1.2)\ncucumber-core (3.2.1)\ncucumber-expressions (6.0.1)\ncucumber-tag_expressions (1.1.1)\ncucumber-wire (0.0.1)\ndate (default: 1.0.0)\ndbm (default: 1.0.0)\ndid_you_mean (1.2.0)\ndiff-lcs (1.3)\netc (default: 1.0.0)\nfcntl (default: 1.0.0)\nffi (1.9.18)\nfiddle (default: 1.0.0)\nfileutils (default: 1.0.2)\ngherkin (5.1.0)\nio-console (default: 0.4.6)\nipaddr (default: 1.2.0)\njson (default: 2.1.0)\nminitest (5.10.3)\nmulti_json (1.13.1)\nmulti_test (0.1.2)\nnet-telnet (0.1.1)\nopenssl (default: 2.1.0)\npower_assert (1.1.5, 1.1.1)\npsych (default: 3.0.2)\nrake (12.3.0)\nrdoc (default: 6.0.1)\nrspec (3.9.0, 3.7.0, 3.6.0)\nrspec-core (3.9.0, 3.7.1, 3.6.0)\nrspec-expectations (3.9.0, 3.7.0, 3.6.0)\nrspec-mocks (3.9.0, 3.7.0, 3.6.0)\nrspec-support (3.9.0, 3.7.1, 3.7.0, 3.6.0)\nrubyzip (2.0.0, 1.2.1)\nscanf (default: 1.0.0)\nsdbm (default: 1.0.0)\nselenium-webdriver (3.142.6, 3.8.0)\nstringio (default: 0.0.1)\nstrscan (default: 1.0.0)\ntest-unit (3.3.4, 3.2.7)\nwebrick (default: 1.4.2)\nxmlrpc (0.3.0)\nzlib (default: 1.0.0)\n
Run Code Online (Sandbox Code Playgroud)\n

Raj*_*lan 5

即使在实例化驱动程序变量之前,您也可以通过显式分配 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'
Run Code Online (Sandbox Code Playgroud)

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