Ruby Selenium WebDriver 弃用警告
Ruby Watir Selenium WebDriver depricated warning
我正在尝试将 Ruby Watir 脚本制作到新服务器上的 运行。
我在旧服务器上有一个工作脚本:
#!/bin/ruby
require 'rubygems'
require 'watir'
require 'date'
require 'headless'
require 'fileutils'
require 'uri'
require 'logger'
headless = Headless.new(autopick: true, reuse: false, destroy_at_exit: true).start
options = Selenium::WebDriver::Chrome::Options.new
options.add_preference(:download, prefs)
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-popup-blocking')
options.add_argument('--disable-translate')
b = Watir::Browser.new(:chrome, options: options)
b.goto 'someurl.com'
b.div(:id => 'IFRAME1').iframe.body.div(:id => 'DIVID1').div(class: ['Test1', 'Test2']).link(:id => 'DIVID2').click #getting warning here
我收到的警告如下:
WARN Selenium [DEPRECATION]
Selenium::WebDriver::Error::ElementNotVisibleError is deprecated. Use
Selenium::WebDriver::Error::ElementNotInteractableError (ensure the
driver supports W3C WebDriver specification) instead.
当前服务器版本:
headless (2.3.1, 2.2.0)
selenium-webdriver (3.4.4)
watir (6.6.3)
新服务器版本:
headless (2.3.1)
selenium-webdriver (3.142.3, 3.142.0)
watir (6.16.5)
我感觉是版本不匹配的问题,但我无法确定。
到目前为止我找不到任何解决方案。
TL/DR:
做这三件事中的一个:
- 无视他们,你没有做错什么。
- 升级到 Chrome v75+
- 暂时降级到 Selenium 3.141.0
Selenium 过去是通过 JSON Wire Protocol 实现的,它详细说明了驱动程序端点和端点预期的有效负载格式等。不幸的是,每个浏览器驱动程序实现都有其自己有趣的边缘情况和特性这使得跨浏览器测试更具挑战性。 Selenium 开发人员和浏览器供应商齐聚一堂,就这些交互的 w3c 标准达成一致,以便一切都可以以适用于所有浏览器的方式完成。该标准于 2018 年作为 w3c recommendation. Google is the last browser vendor to turn on w3c compliance mode by default, and this will happen in Chrome v75 发布(今天发布)。
Selenium 3.142 是 Selenium 4 之前的最后一个 Selenium 版本。Selenium 4 将完全取消对遗留协议的支持。因此,Ruby Selenium 团队决定在代码中对任何在 Selenium 4 中不起作用的内容发出警告。因为默认情况下 Chrome < 75 不符合 w3c,它不会与默认情况下是 Selenium 4,因此 Selenium 会发出警告。请注意,这是驱动程序响应导致的错误,因此无需更改代码即可避免这种情况。
我正在尝试将 Ruby Watir 脚本制作到新服务器上的 运行。
我在旧服务器上有一个工作脚本:
#!/bin/ruby
require 'rubygems'
require 'watir'
require 'date'
require 'headless'
require 'fileutils'
require 'uri'
require 'logger'
headless = Headless.new(autopick: true, reuse: false, destroy_at_exit: true).start
options = Selenium::WebDriver::Chrome::Options.new
options.add_preference(:download, prefs)
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-popup-blocking')
options.add_argument('--disable-translate')
b = Watir::Browser.new(:chrome, options: options)
b.goto 'someurl.com'
b.div(:id => 'IFRAME1').iframe.body.div(:id => 'DIVID1').div(class: ['Test1', 'Test2']).link(:id => 'DIVID2').click #getting warning here
我收到的警告如下:
WARN Selenium [DEPRECATION] Selenium::WebDriver::Error::ElementNotVisibleError is deprecated. Use Selenium::WebDriver::Error::ElementNotInteractableError (ensure the driver supports W3C WebDriver specification) instead.
当前服务器版本:
headless (2.3.1, 2.2.0)
selenium-webdriver (3.4.4)
watir (6.6.3)
新服务器版本:
headless (2.3.1)
selenium-webdriver (3.142.3, 3.142.0)
watir (6.16.5)
我感觉是版本不匹配的问题,但我无法确定。
到目前为止我找不到任何解决方案。
TL/DR:
做这三件事中的一个:
- 无视他们,你没有做错什么。
- 升级到 Chrome v75+
- 暂时降级到 Selenium 3.141.0
Selenium 过去是通过 JSON Wire Protocol 实现的,它详细说明了驱动程序端点和端点预期的有效负载格式等。不幸的是,每个浏览器驱动程序实现都有其自己有趣的边缘情况和特性这使得跨浏览器测试更具挑战性。 Selenium 开发人员和浏览器供应商齐聚一堂,就这些交互的 w3c 标准达成一致,以便一切都可以以适用于所有浏览器的方式完成。该标准于 2018 年作为 w3c recommendation. Google is the last browser vendor to turn on w3c compliance mode by default, and this will happen in Chrome v75 发布(今天发布)。
Selenium 3.142 是 Selenium 4 之前的最后一个 Selenium 版本。Selenium 4 将完全取消对遗留协议的支持。因此,Ruby Selenium 团队决定在代码中对任何在 Selenium 4 中不起作用的内容发出警告。因为默认情况下 Chrome < 75 不符合 w3c,它不会与默认情况下是 Selenium 4,因此 Selenium 会发出警告。请注意,这是驱动程序响应导致的错误,因此无需更改代码即可避免这种情况。