Saltar al contenido

JavaScriptExecutor y Selenium WebDriver con ejemplo

¿Qué es JavaScriptExecutor?

JavaScriptExecutor es una interfaz que ayuda con la ejecución 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á:

¿Por qué necesitamos JavaScriptExecutor?

En Selenium Webdriver, se utilizan buscadores como XPath, CSS, etc. Identificar y realizar operaciones de páginas web.

En caso de que estos buscadores 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 enchufe o enchufe adicional. Todo lo que necesita hacer es importar (org.openqa.selenium.JavascriptExecutor) en el script para usar JavaScriptExecutor.

Métodos JavaScriptExecutor

  1. executeAsyncScript

Con el script asincrónico, hace que su página sea más rápida. En lugar de obligar a los usuarios a esperar a que se descargue un script antes de que lo haga 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 función de recuperación múltiple que se ejecuta 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 (función anónima). También podemos presentarle argumentos complejos.

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

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

Sintaxis:


JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);

Ejemplo de executeAsyncScript

Al utilizar executeAsyncScript, ayuda a mejorar el rendimiento de su prueba. Permite una prueba de escritura más parecida a la codificación normal.

ExecSync bloquea las acciones adicionales que realiza el navegador Selenium, pero execAsync no bloquea la acción. Enviará una llamada al servidor. Prueba ubicado cuando el script está terminado. Significa que el navegador y no el servidor ejecutará todo dentro del script.

Ejemplo 1: Dormir en el navegador que se está probando.

En este caso, usaremos el sitio de demostración «Guru99» para mostrar executeAsyncScript. En este ejemplo,

Paso 1) Tome el tiempo de inicio antes de esperar 5 segundos (5000 milisegundos) usando el método executeAsyncScript ().

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

Paso 3) Luego encuentre la hora actual.

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

Paso 5) Verifique que la salida debe ser superior a 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("http://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));					
                    		
    }		
}			

Producción: Se ha demostrado que el tiempo de ejecución es de más de 5 segundos (5000 milisegundos) como se muestra a continuación:

[TestNG] Running:		
C:UsersgauravnAppDataLocalTemptestng-eclipse-387352559testng-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		
===============================================

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 alertas utilizando JavaScriptExecutor.

En este caso, usaremos el sitio de demostración «Guru99» para mostrar JavaScriptExecutor. En este ejemplo,


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("http://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');");   
    		
    }		
}

Producción: Cuando el código se ejecuta con éxito. Tu miras

2) Ejemplo: Raspe la captura de datos y navegue a varias páginas usando JavaScriptExecutor.

Ejecute el script de selenio a continuación. En este ejemplo,


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://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 = 'http://demo.guru99.com/'");			
    }		
}

Producción: Tras la ejecución exitosa del código anterior, obtendrá los detalles del sitio e irá a una página diferente como se muestra a continuación.

[TestNG] Running:		
  C:UsersgauravnAppDataLocalTemptestng-eclipse-467151014testng-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 = http://demo.guru99.com/V4/		
Title of the page = Guru99 Bank Home Page		
PASSED: Login		

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

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

Ejecute el script de selenio a continuación. En este ejemplo,


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)");			
    }		
}

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

Resumen:

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