使用Watir获取表的整个列文本

时间:2014-07-30 11:01:42

标签: ruby element watir

我知道使用以下代码我们可以在WATIR中获取整个行文本

# row 2 - entire text
table1 = browser.table(:id => "table")
puts table1[1].text

我们怎样才能得到像这样的整个列文本?

2 个答案:

答案 0 :(得分:7)

有一些内置方法可以帮助获取列数据,但Watir-Webdriver和Watir-Classic之间有所不同。

让我们假设我们正在使用表格:

<table>
  <tr>
    <td>1a</td>
    <td>1b</td>
  </tr>
  <tr>
    <td>2a</td>
    <td>2b</td>
  </tr>
</table>

解决方案 - Watir-Webdriver和Watir-Classic

Table类有一个strings方法,它将表的文本作为2D数组返回。该数组是行,但您可以使用transpose将其作为列。

columns = browser.table(:id => "table").strings.transpose
p columns[0]
#=> ["1a", "2a"]
p columns[1]
#=> ["1b", "2b"]

解决方案 - Watir-Classic

在Watir-Classic中,Table类还有一个内置的column_values方法,这意味着您可以简单地执行:

p browser.table(:id => "table").column_values(0)
#=> ["1a", "2a"]
p browser.table(:id => "table").column_values(1)
#=> ["1b", "2b"]

解决方案 - 迭代

您当然也可以遍历每一行并收集每列中的单元格:

p browser.table(:id => "table").trs.collect{ |tr| tr[0].text }
#=> ["1a", "2a"]
p browser.table(:id => "table").trs.collect{ |tr| tr[1].text }
#=> ["1b", "2b"]

答案 1 :(得分:0)

不确定是否有任何现成的API。所以这是解决方法:

table1 = browser.table(:id => "table")
row_count = table1.rows.length
for k in 0..row_count-1
  puts table1[k][1].text
end