Estoy escribiendo una prueba automatizada para una aplicación basada en web que está codificada en JavaScript y usa el marco Dojo. Puedo encontrar los elementos que quiero que el bot encuentre en las herramientas para desarrolladores usando XPATHS bien definidos, pero la prueba automatizada no encuentra el texto al que lleva XPATH.
Mi código de prueba se parece a esto:
if verified: verify_detail.set_pass() else: raise AssertionError("Cannot verify detail. Text did not match expected value.")Y el texto que busco en la interfaz de usuario no está mal escrito en el archivo de configuración.
¿Alguien más tiene este problema? XPATH funciona en Developer Tools pero falla cuando se ejecuta la prueba.
Edición 1:
Creo que he encontrado una pista de lo que está causando este problema. El bot tiene que navegar a un panel llamado panel de detalles. El panel de detalles, cuando se abre, se encuentra encima de otro panel llamado panel de películas. Imagine una lista de títulos de películas y el panel de detalles se abre haciendo clic derecho en la película y seleccionando 'Detalles' en un menú desplegable. Así que básicamente tengo una pila de paneles, y mis consultas XPATH llegan al panel debajo del panel de detalles, que es donde realmente necesito mirar.
¿Alguien más ha tenido este problema?
No hay mucha información para continuar, pero me doy cuenta de que es muy difícil ofrecer un ejemplo completo para tales casos.
La razón más común para este tipo de comportamiento es que el elemento en cuestión no está presente inmediatamente en la página, sino que tiene que ocurrir algún procesamiento de JavaScript antes de que aparezca.
La solución más común es usar "esperas implícitas", ver por ejemplo:
https://selenium-python.readthedocs.io/waits.html#esperas implícitas
Tenga en cuenta que esto podría afectar el rendimiento de las pruebas en otros lugares, específicamente al verificar la ausencia de elementos, si está encendido constantemente.
La alternativa obvia es la espera explícita.
Otra herramienta útil para analizar situaciones como esta es establecer puntos de interrupción del depurador en el navegador en los elementos DOM que le interesen, para ver cómo cambia el elemento mientras se carga la página.