用 Watir 循环 table

Loop in table with Watir

卡在 watir 试图创建一个循环以点击 table 中包含的所有链接。当前 table 具有以下格式:

<table id="test">
  <tbody><tr>
    <th>Firstname</th>
    <th>Lastname</th>
    <th>Link</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td>
    <td><a href="http://facebook.com">http://facebook.com</a></td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>
    <td><a href="http://google.com">http://google.com</a></td>
  </tr>
</tbody></table>

我目前的尝试是这样的:

browser.table(:id => "test").rows do |tr|
  tr.each do |td|
    td.links.click
  end
end

上面的代码在浏览器中不执行任何操作,在终端中也不执行 returns 任何操作(没有错误,没有输出)。

还尝试了一种使用列的不同方法:

columns = browser.table(:id => "test").strings.transpose

browser.columns.each do |t|
  t.click
  browser.back
end

输出此错误:jsfiddle.rb:24:in <main>': undefined methodcolumns' for # (NoMethodError)

这应该可以点击 table 中的每个 link:

my_table = browser.table(:id, 'test')
table_links = my_table.links.map(&:text)
table_links.each do |link_text|
  my_table.link(:text, link_text).click
  browser.back
end

主要基于 Justin Ko 的回答 here

较新版本的 Watir version 6.0 会自动尝试重新定位过时的元素。因此,只要初始页面在每次重新加载时都不会发生变化,您就不再需要在单击链接之前保存某种参考数据。

它简单地变成了:

my_table = browser.table(:id, 'test')
my_table.links.each do |link|
  link.click
  browser.back
end