Esperas explícitas en Selenium

Esperas explícitas en Selenium
Selenium ofrece esperas para resolver los problemas de sincronización. En este artículo, discutiremos el método de espera explícito. El método explícito contiene la ejecución del siguiente paso hasta que encuentre el elemento en un tiempo específico dado. En este contenido, tendremos una visión general sobre las esperas de selenio y comprenderemos las ventajas de la espera explícita. Este artículo implementa un ejemplo básico de esperas explícitas y utiliza bloques de intento y captura para captar la excepción.

¿Cuáles son las esperas en el marco de Selenium??

Las esperas de selenio ayudan a resolver los problemas de sincronización. La sincronización es el proceso de coincidir la "velocidad de la herramienta de automatización de pruebas" con la velocidad del "sitio web en prueba". En este proceso, el WebDriver ejecuta una determinada tarea en la página web, pero el webelemento no se carga en el "sitio web bajo prueba". En esta situación, el WebDriver arroja una "expección nosuchelement" o excepciones ". Hay tres tipos de método Waits proporcionado por el marco de Selenium.

Espera implícita

Este tipo de espera se aplica a todos los elementos del sitio web, por eso se llama una espera global. El método implícitamentewait () se usa para llamarlo.

Espera explícita

Es un tipo de espera específico de webelement. Espera a un cierto tiempo cargar el elemento específico antes de lanzar una excepción.

Espera con fluidez

Da la máxima cantidad de tiempo para encontrar el webelemento.

¿Qué es una espera explícita en Selenium??

El tipo de espera explícita es diferente de la espera implícita. Este método de espera se mantiene durante un cierto tiempo hasta que ocurra una condición específica antes de continuar con la siguiente línea de código. Es útil donde algunos elementos se cargan más rápido y algunos elementos se cargan más lento. Por ejemplo: hay dos o tres elementos que tardan de 20 a 30 segundos en cargarse en la página web. Aquí, no puede ir y cambiar la espera de acuerdo con el tiempo máximo que toma uno de los webelementos. Ahí es donde la espera explícita juega su parte. La espera explícita especifica la espera de ese elemento en particular en la página web. Puede especificar para esperar un elemento en particular durante mucho tiempo; Ahí es donde usamos la espera explícita. El método WebDriverWait se utiliza para llamar a Eexplicit Wait.

Interfaz Selenium WebBrowser

La interfaz WebDriver habilita la implementación de la prueba de automatización. WebDriver se utiliza para controlar y crear interacción entre el sitio web y las herramientas de automatización de selenio, como encontrar los elementos, navegar por las URL, obtener propiedades de atributos, confirmar si el texto está allí en el webelemento, buscando un elemento y más.

Puede utilizar una variedad de navegadores web que incluyen Firefox, Safari y Chrome. Cada tipo de navegador tiene una clase específica para ese tipo de navegador, como Firefoxdriver, ChromedRiver, InternetexplorerDriver, etc. Todos los navegadores se pueden implementar a través del método WebDriver.

Aquí está la sintaxis para usar la interfaz WebDriver:

Desde Selenium Import WebDriver
controlador = webdriver.Cromo()
conductor.Get ('https: // www.eBay.com ')

En la parte proporcionada del código, creamos el objeto "controlador" del WebDriver. Aquí, usamos el navegador Chrome con el método.Clase de Chrome (). Después de eso, el navegador lanza y abre la URL dada.

Ejemplo 1:

En este primer programa, se implementa un ejemplo de espera explícito muy básico que es muy útil para principiantes y desarrolladores experimentados.

Hay escenarios en los que primero encontramos el webelemento de "ofertas diarias" y navegamos a la página de ofertas diarias. Si la condición es verdadera, imprima la "condición verdadera". De lo contrario, imprima la excepción "condición falsa".

Primero, importamos todas las bibliotecas necesarias de Selenium y WebBrowser. Para usar la espera explícita, importe las siguientes bibliotecas:

