webdriver - Watir, objetos de página: cómo obtener todos los elementos que tienen el mismo identificador
watir-webdriver page-object-gem (2)
Tengo el siguiente código de código en mi página Quiero verificar:
...
<p class="tags-link">
<a href="/search?q=test1" rel="nofollow">test1</a>
<a href="/search?q=test2" rel="nofollow">test2</a>
<a href="/search?q=test3" rel="nofollow">test3</a>
</p>
....
<p class="tags-link">
<a href="/search?q=test4" rel="nofollow">test4</a>
<a href="/search?q=test5" rel="nofollow">test5</a>
<a href="/search?q=test6" rel="nofollow">test6</a>
</p>
....
Yo uso Watir-webdriver y page-object. Y necesito obtener todos los enlaces relacionados con bloques con clase "tags-link".
Tengo el siguiente código:
element(:tags, :p, :css => "tags-link a")
tags_element solo devuelve el primer enlace.
El siguiente código me dará solo 3 enlaces relacionados con el primer bloque:
element(:tags, :p, :css => "tags-link")
tags_element.element.links.each do |elm|
puts elm
end
Pero necesito obtener todos los bloques de etiquetas
Ahora tengo el siguiente código que funciona, pero quiero estar orientado al "objeto de página":
@browser.elements(:css =>".tags-link a").each do |tag|
puts tag
end
¿Podría ayudarme ... a obtener todos los enlaces en la página relacionados con "etiquetas-vínculo" usando objetos de página?
Gracias, Anna
Puede definir una colección de enlaces en su objeto de página usando links
:
class MyPage
include PageObject
links(:tag_link, :css =>".tags-link a")
end
Esto creará un método collection_name_elements
que devuelve una matriz de elementos de página coincidentes. Puede recorrerlo para realizar una acción en cada elemento. Por ejemplo, para mostrar el texto de cada enlace:
page.tag_link_elements.each do |link|
puts link.text
end
#=> test1
#=> test2
#=> test3
#=> test4
#=> test5
#=> test6
Esto es todo lo que necesitas hacer:
ary_of_tests = @browser.ps(:class, ''tag-links'').map do |t|
t.as.map do |x|
x.text
end
end
=> [["test1", "test2", "test3"], ["test4", "test5", "test6"]]
Si no te gustan los arreglos dinámicos, siempre puedes utilizar el método de aplanar para hacer que sea un método unidimensional o to_s para convertirlo en una cadena. Definir una nueva clase y especificar escenarios parece exagerado para mí, pero para cada uno es suyo.
Nota: ps (: clase, ''tag-links) es una colección de todos los elementos p con clase de atributo y tag-links de valor en el DOM de una página dada.