【问题标题】:watir a string value is depriciated Ruby等待一个字符串值被贬低 Ruby
【发布时间】:2018-09-16 03:31:45
【问题描述】:

警告 Watir [Depreciation] 使用 :class 定位器定位多个 不推荐使用带有字符串值的类。改用数组

运行此行时出现此错误

browser.button(:class => '_t38eb _ov9ai').click

我认为这是一个类而不是多个类,我在交战中尝试过这个

browser.button(:class => ['_t38eb','_ov9ai']).click

但页面冻结然后终止 我要访问的网站是 Instagram,这里在填写用户名和密码字段后尝试登录页面

如果我写这个,chromedriver 就会终止

browser.button(:class == '_t38eb _ov9ai').click

【问题讨论】:

  • 类名用空格分隔,所以_t38eb _ov9ai表示两个类,而不是一个。

标签: ruby watir webscarab


【解决方案1】:

仅供参考:Watir 是开源的。

This line 是弃用警告的来源。

此弃用的原因是使用contains(this) and contains(that) 构建更惯用的xpath。

我不确定它为什么会冻结,但我确信忽略警告是完全安全的。

【讨论】:

    【解决方案2】:

    Chrome 驱动程序和 Firefox 驱动程序在您自动化时存在差异,您的浏览器正在关闭,因为 chrome 驱动程序在您的代码执行后会关闭浏览器一次,但 Firefox 驱动程序不会关闭浏览器。如果你想让你的 chrome 浏览器保持打开状态,请使用此代码

    require 'watir'
    caps = Selenium::WebDriver::Remote::Capabilities.chrome(chrome_options: {detach: true})
    b = Watir::Browser.new :chrome, desired_capabilities: caps
    

    下面给出的代码不起作用

    browser.button(:class == '_t38eb _ov9ai').click
    

    那是因为 button() 方法需要 Hash Object 而不是 TrueClassFalseClass 的对象,你在编写 :class == '_t38eb _ov9ai' 时传递的对象

    如果要传递数组,最好使用#split:

    browser.button(:class => '_t38eb _ov9ai'.split).click
    

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 2015-04-05
      相关资源
      最近更新 更多