Org de importación.abierto.selenio.apoyo.ui.Concondiciones esperadas;
Org de importación.abierto.selenio.apoyo.ui.WebDriverWait;

Proporcionamos el código completo de la siguiente manera:

paquete ui;
importar java.utilizar.concurrente.Unidad de tiempo;
Org de importación.abierto.selenio.Por;
Org de importación.abierto.selenio.Webelemento;
Org de importación.abierto.selenio.cromo.Cromedriver;
Org de importación.abierto.selenio.apoyo.ui.Concondiciones esperadas;
Org de importación.abierto.selenio.apoyo.ui.WebDriverWait;
clase pública Explicit_wait
public static void main (string [] args)
Sistema.setProperty ("WebDriver.cromo.conductor "," C: \\ BrowserDrivers \\ ChromedRiver.exe");
Cromedriver controlador = nuevo ChromedRiver ();
conductor.administrar().ventana().maximizar();
conductor.Get ("https: // www.eBay.com/");
WebDriverWait Wait = New WebDriverWait (controlador, duración.Ofseconds (10));
intentar
Elemento webelement = espera.Hasta que (Condiciones esperadas.VisibilidadFelementLocated (por.LinkText ("ofertas diarias")));
elemento.hacer clic();
Sistema.afuera.println ("condición verdadera");

captura (excepción e)

Sistema.afuera.println (e);
Sistema.afuera.println ("condición falsa");

conductor.abandonar();

Ahora, comprendamos el código anterior paso a paso y expliquemos qué acciones realiza cada línea.

En la primera parte del código, obtenemos las bibliotecas del navegador de la máquina y luego lanzamos los controladores del navegador Chrome.

En este ejemplo, usamos el navegador Chrome. La siguiente sintaxis se usa para implementarla:

Sistema.setProperty ("WebDriver.cromo.conductor "," C: \\ BrowserDrivers \\ ChromedRiver.exe");
Cromedriver controlador = nuevo ChromedRiver ();

Después de eso, maximizamos la ventana del navegador y abrimos el sitio web dado utilizando la siguiente sintaxis dada:

conductor.administrar().ventana().maximizar();
conductor.Get ("https: // www.eBay.com/");

Para este ejemplo, utilizamos el sitio web de eBay ubicado en https: // www.eBay.com/.

Si queremos verificar si la hiperline de "trato diario" existe o no, debemos saber dónde está presente el "acuerdo diario" en el sitio web. Para encontrar el localizador de LinkText de la Hyper-Line de "ofertas diarias", necesitamos inspeccionar las "ofertas diarias" particular en la página web y encontrar la etiqueta Inn -ttext. La captura de pantalla se adjunta a continuación para ver dónde podemos encontrar la etiqueta de "ofertas diarias".

En la captura de pantalla anterior, vemos que esa etiqueta para "ofertas diarias" está presente en la página web. Si no hay etiqueta presente, no hay una hiperline de "ofertas diarias" presentes. Necesitamos usar esta siguiente pista:

conductor.findelement (por.Locatortype ("LocatorValue"));

Usamos el controlador.método findElements () para verificar si un elemento está presente en una página web o no. El objeto "By" es un parámetro para el comando Buscar elemento que ofrece un objeto del tipo de webelemento. Las diversas técnicas de localización, como nombre, identificación, nombre de clase, xpath, etc. El texto del enlace se puede usar con el objeto "por". Como sabemos, la función FindElements () devuelve una lista de semejas que se encuentran utilizando el parámetro "por localizador". Si se encuentra el elemento, se devuelve una lista de elementos web no cerosos. De lo contrario, se devuelve una lista de tamaño 0. Como resultado, la longitud de la lista se puede utilizar para determinar si una entrada está presente o no.

Para este ejemplo, usamos el localizador LinkText como se muestra en la siguiente sintaxis:

conductor.findelement (por.LinkText ("ofertas diarias")).hacer clic();

En la fragmentación del código anterior, primero encuentre el texto hiperline de "ofertas diarias". Después de eso, use la función Click () para navegar a otra página.

