我正在尝试使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)
selenium-webdriver(3.4.4)
watir(6.6.3)
新服务器版本:
无头(2.3.1)
selenium-webdriver(3.142.3,3.142.0)
watir(6.16.5)
我觉得问题出在版本不匹配,但我无法查明。
到目前为止,我找不到任何解决方案。
答案 0 :(得分:8)
TL / DR:
Selenium以前是使用JSON Wire Protocol实现的,该协议详细说明了驱动程序端点以及端点期望的有效负载的格式等。不幸的是,每个浏览器驱动程序实现都有自己有趣的边缘情况和特殊性,这使得跨浏览器测试变得更多具有挑战性的。 Selenium开发人员和浏览器供应商聚集在一起,就这些交互的w3c标准达成一致,以便可以以适用于所有浏览器的方式完成所有工作。该标准于2018年作为w3c recommendation发布。 Google是最后一个默认启用w3c兼容模式和this will happen in Chrome v75(今天将发布)的浏览器供应商。
Selenium 3.142是Selenium 4之前的Selenium的最新版本。Selenium 4将完全删除对旧协议的支持。因此,Ruby Selenium团队决定在代码中针对在Selenium 4中不起作用的任何内容引发警告。由于Chrome <75默认情况下不符合w3c,因此默认情况下它不适用于Selenium 4,因此Selenium是发出警告。请注意,这是由于驱动程序响应而导致的错误,因此无需更改代码即可避免这种情况。