Cómo manejar una llamada AJAX en Selenium Webdriver

Tabla de contenido:

Anonim

¿Qué es Ajax?

AJAX son las siglas de Asynchronous JavaScript & XML, y permite que la página web recupere pequeñas cantidades de datos del servidor sin recargar toda la página.

Ajax es una técnica utilizada para crear páginas web rápidas y dinámicas. Esta técnica es asincrónica y utiliza una combinación de Javascript y XML.

Actualizará la (s) parte (s) de una página web sin recargar toda la página.

Algunas de las aplicaciones famosas que utilizan la técnica AJAX son Gmail, Google Maps, Facebook, Youtube, etc.

En este tutorial, aprenderá:

  • ¿Qué es Ajax?
  • ¿Cómo funciona Ajax?
  • Cómo manejar una llamada Ajax usando Selenium Webdriver
  • Desafíos en el manejo de llamadas Ajax en Selenium Webdriver

¿Cómo funciona Ajax?

Por ejemplo, cuando hace clic en el botón enviar, JavaScript hará una solicitud al servidor, interpretará el resultado y actualizará la pantalla actual sin volver a cargar la página web.

  • Una llamada Ajax es una solicitud asincrónica iniciada por el navegador que no da como resultado directamente una transición de página. Significa que, si dispara una solicitud Ajax, el usuario aún puede trabajar en la aplicación mientras la solicitud espera una respuesta.
  • AJAX envía solicitudes HTTP del cliente al servidor y luego procesa la respuesta del servidor, sin recargar toda la página. Entonces, cuando realiza una llamada AJAX, no está muy seguro del tiempo que tarda el servidor en enviarle una respuesta .

Desde el punto de vista de un evaluador, si está verificando el contenido o el elemento que se mostrará, debe esperar hasta obtener la respuesta. Durante la llamada AJAX, los datos se almacenan en formato XML y se recuperan del servidor.

Cómo manejar una llamada Ajax usando Selenium Webdriver

El mayor desafío en el manejo de llamadas Ajax es conocer el tiempo de carga de la página web. Dado que la carga de la página web durará solo una fracción de segundos, es difícil para el evaluador probar dicha aplicación a través de la herramienta de automatización. Para eso, Selenium Webdriver tiene que usar el método de espera en esta llamada Ajax.

Entonces, al ejecutar este comando de espera, selenium suspenderá la ejecución del caso de prueba actual y esperará el valor esperado o nuevo. Cuando aparezca el nuevo valor o campo, Selenium Webdriver ejecutará los casos de prueba suspendidos.

A continuación se muestran los métodos de espera que puede utilizar Selenium Webdriver

  1. Thread.Sleep ()
  • Thread.Sleep () no es una buena elección, ya que suspende el hilo actual durante el tiempo especificado.
  • En AJAX, nunca puede estar seguro del tiempo de espera exacto. Por lo tanto, su prueba fallará si el elemento no aparece dentro del tiempo de espera. Además, aumenta la sobrecarga porque llamar a Thread.sleep (t) hace que el hilo actual se mueva de la cola en ejecución a la cola de espera.
  • Una vez alcanzado el tiempo 't', el subproceso actual se moverá de la cola de espera a la lista de espera, y luego la CPU tardará un tiempo en seleccionarlo y estar en ejecución.
  1. Espera implícita ()
  • Este método le dice a webdriver que espere si el elemento no está disponible inmediatamente, pero esta espera estará en su lugar durante todo el tiempo que el navegador esté abierto. Por lo tanto, cualquier búsqueda de los elementos en la página podría tomar el tiempo para el que está configurada la espera implícita.
  1. Espera explícita ()
  • La espera explícita se utiliza para congelar la ejecución de la prueba hasta que se cumpla una condición particular o transcurra el tiempo máximo.
  1. WebdriverWait
  • Puede usarse para cualquier condición. Esto se puede lograr con WebDriverWait en combinación con ExpectedCondition
  • La mejor manera de esperar un elemento dinámicamente es verificar la condición cada segundo y continuar con el siguiente comando en el script tan pronto como se cumpla la condición.

Pero el problema con todas estas esperas es que debes mencionar la unidad de tiempo de espera. ¿Qué pasa si el elemento todavía no está presente dentro del tiempo? Así que hay una espera más llamada espera fluida.

  1. Espera fluida
  • Esta es una implementación de la interfaz Wait que tiene su tiempo de espera y su intervalo de sondeo. Cada instancia de FluentWait determina la cantidad máxima de tiempo de espera para una condición, así como la frecuencia con la que se verifica.

Desafíos en el manejo de llamadas Ajax en Selenium Webdriver

  • El uso del comando "pause" para manejar la llamada Ajax no es completamente confiable. El tiempo de pausa prolongado hace que la prueba sea inaceptablemente lenta y aumenta el tiempo de prueba. En cambio, "waitforcondition" será más útil para probar aplicaciones Ajax.
  • Es difícil evaluar el riesgo asociado con aplicaciones Ajax particulares.
  • La total libertad para que los desarrolladores modifiquen la aplicación Ajax hace que el proceso de prueba sea un desafío.
  • La creación de una solicitud de prueba automatizada puede ser difícil para las herramientas de prueba, ya que dicha aplicación AJAX a menudo usa diferentes técnicas de codificación o serialización para enviar datos POST.

Un ejemplo de MANEJO DE Ajax

import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium.support.ui.ExpectedConditions;importar org.openqa.selenium.support.ui.WebDriverWait;import org.testng.Assert;import org.testng.annotations.BeforeClass;import org.testng.annotations.Test;public class Ajaxdemo {URL de cadena privada = "http://demo.guru99.com/test/ajax.html";Controlador WebDriver;WebDriverWait espera;@Antes de clasepublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// crear instancia de Chromecontrolador = nuevo ChromeDriver ();driver.manage (). window (). maximizar ();driver.navigate (). a (URL);}@Pruebapublic void test_AjaxExample () {Por contenedor = By.cssSelector (". Contenedor");esperar = nuevo WebDriverWait (controlador, 5);wait.until (ExpectedConditions.presenceOfElementLocated (contenedor));// Obtén el texto antes de realizar una llamada ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Haga clic en el botón de opcióndriver.findElement (By.id ("sí")). click ();// Haga clic en el botón Comprobardriver.findElement (By.id ("buttoncheck")). click ();/ * Obtener el texto después de la llamada ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Verifica ambos textos antes de la llamada ajax y después del texto de la llamada ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Llamada Ajax realizada");StringpectedText = "El botón de opción está marcado y su valor es Sí";/ * Verifica el texto esperado con el texto actualizado después de la llamada ajax * /Assert.assertEquals (texto después, texto esperado);driver.close ();}}

Resumen:

  • AJAX permite que la página web recupere pequeñas cantidades de datos del servidor sin recargar toda la página.
  • Para probar la aplicación Ajax, se deben aplicar diferentes métodos de espera
    • HiloDormir
    • Espera implícita
    • Espera explícita
    • WebdriverWait
    • Espera fluida
  • La creación de una solicitud de prueba automatizada puede ser difícil para las herramientas de prueba, ya que dicha aplicación AJAX a menudo usa diferentes técnicas de codificación o serialización para enviar datos POST.