Después de eso, la espera explícita se implementa en la siguiente sintaxis dada:

WebDriverWait Wait = New WebDriverWait (controlador, duración.Ofseconds (10));

Cuando usamos la parte anterior del código para la espera explícita, tenga en cuenta que la función espera 10 segundos como se define en el método WebDriverWait hasta que se encuentra el localizador dado.

El método WebDriverWait se utiliza para implementar explícitamente. Cree el objeto de referencia "esperar" de la clase WebDriverWait. Luego, asigne la memoria con el nuevo WebDriverWait y pase dos parámetros (1) objeto de referencia del controlador web y mencionó (2) duración de tiempo (controlador, duración.Ofseconds (10)).

Ahora, use el objeto de referencia de la clase WebDriverWait, que es "esperar" para llamar al método hasta () y pasar el visibilidad esperado deLementLocated (por.id) condición. Si la condición esperada es verdadera, devuelva el webelemento y espere 10 segundos hasta que esta condición se haga realidad. Esta condición esperada es la especificación webelement. Aquí tenemos que esperar la visibilidad del "elemento". Si el elemento es visible en 5 segundos, espera salidas. Si no, maximiza la espera de 10 segundos.

Aquí está la sintaxis dada para la condición esperada:

Esperar.Hasta que (Condiciones esperadas.VisibilidadFelementLocated (por.id ("elemento")));

Hay muchas condiciones esperadas que son proporcionadas por selenio como alertispresent (), ElementselectionStateTobe (), ElementTobeClickable (), etc. Aquí en este tutorial, utilizamos la condición "VisBlityOfEfElementLocated".

Pasemos al siguiente trozo de código donde tenemos la "condición verdadera":

intentar
Elemento webelement = espera.Hasta que (Condiciones esperadas.VisibilidadFelementLocated (por.LinkText ("ofertas diarias")));
elemento.hacer clic();
Sistema.afuera.println ("condición verdadera");

captura (excepción e)

Sistema.afuera.println (e);
Sistema.afuera.println ("condición falsa");

Para verificar si el elemento existe o no, usamos un bloque de intento y capturar. Todo lo que necesitamos hacer es intentar encontrar el elemento e interactuar con él.

Elemento webelement = espera.Hasta que (Condiciones esperadas.VisibilidadFelementLocated (por.LinkText ("ofertas diarias")));
elemento.hacer clic();
Sistema.afuera.println ("condición verdadera");

Espere el elemento con el enlace "ofertas diarias". Si encontramos el webelemento, haga clic en ese elemento para navegar a otra página e imprimir la "condición verdadera" en la consola.

Aquí en la siguiente captura de pantalla de salida, podemos ver que el elemento Find es exitoso. Navegar por la página:

Pasemos al siguiente trozo de código donde tenemos la "condición falsa":

intentar
Elemento webelement = espera.Hasta que (Condiciones esperadas.VisibilidadFelementLocated (por.LinkText ("Elemento incorrecto")));
elemento.hacer clic();
Sistema.afuera.println ("condición verdadera");

captura (excepción e)

Sistema.afuera.println (e);
Sistema.afuera.println ("condición falsa");

Si el texto hiperline de "elemento incorrecto" no está presente en la página web, arroje la excepción e imprima la salida "Condición falsa" en la consola.

En la siguiente captura de pantalla de salida, podemos ver que el elemento no tiene éxito:

Finalmente, después de ejecutar todo el código, cierre el navegador usando el método Quit ().

conductor.abandonar();

Conclusión

Ahora aprendió sobre las ventajas de espera explícita de selenio. Aprenderá a implementarlo en un escenario real. Este artículo implementa el ejemplo en el que mantiene la ejecución de un código adicional hasta que encuentre el elemento en un tiempo de espera dado. Este artículo contiene las condiciones de intento y captura. Si el elemento está saliendo, imprima la "condición verdadera". De lo contrario, imprima la "condición falsa".