使用循环查找watir中的所有匹配对象

时间:2015-02-11 19:23:12

标签: ruby rspec watir

我正在尝试创建一个脚本,通过循环查找表中元素的所有实例。我可以识别一个对象,它的第一个实例:

b.table(id: "table_id").a.title
=> "foo bar"

但是当我试图遍历表格时,我遇到了问题:

def get_titles
  titles = ""
  b.table(id: "table_id").a.title.each do |title|
    titles << title
  end
  puts titles
end

get_titles
NoMethodError: undefined method `each' for "foo bar":String

我认为我试图循环使用表格时出现了问题。

2 个答案:

答案 0 :(得分:1)

你做错了。正确的方法是:

def get_titles
  titles = ""
  b.tables(id: "table_id").each do |table|
    titles << table.a.title
  end
  puts titles
end

b.table(id: "table_id").a.title为您提供了一个String对象,并在此字符串对象上调用了#each。这就是错误的原因。

根据Justin's评论,明确的方法是:

b.table(id: "table_id").links.map(&:title).join

答案 1 :(得分:0)

如对其他答案的评论所示,问题在于您尝试在单个对象上使用.each方法而不是某种形式的集合。

要从一些容器中获取包含所有标题的集合,请使用.titles方法

titles = b.tables(id: "table_id").titles

if you need something like a collection of all the text of the titles

b.tables(id: "table_id").titles.each do |title|
  titles << title.text
end

你也可以使用贾斯汀在评论中给出的第一个答案