2013-02-26 80 views
0

我有一個代碼,試圖訪問幾個網頁,並將它們添加到收藏夾。我想,一旦你使用訪問,水豚不能繼續其餘的命令,檢查下面的代碼;水豚使用訪問循環

sub_menus = all('li a') 
for i in 0..(sub_menus.length-1) 
    if (sub_menus[i]['href'] == "http://intranet/Intranet/#") || (sub_menus[i]['href'] !~ /http:\/\/intranet(.*)/) 
    next 
    else 
    visit sub_menus[i]['href'] 
    $links.push(sub_menus[i]['href']) 
    find(:xpath , '//*[@id="AddFavorites_UC1_AddFavoriteButton"]').click 
    end 
    puts "hgfhf" 
end 
    p $links 
    p $links.length 

當我執行該代碼,請訪問並單擊工作只有一次,但for循環不運行第二次。

有什麼建議嗎?

+0

是。在0 ..(sub_menus.length-1)'中使用'sub_menus.each'來代替'。 – harm 2013-02-26 15:50:28

+0

你使用這個進行測試還是抓取?對於抓取,我發現[機械化](http://mechanize.rubyforge.org/)的數量級更好。 – harm 2013-02-26 15:52:22

+0

感謝您的建議:)雖然沒有幫助。我試圖自動化一些網頁測試。 – 2013-02-27 07:07:18

回答

0

一旦你去到另一個頁面元素定位器變得無效,你不能再使用它了。所以你不能在其他頁面上使用sub_menus

因此,你應該使用類似:

links = all('li a').map { |el| el[:href] } 
$links = [] 
links.each do |link| 
    unless link !~ /http:\/\/intranet(.*)/ 
    visit link 
    $links << link 
    end 
end 
+0

謝謝Andrey它的工作。另一個問題:我發現的一些鏈接有目標屬性,而其他鏈接則沒有。我想清理具有目標屬性的數組。我怎樣才能做到這一點? – 2013-02-27 10:19:51

+0

@AlperMermer使用數組的'delete_if'方法 – 2013-02-28 18:04:04