Obter Elements por atributos
-
07-07-2019 - |
Pergunta
i será curta.
Tanto quanto eu sei Watir biblioteca fornece dois métodos para obter elementos HTML.
Quase para cada elemento (div, botão, mesa, li, etc) Watir fornece dois métodos:
. Um deles é o método 'singular', que recebe apenas um elemento específico. Por exemplo:
watir_instance.div(:id,'my_div_id')
watir_instance.link(:href,'my_link_href')
watir_instance.button(:class =>'my_button_class', :index => 4)
Estes métodos só irá recuperar um único elemento. Thats ok ...
. O segundo é o 'plural' método que irá recuperar todos os elementos da instância Watir
watir_instance.divs
watir_instance.links
watir_instance.buttons
Mas, tanto quanto eu sei Watir não fornece um método para obter mais de um elemento dando certas condições.
Por exemplo ... Se eu quero a piscar todos os elos id: my_link_id seria muito fácil de fazer algo como isto:
watir_instance.divs(:id, 'my_link_id').each do |link|
link.flash
end
Com hpricot esta tarefa é muito fácil ... mas se o seu objetivo não é analisar eu não poderia encontrar um método Watir que faz o que eu quero.
Espero que possa me entender ...
Cheers, Juan !!
Solução
Juan,
seu script tem vários problemas:
- Você diz que quer a piscar todos os links, mas então você usar
watir_instance.divs
. Deve serwatir_instance.links
- você passar argumentos para o método
divs
:watir_instance.divs(:id, 'my_link_id')
. Deve ser apenaswatir_instance.divs
Seu exemplo também é estranho:
i quer a piscar todos os elos id: my_link_id
Tanto quanto eu sei, id deve ser único na página.
Então, aqui estão vários exemplos:
1) piscam todos os links nessa página:
require "watir"
b = Watir::IE.start "http://stackoverflow.com/questions/1434697"
b.links.each do |link|
link.flash
end
2) o Flash todos os links nesta página que têm questions
na URL (bônus: Rolo a página para o link que é brilhou é visível):
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