webdriver watir-webdriver page-object-gem

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.