当 html 元素没有标识符时如何用 watir 迭代 table

How to iterate a table with watir when no html element has identifiers

我有一个 html table,其中有一个 table 每行的列数不相等。 table 和 cells/columns 没有标识符,如 id、名称、class 等。如何迭代这样的 table 并以表格形式打印它?我现在使用 ruby 1.8。

Html -

<table>
    <tr><td colspan="2">Student Info</td></tr>
    <tr><td>Age:</td> <td>15</td></tr>
    <tr><td>Home:</td> <td>251 Palm Avenue</td></tr>

    <tr><td>City:</td>  <td>New York</td></tr>

    <tr><td colspan="2">Parent Info</td></tr>
    <tr><td>Parent Phone:</td>    <td>231-1234-123</td></tr>
    <tr><td>More parent info</td>   <td><a href="http://www.school.com>school</a><br></td></tr>
</table>

Ruby代码-

require 'rubygems'
require 'watir-webdriver'

url = "url has tables with no identifiable attributes. Just a table tag"

browser = Watir::Browser.new :firefox
browser.goto url

browser.table.trs.each do |tr|
    tr.each do |td|
        puts td.to_s
    end
end

跟踪-

C:/ruby/lib/ruby/gems/1.8/gems/watir-webdriver-0.6.2/lib/watir-webdriver/elements/element.rb:553:in `method_missing': undefined method `each' for #<Watir::TableRow:0x517bf9c> (NoMethodError)
        from tables.rb:10
        from C:/ruby/lib/ruby/gems/1.8/gems/watir-webdriver-0.6.2/lib/watir-webdriver/element_collection.rb:29:in `each'
        from C:/ruby/lib/ruby/gems/1.8/gems/watir-webdriver-0.6.2/lib/watir-webdriver/element_collection.rb:29:in `each'
        from tables.rb:9

只需获取 table,然后将其发送到文件(或变量),遍历行并在元素之间放置一个制表符

browser = Watir::Browser.new :firefox
browser.goto url

f = File.new('table.txt',  'w+')

t = browser.table

t.trs.each do |trd|
  trd.tds.each do |td|
    f.print "#{td.text}\t"
  end
  f.print "\n"
end

f.close

编辑** 回答评论中的问题:

好吧,不要对自己太苛刻,我认为该文档对初学者不友好。我不得不根据 Justin_Ko 所说的内容和文档进行推断,以查看 tr 引用的内容以及 trs 引用的集合。需要记住的是,这些集合以及 WATIR 方法返回的大部分内容都是对象,但它们的行为可能不像您想象的那样。 trs 是一个枚举器,但它只是 returns 个对象,而不是行本身的文本。与 td 相同。这就是为什么我必须遍历行集合然后遍历每一行的 td 对象,然后对该对象调用 .text 的原因。以这种方式思考 WATIR,您可以通过 class 或标识符引用任何内容,或者在本例中仅通过 HTML 元素。 browser 读取页面中的所有内容,您可以从那里使用 WATIR 方法定位任何元素。

秘籍sheet非常好用:

https://github.com/watir/watir/wiki/Cheat-Sheet