2009-09-16 12 views
2

Je serai court. Autant que je sache, la bibliothèque de watir fournit deux méthodes pour obtenir des éléments html.Obtenir des éléments par attributs

Presque pour chaque élément (div, bouton, table, li, etc) watir fournit deux méthodes:

. L'un est la méthode «singulière» qui n'obtient qu'un seul élément spécifique. Par exemple:

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

Ces méthodes récupèrent uniquement un élément unique. C'est ok ...

. La seconde est la méthode « plurielle » qui permet de récupérer tous les éléments de l'instance watir

watir_instance.divs 
watir_instance.links 
watir_instance.buttons 

Mais pour autant que je sache watir ne fournit pas une méthode pour obtenir plus d'un élément donnant certaines conditions.

Par exemple ... Si je veux flasher tous les liens avec id: my_link_id il serait très facile de faire quelque chose comme ceci:

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

Avec hpricot cette tâche est très facile ... mais Si votre objectif n'est pas d'analyser, je ne pouvais pas trouver une méthode Watir qui fait ce que je veux.

espère que vous pouvez me comprendre ...

Cheers, Juan !!

Répondre

2

Juan,

votre script a plusieurs problèmes:

  • Vous dites que vous voulez flasher tous les liens, mais vous utilisez watir_instance.divs. Il doit être watir_instance.links
  • vous passez des arguments à la méthode divs: watir_instance.divs(:id, 'my_link_id'). Il devrait être juste watir_instance.divs

Votre exemple est aussi étrange:

je veux flasher tous les liens avec id: my_link_id

Pour autant que je sache, id devrait être unique à la page.

Alors, voici différents exemples:

1) flash tous les liens sur cette page:

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

2) flash tous les liens sur cette page qui ont questions dans l'URL (bonus: faire défiler la page donc le lien qui est flashé est visible):

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

Merci beaucoup Zeljko! Mais je pense que je n'ai pas bien expliqué mon problème et les choses que je veux faire ... Je demandais juste si watir fournit une méthode comme divs mais accepte des parametres ... Par exemple si je devais flasher tous les liens avec class 'my_class' je mettrais quelque chose comme ceci: b = Watir :: IE.start "xxxxxxx" b.liens (: class, 'myclass'). each do | link | link.flash end Existe-t-il une méthode de ce type? Quoi qu'il en soit, si cette méthode n'existe pas, dans votre exemple j'ai vu le moyen de résoudre mon problème; an fait un si conditionnel en comparant l'attribut. – flyer88

+0

Réponse courte: non. Une réponse un peu plus longue: autant que je sache, quand vous demandez une collection d'éléments (divs, links ...), vous les obtenez tous, il n'y a aucun moyen d'obtenir seulement quelques éléments (comme des liens avec une classe spécifique). Heureusement, ma réponse résout ce problème. –

Questions connexes