Ruby Watir Selenium WebDriver描述了警告

时间:2019-06-04 14:08:25

标签: ruby selenium-webdriver watir

我正在尝试使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)

我觉得问题出在版本不匹配,但我无法查明。

到目前为止,我找不到任何解决方案。

1 个答案:

答案 0 :(得分:8)

TL / DR:

  1. 忽略它们,您没有做错任何事。
  2. 升级到Chrome v75 +
  3. 暂时降级到Selenium 3.141.0

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是发出警告。请注意,这是由于驱动程序响应而导致的错误,因此无需更改代码即可避免这种情况。