2009-09-16 225 views
2

我会很短。获取元素按属性

据我知道的Watir库提供了获取HTML元素的两种方法。

的概的Watir提供了两种方法的每一个元素(DIV,按钮,表,里,等):

。一种是只有一种特定元素的“单一”方法。例如:

watir_instance.div(:id,'my_div_id') 
watir_instance.link(:href,'my_link_href') 
watir_instance.button(:class =>'my_button_class', :index => 4) 

这些方法只会检索单个元素。那好吧...

。第二个是“复数”的方法,将获取的Watir实例

watir_instance.divs 
watir_instance.links 
watir_instance.buttons 

的所有元素但据我所知的Watir不提供一个方法来获得一个以上的元素赋予一定的条件。

例如...如果我想闪所有ID链接:my_link_id这将是很容易做这样的事情:

watir_instance.divs(:id, 'my_link_id').each do |link| 
    link.flash 
end 

随着角度来说,Hpricot这个任务是很容易的......但是如果你的目标不是解析,我找不到我想要的Watir方法。

希望你能理解我...

干杯,胡安!!

回答

2

娟,

你的脚本有几个问题:

  • 你说你要闪所有链接,但你使用watir_instance.divs。它应该是watir_instance.links
  • 您将参数传递给divs方法:watir_instance.divs(:id, 'my_link_id')。它应该只是watir_instance.divs

你举的例子也怪:

我想闪所有 ID链接:my_link_id

据我所知,ID应该是在页面上是唯一的。

因此,这里有不同的例子:

1)闪存此页面上的所有链接:

require "watir" 
b = Watir::IE.start "http://stackoverflow.com/questions/1434697" 
b.links.each do |link| 
    link.flash 
end 

2)闪存有questions在URL(奖金这个网页上的所有链接:滚动页面因此闪现的链接可见):

require "watir" 
b = Watir::IE.start "http://stackoverflow.com/questions/1434697" 
b.links.each do |link| 
    if link.href =~ /questions/ 
    link.document.scrollintoview 
    link.flash 
    end 
end 
+0

非常感谢Zeljko!但我想我没有解释清楚我的问题和我想做的事情...... 我只是问的Watir提供类似的div但接受参数应用的方法...例如,如果我不得不闪带班“my_class”我会把这样的各个环节: B =的Watir :: IE.start “xxxxxxx” b.links(:class,'myclass')。each do | link | link.flash end 是否存在这样的一些方法? 无论如何,如果这种方法不存在,在你的例子中我已经看到了解决我的问题的方法;如果有条件地比较属性,则正在做一个。 – flyer88

+0

简答:没有。稍微长一点的答案:据我所知,当你要求收集元素(divs,links ...)时,你会得到它们,没有办法只获得一些元素(如特定类的链接)。幸运的是,我的答案解决了这个问题。 –