循环在与Watir的表中

时间:2016-11-20 12:25:06

标签: watir

坚持使用watir尝试创建一个循环来单击表中包含的所有链接。目前该表格具有以下格式:

<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

上面的代码在浏览器中没有任何功能。既不返回终端中的内容(没有错误,也没有输出)。

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

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

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

输出此错误:jsfiddle.rb:24:<main>': undefined method列'中的#(NoMethodError)

2 个答案:

答案 0 :(得分:1)

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

它变成了:

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

答案 1 :(得分:0)

这应该可以点击表格中的每个链接:

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