JavaScriptExecutor en Selenium WebDriver con ejemplo

Tabla de contenido:

Anonim

¿Qué es JavaScriptExecutor?

JavaScriptExecutor es una interfaz que ayuda a ejecutar JavaScript a través de Selenium Webdriver. JavaScriptExecutor proporciona dos métodos "executecript" y "executeAsyncScript" para ejecutar javascript en la ventana seleccionada o en la página actual.

En este tutorial, aprenderá:

  • ¿Qué es JavaScriptExecutor?
  • ¿Por qué necesitamos JavaScriptExecutor?
  • Métodos JavaScriptExecutor
  • Ejemplo de executeAsyncScript
    • Ejemplo 1: Realización de una suspensión en el navegador bajo prueba.
  • Ejemplo de executeScript
    • 1) Ejemplo: haga clic en un botón para iniciar sesión y generar una ventana de alerta
    • 2) Ejemplo: capturar datos de scrape y navegar a diferentes páginas
    • 3) Ejemplo: Desplácese hacia abajo usando

¿Por qué necesitamos JavaScriptExecutor?

En Selenium Webdriver, los localizadores como XPath, CSS, etc. se utilizan para identificar y realizar operaciones en una página web.

En caso de que estos localizadores no funcionen, puede utilizar JavaScriptExecutor. Puede utilizar JavaScriptExecutor para realizar una operación deseada en un elemento web.

Selenium es compatible con javaScriptExecutor. No es necesario ningún complemento o complemento adicional. Solo necesita importar ( org.openqa.selenium.JavascriptExecutor ) en el script para usar JavaScriptExecutor.

Métodos JavaScriptExecutor

  1. executeAsyncScript

Con la secuencia de comandos asincrónica, su página se procesa más rápidamente. En lugar de obligar a los usuarios a esperar a que se descargue un script antes de que se procese la página. Esta función ejecutará una pieza asincrónica de JavaScript en el contexto del marco o ventana actualmente seleccionado en Selenium. El JS así ejecutado es de un solo subproceso con varias funciones de devolución de llamada que se ejecutan sincrónicamente.

  1. ejecutar script

Este método ejecuta JavaScript en el contexto del marco o ventana actualmente seleccionado en Selenium. El script utilizado en este método se ejecuta en el cuerpo de una función anónima (una función sin nombre). También podemos pasarle argumentos complicados.

El script puede devolver valores. Los tipos de datos devueltos son

  • Booleano
  • Largo
  • Cuerda
  • Lista
  • WebElement.

La sintaxis básica de JavascriptExecutor se proporciona a continuación:

Sintaxis:

JavascriptExecutor js = (JavascriptExecutor) controlador;js.executeScript (secuencia de comandos, argumentos);
  • Script: este es el JavaScript que debe ejecutarse.
  • Argumentos: son los argumentos del guión. Es opcional.

Ejemplo de executeAsyncScript

El uso de executeAsyncScript ayuda a mejorar el rendimiento de su prueba. Permite escribir una prueba más como una codificación normal.

ExecSync bloquea otras acciones realizadas por el navegador Selenium, pero execAsync no bloquea la acción. Enviará una devolución de llamada a la suite de pruebas del lado del servidor una vez que la secuencia de comandos esté lista. Significa que todo dentro del script será ejecutado por el navegador y no por el servidor.

Ejemplo 1: Realización de una suspensión en el navegador bajo prueba.

En este escenario, usaremos el sitio de demostración "Guru99" para ilustrar executeAsyncScript. En este ejemplo,

  • Inicie el navegador.
  • Sitio abierto "http://demo.guru99.com/V4/".
  • La aplicación espera 5 segundos para realizar una acción adicional.

Paso 1) Capture la hora de inicio antes de esperar 5 segundos (5000 milisegundos) utilizando el método executeAsyncScript ().

Paso 2) Luego, use executeAsyncScript () para esperar 5 segundos.

Paso 3) Luego, obtenga la hora actual.

Paso 4) Restar (hora actual - hora de inicio) = tiempo transcurrido.

Paso 5) Verifique que la salida debería mostrar más de 5000 milisegundos

