【问题标题】:Can't click on href link using Watir and Xpath无法使用 Watir 和 Xpath 点击 href 链接
【发布时间】:2021-06-21 16:02:43
【问题描述】:

我正在尝试单击表格中的所有链接。 xpath 在下面。

(2..lines).each do |i|
  browser.element(:xpath => "//*[@id=\"StmtSummaryForm:stmtDataTabletbody0\"]/tr[{i}]/td[3]/a").click
end

但是,我明白了

NoMethodError: undefined method `click' for #<Watir::HTMLElementCollection:0x00007fcfa69d3c08>

我认为我的 xpath 是错误的,或者我错误地使用了 watir。

试探:

[61] pry(main)> elements = @browser.elements(:xpath => "//*[@id=\"StmtSummaryForm:stmtDataTabletbody0\"]/tr[2]/td[3]/a")
=> #<Watir::HTMLElementCollection:0x00007fcfa7424130
 @query_scope=#<Watir::Browser:0x..f0106c8d0f94f382 url="https://personal.domain.com/us/Statements" title="Statements">,
 @selector={:xpath=>"//*[@id=\"StmtSummaryForm:stmtDataTabletbody0\"]/tr[2]/td[3]/a"},
 @selector_builder=
  #<Watir::Locators::Element::SelectorBuilder:0x00007fcfa6b8fb78
   @built={:xpath=>"//*[@id=\"StmtSummaryForm:stmtDataTabletbody0\"]/tr[2]/td[3]/a"},
   @custom_attributes=[],
   @query_scope=#<Watir::Browser:0x..f0106c8d0f94f382 url="https://personal.domain.com/us/Statements" title="Statements">,
   @selector={:xpath=>"//*[@id=\"StmtSummaryForm:stmtDataTabletbody0\"]/tr[2]/td[3]/a"},
   @valid_attributes=
    [:title,
     :lang,
     :dir,
     :dataset,
     :accesskey,
     :accessKey,
     :innertext,
     :innerText,
     :onabort,
     :onblur,
     :oncancel,
     :oncanplay,
     :oncanplaythrough,
     :onchange,
     :onclick,
     :onclose,
     :oncuechange,
     :ondblclick,
     :ondrag,
     :ondragend,
     :ondragenter,
     :ondragexit,
     :ondragleave,
     :ondragover,
     :ondragstart,
     :ondrop,
     :ondurationchange,
     :onemptied,

我也试过了:

[68] pry(main)> elements = @browser.elements(:xpath => "//*[@id=\"StmtSummaryForm:stmtDataTabletbody0\"]/tr[2]/node()").links
/Users/aa/.rvm/gems/ruby-2.7.1/gems/pry-0.12.2/lib/pry/exceptions.rb:28: warning: $SAFE will become a normal global variable in Ruby 3.0
NoMethodError: undefined method `links' for #<Watir::HTMLElementCollection:0x00007fcfa744e610>

【问题讨论】:

    标签: ruby xpath watir


    【解决方案1】:

    如果您使用的是browser.element,则不应收到HTMLElementCollection 错误。

    Watir 旨在总体上减少对 XPath 的依赖。 如果点击重新加载页面,它会变得复杂;特别是如果重新加载可能具有不同的结构。无论如何,这个 * 应该可以工作:

    table = browser.table(id: "StmtSummaryForm:stmtDataTabletbody0")
    table.links.each(&:click)
    

    【讨论】:

      【解决方案2】:

      您在集合elements 上调用click,集合没有点击方法。您必须迭代集合,然后必须一个接一个地单击。

      编写这段代码

      browser.table(id: "StmtSummaryForm:stmtDataTabletbody0").rows.each do |row|
        row.cell(index: 2).link.click
      end
      

      它将点击表格第三列的链接。 WATIR 自动计算表中的总行数,您不必像以前那样明确指定计数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-27
        • 2018-02-08
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 2014-06-25
        • 1970-01-01
        • 2017-06-22
        相关资源
        最近更新 更多