martes, 29 de mayo de 2012

Accediendo a elementos sin id con Watir




Cuando estás automatizando la prueba sobre la GUI de una aplicación es muy posible que no puedas acceder a los elementos mediante su id por la simple razón de que no tienen id. Por ejemplo, queremos acceder al campo de texto del siguiente código: 


<tr>
<td class="tns-PanelFormTitleText">Nombre</td>
<td>
<input class="gwt-TextBox tns-TextBox" type="text">
</td>
</tr>

No hay un atributo name, tampoco un id. 

Una solución es utilizar XPath (presento solo el xpath asociado con la porción de código de arriba): 

ie.text_field(:xpath, "...tr/td[2]/input").set 'WATIR 1'

Al ejecutar la prueba con XPath el campo de texto recibió la cadena 'WATIR 1' pero después de una larga espera en la que cada 2 segundos aproximadamente se escribía un caracter. No conozco la implementación pero supongo que por cada caracter que será ingresado, se recorre el xpath.  

Una mejor solución, es aprovechar que el campo tiene un "label" asociado. O mejor, en la celda anterior a la que contiene el campo, hay un texto que al menos semánticamente se relaciona con nuestro campo objetivo. La estrategia entonces puede ser esta: 

Acceder a la celda con el texto "Nombre". 
A partir de esta celda, obtener la fila que la contiene. 
Acceder a la segunda celda de la fila, que contiene a nuestro campo objetivo. 

En código: 

nombreRow = ie.td(:text => 'Nombre').parent
# se ubica el campo de texto y se le asigna un valor
nombreRow.cells[1].text_field.set 'WATIR 1'

El tiempo de ejecución disminuye considerablemente, a la mitad o menos. 

No hay comentarios:

Publicar un comentario