2015-02-11 66 views
1

我試圖製作一個腳本,通過循環查找表中元素的所有實例。我可以找出一個對象,它的第一個實例:使用循環查找所有匹配的對象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 

我相信有什麼毛病我如何試圖循環表格。

回答

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 
+2

你仍然會得到一個異常,因爲Watir :: Table也沒有'each'方法。也許你打算使用Watir :: TableCollection - 即應該是「b.tables」而不是「b.table」。雖然我猜想這個問題實際上是想通過單個表的鏈接進行循環(因爲多個表不應該有相同的id) - 也就是像'b.table(id:「table_id」)。links.map(& :標題).join'。 – 2015-02-11 20:11:02

+0

@JustinKo繼續。我會下來:-) – 2015-02-11 20:11:58

+0

@JustinKo這就是我正在尋找的。謝謝。 (感謝你,奧雅納。) – 2015-02-11 20:25:32

0

正如評論對方的回答指出,問題是,你要使用的。每個方法的單個對象,而不是在某種形式的收集。

爲了獲得一個collection拿着所有的標題一些容器內,用.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 

您也可以使用像賈斯汀給他的評論的第一個答案

相關問題