JavaScriptExecutor en Selenium con ejemplo
ยฟQuรฉ es JavaยฟEjecutor de scripts?
JavaScriptExecutor es una interfaz que ayuda a ejecutar JavaGuiรณn 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.
Por quรฉ necesitamos JavaยฟEjecutor de scripts?
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, puedes utilizarlos. JavaScriptExecutor. Puedes utilizar JavaScriptExecutor para realizar una operaciรณn deseada 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 como para usar JavaEjecutor de scripts.
JavaMรฉtodos ScriptExecutor 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.
JavascriptSintaxis del ejecutor:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Script - Esta es la JavaScript que necesita ejecutarse.
- Argumentos โ Son los argumentos del guiรณn. Es opcional.
ejecutarAsyncScript
Con el script asincrรณnico, 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รก un fragmento asincrรณnico de JavaScript en el contexto del marco o ventana actualmente seleccionado en SeleniumEl JS asรญ ejecutado es de un solo subproceso con varias funciones de devoluciรณn de llamada que se ejecutan sincrรณnicamente.
ยฟCรณmo Usar? 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) Llama a el JavascriptMรฉtodo ejecutor.
js.executeScript(script, args);
Ejemplo de hacer clic en un elemento usando JavaScriptExecutor 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 JavaEjecutor de scripts.
En este escenario, usaremos el sitio de demostraciรณn โGuru99โ para ilustrar JavaScriptExecutor. En este ejemplo,
- Inicie el navegador web
- abre el sitio https://demo.guru99.com/V4/ y
- iniciar sesiรณn con credenciales
- 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รก una ventana de alerta (ver imagen a continuaciรณn).
2) Ejemplo: capturar datos de scrape y navegar a diferentes pรกginas usando JavaEjecutor de scripts.
Ejecute el siguiente script de Selenium. 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 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, obtendrรก los detalles del sitio y navegarรก a una pรกgina diferente como se muestra a continuaciรณn.
[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
===============================================
3) Ejemplo: Desplรกcese hacia abajo usando JavaEjecutor de scripts.
Ejecute el siguiente script de Selenium. 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).
Ejemplo de ejecutarAsyncScript en Selenium
El uso de ExecuteAsyncScript ayuda a mejorar el rendimiento de la prueba. Permite escribir la prueba de forma mรกs parecida a un cรณdigo normal.
El execSync bloquea acciones adicionales realizadas por el Selenium navegador, pero execAsync 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, utilizaremos el sitio de demostraciรณn โGuru99โ para ilustrar el mรฉtodo de ejecuciรณn de AsyncScript. En este ejemplo,
- Inicia el navegador.
- Sitio abierto https://demo.guru99.com/V4/.
- La aplicaciรณn espera 5 segundos para realizar otra acciรณn.
Paso 1) Capture la hora de inicio antes de esperar 5 segundos (5000 milisegundos) utilizando el mรฉtodoexecuteAsyncScript().
Paso 2) Luego, useexecuteAsyncScript() 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: Se mostrรณ con รฉxito el tiempo transcurrido 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 โexecuteAsyncScriptโ para su manejo.
- 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 JavaEjecutor de scripts.
- Navegรณ a la pรกgina diferente usando JavaEjecutor de scripts.
- Se desplazรณ hacia abajo en la ventana usando JavaEjecutor de scripts.
- URL, tรญtulo y nombre de dominio obtenidos utilizando JavaEjecutor de scripts.






