2011-06-15 45 views
2

我需要檢查選擇列表下拉列表的內容,這取決於另一個字段中的值。我正在從CVS字段中讀取有效選項到字符串數組中,並通過執行以下操作進行比較;在watir-webdriver中將select_list選項轉換爲字符串數組?

selectContent = [] 
$browser.select_list(:id,"srch-status-select").options.each {|option| selectContent << option.text} 
assert_equal(validContent,selectContent,"Status drop down has wrong values") 

這是正確的還是有一個現有的select_list方法做了類似的轉換?

回答

10

有沒有方法正是做你想要什麼,但一個更簡潔的版本是:

selectList = $browser.select_list(:id,"srch-status-select") 
selectContent = selectList.options.map(&:text) 
+0

收到此錯誤,當我嘗試代碼,類型錯誤:錯誤的參數類型Symbol(預計Proc) – 2011-06-16 11:16:49

+2

然後,您使用的是舊版本的Ruby,它不支持將符號用於proc-notation。然後您需要用'{| option |替換'(&:text)' option.text}'...或更新Ruby。 – Magnar 2011-06-16 14:16:21

+0

我正在運行Ruby版本1.8.6,因爲這是Watir推薦的版本。將嘗試您建議的更正,再次感謝。 – 2011-06-17 09:51:27

2

您是否嘗試過的方法可供選項?如果我正確閱讀RDOC for Watir-webdriver,它應該返回包含選擇列表中所有選項的集合。

+0

它這樣做;但我需要它們作爲文本值的數組,而不是它返回的選項元素的區域。 – 2011-06-16 11:28:11

+0

如果您在選項元素上執行.text,它是否會返回選項的顯示文本?如果是的話,你不能迭代選擇數組,並將每一個的.text分配給另一個數組中的元素?等等,我認爲這就是Magnar的答案 – 2011-06-16 18:33:20

+0

它是。你可以做selectList.options.map {| o | o.text}爲一組條目。 – kinofrost 2011-06-17 12:31:20

0

另一種方式做到這一點使用循環,而不是.MAP是:

elems = Array.new 
values = Array.new 
elems = @b.select_list(:id => "selectListId").options 
0.upto(elems.length - 1) do |i| 
    values.push elems[i].text 
end 

則顯示選項

0.upto(values.length - 1) do |i| 
    puts values[i] 
end