import java.util.concurrent.TimeUnit;import org.openqa.selenium.JavascriptExecutor;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Pruebainicio de sesión vacío público (){Controlador WebDriver = nuevo FirefoxDriver ();// Creando el objeto de interfaz JavascriptExecutor por Type castingJavascriptExecutor js = (JavascriptExecutor) controlador;// Lanzamiento del sitio.driver.get ("http://demo.guru99.com/V4/");// Maximizar ventanadriver.manage (). window (). maximizar ();// Establezca el tiempo de espera del script en 20 segundosdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Declarar y establecer la hora de iniciotiempo_inicio largo = System.currentTimeMillis ();// Llamar al método executeAsyncScript () para esperar 5 segundosjs.executeAsyncScript ("window.setTimeout (argumentos [argumentos.longitud - 1], 5000);");// Obtiene la diferencia (currentTime - startTime) de tiempos.System.out.println ("Tiempo transcurrido: + (System.currentTimeMillis () - start_time));}}

Resultado: mostró con éxito el tiempo transcurrido durante más de 5 segundos (5000 milisegundos) como se muestra a continuación:

[TestNG] En ejecución:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: WARN No se pudieron encontrar añadidos para el registrador (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Inicialice correctamente el sistema log4j.log4j: WARN Consulte http://logging.apache.org/log4j/1.2/faq.html#noconfig para obtener más información.Tiempo transcurrido: 5022APROBADO: Iniciar sesión=============================================Prueba predeterminadaPruebas ejecutadas: 1, Fallos: 0, Saltos: 0=============================================

Ejemplo de executeScript

Para executeScript, veremos tres ejemplos diferentes uno por uno.

1) Ejemplo: haga clic en un botón para iniciar sesión y generar una ventana de alerta utilizando JavaScriptExecutor.

En este escenario, usaremos el sitio de demostración "Guru99" para ilustrar JavaScriptExecutor. En este ejemplo,

  • Inicie el navegador web
  • abra el sitio "http://demo.guru99.com/V4/" y
  • iniciar sesión con credenciales
  • Mostrar ventana de alerta al iniciar sesión correctamente.
import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;importar org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Pruebainicio de sesión vacío público (){Controlador WebDriver = nuevo FirefoxDriver ();// Creando el objeto de interfaz JavascriptExecutor por Type castingJavascriptExecutor js = (JavascriptExecutor) controlador;// Lanzamiento del sitio.driver.get ("http://demo.guru99.com/V4/");Botón WebElement = driver.findElement (By.name ("btnLogin"));// Iniciar sesión en Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("contraseña")). sendKeys ("amUpenu");// Haga clic en el botón INICIAR SESIÓN usando JavascriptExecutorjs.executeScript ("argumentos [0] .click ();", botón);// Para generar una ventana de alerta usando JavascriptExecutor. Mostrar el mensaje de alertajs.executeScript ("alert ('Bienvenido a Guru99');");}}

Salida: cuando el código se ejecuta correctamente. Tu observaras

  • Haga clic con éxito en el botón de inicio de sesión y el
  • Se mostrará una ventana de alerta (ver imagen a continuación).

2) Ejemplo: Capture datos de Scrape y navegue a diferentes páginas usando JavaScriptExecutor.

Ejecute el siguiente script de selenio. En este ejemplo,

  • Lanzar el sitio
  • Obtenga los detalles del sitio, como la URL del sitio, el nombre del título y el nombre de dominio del sitio.
  • Luego navega a una página diferente.
import org.openqa.selenium.JavascriptExecutor;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Pruebainicio de sesión vacío público (){Controlador WebDriver = nuevo FirefoxDriver ();// Creando el objeto de interfaz JavascriptExecutor por Type castingJavascriptExecutor js = (JavascriptExecutor) controlador;// Lanzamiento del sitio.driver.get ("http://demo.guru99.com/V4/");// Obteniendo el nombre de dominio del sitio. Tostring () cambia el objeto por el nombre.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Nombre de dominio del sitio =" + DomainName);// Obteniendo la URL del sitio. Tostring () cambia el objeto a nombreString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL del sitio =" + url);// El método document.title obtiene el nombre del título del sitio. Tostring () cambia el objeto a nombreString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Título de la página =" + TitleName);// Navegar a una nueva página, es decir, para generar una página de acceso. (lanzar nueva URL)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Resultado: cuando el código anterior se ejecuta correctamente, obtendrá los detalles del sitio y navegará a una página diferente como se muestra a continuación.

[TestNG] En ejecución:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: WARN No se pudieron encontrar añadidos para el registrador (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Inicialice correctamente el sistema log4j.log4j: WARN Consulte http://logging.apache.org/log4j/1.2/faq.html#noconfig para obtener más información.Nombre de dominio del sitio = demo.guru99.comURL del sitio = http://demo.guru99.com/V4/Título de la página = Página de inicio de Guru99 BankAPROBADO: Iniciar sesión=============================================Prueba predeterminadaPruebas ejecutadas: 1, Fallos: 0, Saltos: 0============================================= 

3) Ejemplo: Desplácese hacia abajo con JavaScriptExecutor.

Ejecute el siguiente script de selenio. En este ejemplo,

  • Lanzar el sitio
  • Desplácese 600 píxeles hacia abajo
import org.openqa.selenium.JavascriptExecutor;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;public class JavaSE_Test {@Pruebainicio de sesión vacío público (){Controlador WebDriver = nuevo FirefoxDriver ();// Creando el objeto de interfaz JavascriptExecutor por Type castingJavascriptExecutor js = (JavascriptExecutor) controlador;// Lanzamiento del sitio.driver.get ("http://moneyboats.com/");// Maximizar ventanadriver.manage (). window (). maximizar ();// Desplazamiento vertical hacia abajo 600 píxelesjs.executeScript ("window.scrollBy (0,600)");}}

Salida : cuando se ejecuta el código anterior, se desplazará 600 píxeles hacia abajo (ver imagen a continuación).

Resumen:

JavaScriptExecutor se usa cuando Selenium Webdriver no puede hacer clic en cualquier elemento debido a algún problema.

  • JavaScriptExecutor proporciona dos métodos "executecript" y "executeAsyncScript" para manejar.
  • Ejecutó JavaScript usando Selenium Webdriver.
  • Se ilustró cómo hacer clic en un elemento a través de JavaScriptExecutor, si el selenio no puede hacer clic en el elemento debido a algún problema.
  • Se generó la ventana 'Alerta' usando JavaScriptExecutor.
  • Navegó a la página diferente usando JavaScriptExecutor.
  • Se desplazó hacia abajo en la ventana usando JavaScriptExecutor.
  • URL, título y nombre de dominio obtenidos mediante JavaScriptExecutor.