TechAIDBlogXPATH. Con un Gran Poder Viene una Gran Responsabilidad
By Mike Arias 04/11/2019 5

XPATH. Con un Gran Poder Viene una Gran Responsabilidad

Imagínate esto. Estás escribiendo un script de prueba que necesita hacer clic en un enlace para verificar su funcionalidad, pero ese botón no tiene una identificación o una clase que lo identifique. ¿Cómo lo encuentras?

 

Xpath


Primero, debes decidir si usarás un selector de CSS o si usarás XPath. Por el bien de este artículo, iremos directamente a XPath. Si nos fijamos un poco más en el código, veremos que este enlace está dentro de un <li> que tiene un ID, podemos usar esto para nuestra ventaja.

 

 

Para seleccionar esto podríamos usar algo como:

 

// li [@ id = 'menu-item-14 ′] / a

 

En este caso y en este sitio, esto devuelve solo 1 resultado, que es lo que queremos, pero algo parece sospechoso para mi ojo. ¿Qué sucede si » menu-item-14 » es una ID dinámica y cambia cuando recargamos la página o cambiamos si el creador del sitio decide agregar otro elemento a ese menú?


Lo que sucederá es que nuestro código se
romperá y tendremos que arreglarlo . Eso es lo que va a pasar.


Esto significa que debemos encontrar una forma más confiable de encontrar nuestro elemento, para esto tendremos que profundizar en el código. Si observamos un poco más a fondo, encontraremos que este
<li> está dentro de un <ul> que tiene una ID única, y esa ID parece ser una estática que no cambiará en el futuro cercano. Esto representa una apuesta mucho más segura para confiar en nuestro XPath.

 

 


Si usamos esto como el inicio para nuestro XPath, terminaremos con algo como esto:

 

// ul [@ id = 'menú superior'] / li / a

 

Pero espera, ahora tenemos otro problema. Este XPath seleccionará todos los enlaces almacenados en esta lista, necesitamos restringirlo aún mas. Para esto podemos seguir 2 rutas, podemos dejarlo como está y en el código manejar la lista de elementos que devuelve, o podemos ser un poco más específicos, por lo que XPath solo devuelve un elemento.

Por experiencia anterior, he notado que ser específico e introducir la complejidad en XPath ahorra tiempo en la ejecución y también hace que su script de prueba al final sea un poco más limpio, ya que no tendrás que lidiar con el índice más adelante.

 

Nuestra última expresión XPath para seleccionar este enlace se vería así:

 

// ul [@ id = 'menú superior'] / li / a [contiene (texto (), 'Inicio')]

 

Entonces, tiempo de preguntas. ¿Por qué no pedimos un enlace que contenga ese texto desde el principio?

Primero, porque eso es demasiado genérico de una expresión. Con una expresión tan simple como la que nos exponemos a encontrar más cosas que lo que realmente estamos buscando.

Segundo, una expresión como esa no es eficiente. Esa expresión obliga a Selenium a revisar todo el DOM del sitio para encontrar todas las coincidencias posibles.


XPath es una herramienta realmente poderosa, pero puede hacer que tu código sea mucho más difícil de leer, mucho más lento y más propenso a romperse porque si algo cambia en la ruta que estás utilizando para tu búsqueda, el XPath se romperá. Y no solo se romperá, no te dirá qué parte del XPath falló.

 

En conclusión, mantén su XPath corto, pero no demasiado corto y lo suficientemente específico como para poder resistir cambios leves en el DOM.

 

Autor:  Mike Arias
Senior Software Testing Engineer de TechAID.
Twitter: @theqaboy
Blog: qaboy.com/

GO BACK TO Herramientas

Deja una respuesta

OTHER POSTS YOU MIGHT LIKE

API- Herramientas de prueba: Una guía basada en ejemplos

By Manuel Marinez 04/08/2021 8

  Para las pruebas de API, existen muchas herramientas que nos permiten realizar las pruebas y recopilar los resultados. En este artículo, me enfocaré en tres herramientas mostrando directamente cómo hacer una solicitud usando la API de Trello.   Pero antes de comenzar, dado que…

Clausula IF vs. ASSERT – ¿Cuándo se debe usar cuál?

By Mike Arias 09/17/2020 0

La clausula IF  y la declaración ASSERT cumplen funciones diferentes, pero similares. El objetivo de este artículo es establecer de una vez por todas cuándo usar «IF» y cuándo usar «ASSERT» en nuestros casos de prueba. Habrán situaciones en las que esta decisión no pueda…