JavaScriptExecutor em Selenium com exemplo
O que รฉ a JavaExecutor de script?
JavaScriptExecutor รฉ uma interface que ajuda a executar JavaRoteiro atravรฉs de Selenium Driver da Web. JavaScriptExecutor fornece dois mรฉtodos โexecutescriptโ e โexecuteAsyncScriptโ para executar javascript na janela selecionada ou na pรกgina atual.
Por que precisamos JavaExecutor de script?
In Selenium Webdriver, localizadores como XPath, CSS, etc. sรฃo usados โโpara identificar e realizar operaรงรตes em uma pรกgina da web.
Caso esses localizadores nรฃo funcionem, vocรช pode usar JavaScriptExecutor. Vocรช pode usar JavaScriptExecutor para executar uma operaรงรฃo desejada em um elemento da web.
Selenium suporta javaScriptExecutor. Nรฃo hรก necessidade de um plugin ou complemento extra. Vocรช sรณ precisa importar (org.openqa.selenium.JavascriptExecutor) no script para usar JavaExecutor de script.
JavaMรฉtodos ScriptExecutor em Selenium
executeScript
Este mรฉtodo executa JavaScript no contexto do quadro ou janela atualmente selecionado em Selenium. O script usado neste mรฉtodo รฉ executado no corpo de uma funรงรฃo anรดnima (uma funรงรฃo sem nome). Tambรฉm podemos passar argumentos complicados para ele.
O script pode retornar valores. Os tipos de dados retornados sรฃo
- Booleano
- longo
- Tanga
- Lista
- Elemento Web.
JavascriptSintaxe do executor:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Script - Isto รฉ o JavaScript que precisa ser executado.
- Argumentos โ Sรฃo os argumentos do roteiro. ร opcional.
executeAsyncScript
Com o script assรญncrono, sua pรกgina รฉ renderizada mais rapidamente. Em vez de forรงar os usuรกrios a esperar o download de um script antes que a pรกgina seja renderizada. Esta funรงรฃo executarรก uma parte assรญncrona de JavaScript no contexto do quadro ou janela atualmente selecionado em Selenium. O JS executado dessa forma รฉ de thread รบnico com vรกrias funรงรตes de retorno de chamada que sรฃo executadas de forma sรญncrona.
Como usar JavaScriptExecutor em Selenium
Aqui estรก um processo passo a passo sobre como usar JavaScriptExecutor em Selenium:
Passo 1) Importe o pacote.
import org.openqa.selenium.JavascriptExecutor;
Passo 2) Crie uma referรชncia.
JavascriptExecutor js = (JavascriptExecutor) driver;
Passo 3) Ligue para o JavascriptMรฉtodo executor.
js.executeScript(script, args);
Exemplo de clicar em um elemento usando JavaScriptExecutor em Selenium
Para executeScript, veremos trรชs exemplos diferentes, um por um.
1) Exemplo: Clique em um botรฃo para fazer login e gerar a janela de Alerta usando JavaExecutor de script.
Neste cenรกrio, usaremos o site de demonstraรงรฃo โGuru99โ para ilustrar JavaScriptExecutor. Neste exemplo,
- Inicie o navegador da web
- abra o site https://demo.guru99.com/V4/ e
- login com credenciais
- Exibir janela de alerta em caso de login bem-sucedido.
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');");
}
}
Saรญda: Quando o cรณdigo รฉ executado com sucesso. Vocรช vai observar
- Clique com sucesso no botรฃo de login e no
- A janela de alerta serรก exibida (veja imagem abaixo).
2) Exemplo: capture dados de raspagem e navegue para pรกginas diferentes usando JavaExecutor de script.
Execute o script Selenium abaixo. Neste exemplo,
- Lanรงar o site
- Obtenha os detalhes do site, como URL do site, nome do tรญtulo e nome de domรญnio do site.
- Em seguida, navegue para uma 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/'");
}
}
Saรญda: Quando o cรณdigo acima for executado com sucesso, ele irรก buscar os detalhes do site e navegar para uma pรกgina diferente conforme mostrado abaixo.
[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) Exemplo: Role para baixo usando JavaExecutor de script.
Execute o script Selenium abaixo. Neste exemplo,
- Lanรงar o site
- Role para baixo em 600 pixels
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)");
}
}
saรญda: Quando o cรณdigo acima for executado, ele rolarรก 600 pixels para baixo (veja a imagem abaixo).
Exemplo de executeAsyncScript em Selenium
Usar o executeAsyncScript ajuda a melhorar o desempenho do seu teste. Ele permite escrever testes mais como uma codificaรงรฃo normal.
O executivoSync bloqueia outras aรงรตes executadas pelo Selenium navegador, mas execAsync nรฃo bloqueia a aรงรฃo. Ele enviarรก um retorno de chamada para o servidor Testes suรญte assim que o script estiver concluรญdo. Isso significa que tudo dentro do script serรก executado pelo navegador e nรฃo pelo servidor.
Exemplo 1: Realizando um sleep no navegador em teste.
Neste cenรกrio, usaremos o site de demonstraรงรฃo โGuru99โ para ilustrar o executeAsyncScript. Neste exemplo, vocรช irรก
- Inicie o navegador.
- Abrir site https://demo.guru99.com/V4/.
- O aplicativo aguarda 5 segundos para executar outra aรงรฃo.
Passo 1) Capture a hora de inรญcio antes de esperar 5 segundos (5000 milissegundos) usando o mรฉtodo executeAsyncScript().
Passo 2) Em seguida, use executeAsyncScript() para aguardar 5 segundos.
Passo 3) Entรฃo, obtenha a hora atual.
Passo 4) Subtrair (hora atual โ hora de inรญcio) = tempo passado.
Passo 5) Verifique a saรญda, ela deve exibir mais de 5000 milissegundos
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));
}
}
Saรญda: Exibido com sucesso o tempo decorrido em mais de 5 segundos (5000 milissegundos), conforme mostrado abaixo:
[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
===============================================
Resumo
JavaScriptExecutor รฉ usado quando Selenium O Webdriver nรฃo consegue clicar em nenhum elemento devido a algum problema.
- JavaScriptExecutor fornece dois mรฉtodos โexecutescriptโ e โexecuteAsyncScriptโ para manipular.
- Executou o JavaScript usando Selenium Driver da Web.
- Ilustrou como clicar em um elemento atravรฉs JavaScriptExecutor, se o Selenium nรฃo clicar no elemento devido a algum problema.
- Gerou a janela 'Alerta' usando JavaExecutor de script.
- Navegou para a pรกgina diferente usando JavaExecutor de script.
- Rolei a janela para baixo usando JavaExecutor de script.
- URL, tรญtulo e nome de domรญnio obtidos usando JavaExecutor de script.






