2013-05-15 42 views
1

處理在下面的代碼中,我想失敗在rescue異常在Ruby中

puts "Verifying Home Page" 
    begin 
    page.find('#logoAnchor') 
    puts "logo anchor found" 
    page.find('.navbar-inner') 
    puts "Header bar found" 
    page.find('.unstyled') 
    puts "Found occations frame" 
    page.find('#easyPrintPromoBox') 
    puts "Easy Print Frame Found!" 
    page.find('.tabbable') 
    puts "3 Tabs Found!" 
    page.find('#givingCardPromoBox') 
    puts "Create Frame Found!" 
    page.find('.footer') 
    puts "Footer Found!" 

    rescue 
    puts "Logo anchor not Found" 
    end 

這裏一切的名單,我只趕上了異常,如果標誌錨不found.I必須捕獲異常如果任何一個他們沒有找到。 爲如:

如果沒有找到標識錨放入rescue
「標誌錨不存在」如果標題欄不存在放入rescue

+0

'rescue'將捕獲拋出的第一個例外。你想獲得一切失敗的清單? – Dogbert

+0

是的,我想得到所有失敗的列表 – chinchu

+0

然後,你必須包裝每一個可以在'begin ... rescue ... end'塊中引發異常的語句。 – Thilo

回答

3

「標題欄未找到」這是一個使用Array#partition

的一種方式
# dummy placeholder method for `page.find` 
def find(el) 
    if rand < 0.5 
    raise :nop 
    else 
    true 
    end 
end 

selectors = ['#logoAnchor', '.navbar-inner', '.unstyled', '#easyPrintPromoBox', '.tabbable', '#givingCardPromoBox', '.footer'] 
found, not_found = selectors.partition do |selector| 
    find(selector) rescue false 
end 

puts "Found: #{found}" 
puts "Not found: #{not_found}" 

輸出示例:

Found: ["#logoAnchor", ".unstyled", "#easyPrintPromoBox", ".tabbable"] 
Not found: [".navbar-inner", "#givingCardPromoBox", ".footer"] 

這應該在水豚(未測試)工作:

selectors = ['#logoAnchor', '.navbar-inner', '.unstyled', '#easyPrintPromoBox', '.tabbable', '#givingCardPromoBox', '.footer'] 
found, not_found = selectors.partition do |selector| 
    page.find(selector) rescue false 
end 

puts "Found: #{found}" 
puts "Not found: #{not_found}" 
+0

其工作。謝謝 – chinchu

1
puts "Verifying Home Page" 
    begin 
    page.find('#logoAnchor') 
    puts "logo anchor found" 
    rescue 
    puts "Logo anchor not Found" 
    end 

    begin 
    page.find('#navbar-inner') 
    puts "navbar-inner found" 
    rescue 
    puts "navbar-inner not Found" 
    end 

    ... 
    end 

def findOrRescue(id, successMsg, errorMsg) 
    begin 
    page.find(id) 
    puts successMsg 
    rescue 
    puts errorMsg 
    end 
end 

puts "Verifying Home Page" 
    findOrRescue("#logoAnchor", "logo anchor found", "Logo anchor not Found") 
    ...