Descubre las diferencias entre esperas implícitas y explícitas en Selenium
Es muy habitual que cuando se realizan test, se trabajen con esperas, y es muy importante saber llevar a cabo dichas esperas utilizando el framework de pruebas y en este artículo nos centraremos en Selenium.
Nunca debemos utilizar el código estándar para esperar, ya que las librerías que se utilizan para realizar test tienen sus propios métodos para gestionar estos tiempos.
Ejemplo de espera en JAVA que no se debe utilizar al realizar test con Selenium
Este tipo de esperas pueden provocar comportamientos no deseados en las pruebas, ya que estamos deteniendo el hilo principal de la ejecución.
Dentro de Selenium existen dos conceptos que debemos comprender y utilizar:
- Espera implícita
- Espera explícita
Esperas implícitas
En primer lugar, la espera implícita es el tiempo por defecto que se establece al inicio para buscar cualquier componente.
Por ejemplo, estamos desarrollando una serie de test sobre una página web y establecemos la espera implícita a diez segundos.
Por consiguiente, Selenium esperará 10 segundos cuando vaya a buscar cualquier elemento y en caso de no encontrarlo, se lanzará una excepción de tipo “Elemento no encontrado”.
Nuestro test cambia de página y quiere pulsar un botón. Se realizaría con el siguiente código:
Nuestra prueba pulsa en el enlace (“nextPage”) y comienza el cambio de página, que tarda en cargar cinco segundos. Seguidamente, en el siguiente segundo, se pulsa el botón “mainButton” que ya está visible en ese momento.
A continuación, os voy a enseñar una pequeña tabla con los resultados del test anterior dependiendo del tiempo de carga y del tiempo implícito:
Tiempo de carga
5 s.
12 s.
5 s.
12 s.
Tiempo de carga
10 s.
10 s.
30 s.
30 s.
Tiempo de carga
Test OK en 6 segundos
Test KO (no encontrado)
Test OK en 6 segundos
Test OK en 13 segundos
Como se puede ver compensa tener un tiempo implícito un poco más alto, porque nuestras pruebas seguirán funcionando si los tiempos de carga se incrementan, por ejemplo, al cambiar de entorno.
Recomiendo que el tiempo implícito sea una variable que se pueda configurar, o al menos que sea una constante.
Esperas explícitas
Finalmente, la espera explícita se utiliza para especificar el tiempo de espera en un momento de nuestro test. Aquí se fija el tiempo de espera, no se depende de una espera global.
Por ejemplo, en otro test donde hay que rellenar un formulario y al final pulsar el botón «enviar», teniendo en cuenta que la página válida los datos y tarda un tiempo en la verificación. Para hacer esto se define una espera explícita de 30 segundos.
En la primera línea se crea una espera de 30 segundos y en la segunda se aplica asociando la espera a una condición.
El resultado es que esperará 30 segundos a que el botón enviar esté habilitado.
Dentro del grupo ExpectedConditions hay muchas condiciones que se pueden utilizar en nuestras pruebas. Estas son algunas de las que más usadas:
- elementToBeSelected: Esperará a que el elemento pueda ser seleccionado.
- visibilityOf: Esperará a que el elemento aparezca.
- invisibilityOf: Esperará a que el elemento desaparezca.
Esperas fluidas
Así mismo, en las esperas explícitas, hay un subtipo que se conoce como esperas fluidas las cuales se utilizan para especificar la frecuencia de búsqueda.
Como se puede ver, se utiliza de forma parecida a la anterior, en la definición del tiempo de espera se específica tanto la espera como el tiempo de refresco.
Descubre otros post realizados por los miembros de Aura IRC: Accesibilidad digital en apps y webs; Clean and Security Code; iHawk Agriculture
0 comentarios