我正在尝试使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
我收到的警告如下:
警告硒 [弃用] Selenium::WebDriver::Error::ElementNotVisibleError 已弃用。用 Selenium::WebDriver::Error::ElementNotInteractableError (确保 驱动程序支持 W3C WebDriver 规范)改为。
当前服务器版本:
无头(2.3.1、2.2.0)
硒网络驱动程序 (3.4.4)
瓦蒂尔 (6.6.3)
新服务器版本:
无头 (2.3.1)
硒网络驱动程序 (3.142.3, 3.142.0)
瓦蒂尔 (6.16.5)
我有一种感觉,问题出在版本不匹配上,但我无法确定它。
到目前为止,我无法找到任何解决方案。
TL/DR:
执行以下三项操作之一:
- 忽略它们,你没有做错任何事。
- 升级到 Chrome v75+
- 暂时降级到硒 3.141.0
Selenium过去是用JSON Wire协议实现的,该协议详细说明了驱动程序端点和端点期望的有效载荷的格式等。 不幸的是,每个浏览器驱动程序实现都有其有趣的边缘情况和特性,这使得跨浏览器测试更具挑战性。Selenium开发人员和浏览器供应商聚在一起,就这些交互的W3C标准达成一致,以便一切都可以以一种适用于所有浏览器的方式完成。该标准于 2018 年作为 w3c 推荐标准发布。谷歌是最后一个默认启用w3c合规模式的浏览器供应商,这将发生在Chrome v75(今天发布)中。
Selenium 3.142是Selenium 4之前的最后一个Selenium版本。Selenium 4将完全取消对传统协议的支持。因此,Ruby Selenium团队决定在代码中对任何在Selenium 4中不起作用的内容发出警告。由于Chrome <75默认不符合w3c,因此默认情况下它不适用于Selenium 4,因此Selenium会发出警告。请注意,这是驱动程序响应导致的错误,因此代码中无需更改任何内容来避免这种情况。