JavaScriptExecutor en Selenium con ejemplo

¿Qué es JavaScriptExecutor?

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

Ejecutor JavaScript

¿Por qué necesitamos JavaScriptExecutor?

In Selenium Webdriver, 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 lo que desee operación en un elemento web.

Selenium admite javaScriptExecutor. No es necesario ningún complemento o complemento adicional. Solo necesitas importar (org.openqa.selenium.JavascriptEjecutor) en el script para usar JavaScriptExecutor.

Métodos JavaScriptExecutor en Selenium

ejecutar script

Este método se 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

  • Boolean
  • Largo
  • Cordón
  • Lista
  • elemento web.

Sintaxis de JavascriptExecutor:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Guión – Este es el JavaScript que debe ejecutarse.
  • Argumentos – Son los argumentos del guión. Es opcional.

ejecutarAsyncGuión

Con unsyncscript cronoso, su página se representa más rápidamente. En lugar de obligar a los usuarios a esperar a que se descargue un script antes de que se muestre la página. Esta función ejecutará unsyncpieza cronosa 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 synccronosamente.

Cómo utilizar JavaScriptExecutor en Selenium

Aquí hay un proceso paso a paso sobre cómo usar JavaScriptExecutor en Selenium:

Paso 1) Importa el paquete.

import org.openqa.selenium.JavascriptExecutor;

Paso 2) Crea una referencia.

JavascriptExecutor js = (JavascriptExecutor) driver;

Paso 3) Llame al método JavascriptExecutor.

js.executeScript(script, args);

Ejemplo de hacer clic en un elemento usando JavaScripExecutor en Selenium

Para ejecutarScript, 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 usando JavaScriptExecutor.

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

Haga clic en un botón para iniciar sesión y generar una ventana de alerta usando JavaScriptExecutor

  • Muestra una ventana de alerta al iniciar sesión correctamente.
import org.openqa.selenium.By;		
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.WebElement;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				


    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
        		
        WebElement button =driver.findElement(By.name("btnLogin"));			
        		
        //Login to Guru99 		
        driver.findElement(By.name("uid")).sendKeys("mngr34926");					
        driver.findElement(By.name("password")).sendKeys("amUpenu");					
        		
        //Perform Click on LOGIN button using JavascriptExecutor		
        js.executeScript("arguments[0].click();", button);
                                
        //To generate Alert window using JavascriptExecutor. Display the alert message 			
        js.executeScript("alert('Welcome to Guru99');");   
    		
    }		
}

Salida: Cuando el código se ejecuta con éxito. observarás

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

Haga clic en un botón para iniciar sesión y generar una ventana de alerta usando JavaScriptExecutor

2) Ejemplo: capturar datos raspados y navegar a diferentes páginas usando JavaScriptExecutor.

Ejecute lo siguiente selenium guion. En este ejemplo,

  • Lanzar el sitio
  • Trae el details del sitio como URL del sitio, nombre del título y nombre de dominio del sitio.
  • Luego navegue a una página diferente.
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");
			
        //Fetching the Domain Name of the site. Tostring() change object to name.		
        String DomainName = js.executeScript("return document.domain;").toString();			
        System.out.println("Domain name of the site = "+DomainName);					
          		
        //Fetching the URL of the site. Tostring() change object to name		
        String url = js.executeScript("return document.URL;").toString();			
        System.out.println("URL of the site = "+url);					
          		
       //Method document.title fetch the Title name of the site. Tostring() change object to name		
       String TitleName = js.executeScript("return document.title;").toString();			
       System.out.println("Title of the page = "+TitleName);					

        		
      //Navigate to new Page i.e to generate access page. (launch new url)		
      js.executeScript("window.location = 'https://demo.guru99.com/'");			
    }		
}

Salida: Cuando el código anterior se ejecuta correctamente, recuperará el archivo details del sitio y navegue a una página diferente como se muestra a continuación.

Capture datos extraídos y navegue a diferentes páginas utilizando JavaScriptExecutor

[TestNG] Running:		
  C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-467151014\testng-customsuite.xml		

log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Domain name of the site = demo.guru99.com		
URL of the site = https://demo.guru99.com/V4/		
Title of the page = Guru99 Bank Home Page		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0
===============================================

Capture datos extraídos y navegue a diferentes páginas utilizando JavaScriptExecutor

3) Ejemplo: desplácese hacia abajo usando JavaScriptExecutor.

Ejecute lo siguiente selenium guion. En este ejemplo,

  • Lanzar el sitio
  • Desplácese hacia abajo 600 píxeles
import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        WebDriver driver= new FirefoxDriver();			
        		
        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("http://moneyboats.com/");			
     
        //Maximize window		
        driver.manage().window().maximize();		
        		
        //Vertical scroll down by 600  pixels		
        js.executeScript("window.scrollBy(0,600)");			
    }		
}

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

Desplácese hacia abajo usando JavaScriptExecutor

Ejemplo de ejecutarAsyncGuión en Selenium

Usando la ejecuciónAsyncScript, ayuda a mejorar el rendimiento de su prueba. Permite escribir pruebas más como una codificación normal.

El execSync bloquea acciones adicionales realizadas por el Selenium navegador pero ejecutivosync no bloquea la acción. Enviará una devolución de llamada al lado del servidor. Pruebas suite una vez que el guión esté terminado. Significa que todo lo que esté dentro del script será ejecutado por el navegador y no por el servidor.

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

En este escenario, usaremos el sitio de demostración "Guru99" para ilustrar la ejecución.syncGuion. En este ejemplo, usted

Paso 1) Capture la hora de inicio antes de esperar 5 segundos (5000 milisegundos) utilizando ejecutarAsyncMétodo script().

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

Paso 3) Luego, obtenga la hora actual.

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

Paso 5) Verifique el resultado; debería mostrar más de 5000 milisegundos

import java.util.concurrent.TimeUnit;		

import org.openqa.selenium.JavascriptExecutor;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.annotations.Test;		
    		
public class JavaSE_Test {				

    @Test		
    public void Login() 					
    {		
        		
        WebDriver driver= new FirefoxDriver();			

        //Creating the JavascriptExecutor interface object by Type casting		
        JavascriptExecutor js = (JavascriptExecutor)driver;		
        		
        //Launching the Site.		
        driver.get("https://demo.guru99.com/V4/");			
     
          //Maximize window		
          driver.manage().window().maximize();		
        		
          //Set the Script Timeout to 20 seconds		
          driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS);			
             
          //Declare and set the start time		
          long start_time = System.currentTimeMillis();			
                   
          //Call executeAsyncScript() method to wait for 5 seconds		
          js.executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 5000);");			
          		
         //Get the difference (currentTime - startTime)  of times.		
         System.out.println("Passed time: " + (System.currentTimeMillis() - start_time));					
                    		
    }		
}			

Salida: Desplegar con éxitoyed el tiempo transcurrido es más de 5 segundos (5000 milisegundos) como se muestra a continuación:

[TestNG] Running:		
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-387352559\testng-customsuite.xml		
log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies).		
log4j:WARN Please initialize the log4j system properly.		
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.		
Passed time: 5022		
PASSED: Login		

===============================================		
    Default test		
    Tests run: 1, Failures: 0, Skips: 0		
===============================================

Resumen

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

  • JavaScriptExecutor proporciona dos métodos "executescript" y "executeAsyncGuión” para manejar.
  • Ejecutó el JavaScript usando Selenium Controlador web.
  • Se ilustra cómo hacer clic en un elemento a través de JavaScriptExecutor, si selenium no puede hacer clic en el elemento debido a algún problema.
  • 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.