2013-02-26 79 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