tool test script katalon guide automation automated-tests watir watir-webdriver webautomation

automation - test - watir installation



Accediendo a un elemento sin atributos en Watir (3)

Usando Watir, ¿hay alguna manera de acceder a un elemento sin atributos?

Por ejemplo:

<span>Text</span>

Me gustaría evitar el uso de xpath, pero si esa es la única manera es genial.


Si tiene texto:

browser.span(:text => "Text")

Si solo conoce una parte del texto, puede usar la expresión regular:

browser.span(:text => /Text/)


Sin tener en cuenta los problemas no WATIR de tener etiquetas en primer lugar, o solicitar atributos únicos de sus desarrolladores (o de usted), siempre puede acceder a un elemento a través de sus elementos principales o por índice.

Por ejemplo: texto

@browser.div(:name => "content").span(:index => 1) #this is the first span element inside this div

Puede trabajar a través de los muchos elementos únicos que necesita antes de llegar al elemento de intervalo de hijos, sin usar Xpath. Por supuesto, solo necesita un elemento primario único para llegar a ese elemento hijo específico, y trabaja desde ese nivel hasta el hijo.

div(:how => what).table(:how => what).td(:how => what).span(:how => what).text

Otro ejemplo, suponiendo que es el enésimo espacio en la página: @ browser.span (: index => n )

Sin embargo, el enfoque por índice es muy frágil y propenso a romperse cuando se realiza una actualización en la página.


Básicamente, hay tres formas de abordar este desafío en particular. Zeljko ha abordado el primero que se basa en lo que está dentro del elemento , como el texto conocido. Adam aborda la forma más común, lo que encierra o contiene el elemento que abordaré en la tercera forma, que es lo que está encerrado por o junto al elemento .

Si tiene un elemento conocido que está dentro del que desea, puede comenzar con eso y usar el método .parent para obtener el elemento ''contenedor''. Esto también se puede usar para encontrar un elemento ''hermano'' usando .parent para llegar al que desea a través de un contenedor común como una fila de la tabla. El primer uso es bastante obvio, pero el segundo es probablemente más común y muy útil cuando se trabaja con tablas.

Por ejemplo, digamos que tiene una tabla con varias filas de datos donde una columna tiene números de parte únicos, y otra columna tiene vínculos de "agregar al carrito". Ahora, si desea agregar una parte específica a su carrito, puede usar el índice combinado con el texto ''agregar al carrito'' usando un código como este, ya que es el quinto enlace con ese texto específico.

browser.link(:text => ''add to cart'', :index => 4).click

Pero esto es frágil porque tan pronto como cambian los resultados, (lo que puede ocurrir mucho con los datos en vivo), su parte ya no es la quinta en esa tabla, y su prueba se romperá. Necesitarás alguna verificación de que has encontrado la parte correcta y no otra cosa en esa fila. Sin embargo, en watir puedes hacer algo como esto:

browser.cell(:text => ''Part no. 123-45'').parent.link(:text => ''add to cart'').click

En el caso de una celda de tabla, el padre de la celda generalmente será una fila de tabla, y por lo tanto en inglés simple esto se traduce en ''encontrar la celda con'' la parte no 123-45 ''en ella, y luego en esa misma fila encontrar y haga clic en el enlace ''agregar al carrito''. (Aunque supongo que lo descubriste solo leyendo el código).

Puede usar esto para obtener cualquier ''hermano'' o incluso solo el ''padre'' en sí mismo, donde hay algún elemento único al lado o dentro del objeto con el que necesita interactuar.

Probablemente puedas hacer algo similar a eso con Xpath, pero la buena suerte tiene sentido al leer el código cinco semanas después. Esta es una de las razones por las que prefiero Watir y Watir-Webdriver vs Selenium.