用 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 method
columns' 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
卡在 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 method
columns' 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