当没有html元素具有标识符时,如何使用watir迭代表

时间:2015-01-23 01:24:11

标签: ruby watir watir-webdriver

我有一个html表,其中每行的列数不等。表和单元格/列没有标识符,例如id,name,class等。如何迭代这样的表并以表格形式打印?我现在正在使用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

1 个答案:

答案 0 :(得分:1)

只需抓住表格,然后将其发送到迭代行并在元素之间放置标签的文件(或变量)

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是一个枚举器,但它只返回对象,而不是行本身的文本。与td相同。这就是我必须遍历行集合然后遍历每一行的td对象,然后在该对象上调用.text的原因。以这种方式考虑WATIR,您可以通过类或标识符引用任何内容,或者在这种情况下仅通过HTML元素引用。 browser读取页面中的所有内容,从那里您可以使用WATIR方法定位任何元素。

备忘单非常方便:

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