Obtenir des éléments par attributs
-
07-07-2019 - |
Question
Je serai bref.
Autant que je sache, la bibliothèque watir fournit deux méthodes pour obtenir des éléments HTML.
Presque pour chaque élément (div, bouton, table, li, etc.), watir propose deux méthodes:
. L'une est la méthode «singulière» qui n'obtient qu'un é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 ne récupéreront qu’UN SEUL ÉLÉMENT. C'est ok ...
. La seconde est la méthode 'plurielle' qui récupérera 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 de méthode pour obtenir plus d’un élément donnant certaines conditions.
Par exemple ... Si je veux flasher tous les liens avec l'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 but n'est pas d'analyser, je ne pourrais pas trouver une méthode Watir qui fasse ce que je veux.
J'espère que vous pourrez me comprendre ...
Cordialement, Juan !!
La solution
Juan,
votre script a plusieurs problèmes:
- Vous dites que vous voulez flasher tous les liens, mais vous utilisez ensuite
watir_instance.divs
. Ce devrait êtrewatir_instance.links
- vous passez les arguments à la méthode
divs
:watir_instance.divs (: id, 'mon_lien_id')
. Ce devrait être justewatir_instance.divs
Votre exemple est également étrange:
je veux flasher tous les liens avec id: mon_lien_lien
Autant que je sache, l'identifiant doit être unique sur 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 sur tous les liens de cette page qui ont questions
dans l'URL (bonus: faites défiler la page pour que le lien clignotant soit 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