JavaScriptExecutor em Selenium WebDriver (Exemplo)

⚡ Resumo Inteligente

JavaScriptExecutor em Selenium O WebDriver é executado. JavaScript dentro do navegador para quando os localizadores falharem. LessOs exemplos abrangem executeScript, executeAsyncScript, rolagem, clique, alertas e entrada de formulário.

  • ⚙️ Resolve limites: Ignora elementos ocultos e JavaPáginas com muito texto.
  • 🧩 Dois métodos: executeScript executa operações síncronas; executeAsyncScript lida com operações assíncronas por meio de um retorno de chamada.
  • 📜 Rolagem: A janela pode ser rolada, permite ir para as coordenadas ou exibir um elemento rolando a tela.
  • 🖱️ Cliques ocultos: Disparar click() em elementos que o WebDriver não consegue alcançar.
  • 📝 Controle de formulário: Injetar valores e ler texto de elementos complexos.
  • 🤖 Trechos de IA: Ferramentas de IA geram JavaCorrigir o código do ScriptExecutor e os seletores instáveis.

JavaScriptExecutor em Selenium

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.

JavaExecutor de script

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 “GuruSite de demonstração de 99” para ilustrar JavaScriptExecutor. Neste exemplo,

Clique em um botão para fazer login e gerar janela de alerta usando JavaExecutor de script

  • 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).

Clique em um botão para fazer login e gerar janela de alerta usando JavaExecutor de script

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 por exemplo... 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.

Capture dados de raspagem e navegue para páginas diferentes usando JavaExecutor de script

[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 dados de raspagem e navegue para páginas diferentes usando JavaExecutor de script

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).

Role para baixo usando JavaExecutor de script

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 “GuruSite de demonstração de 99” para ilustrar o executeAsyncScript. Neste exemplo, você irá

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) Subtract (hora atual – hora inicial) = tempo decorrido.

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		
===============================================

Perguntas Frequentes

Quando os localizadores falham, seja para elementos ocultos, rolagem ou acesso ao DOM, o WebDriver não os expõe.

Sim. O Copilot gera trechos de código, sugere padrões de rolagem e refatora testes instáveis.

Sim. Travas deslizantes portáteis Testim e seletores de auto-recuperação Mabl e adicionar JavaScripts de contingência.

executeScript é síncrono. executeAsyncScript é concluído por meio de um retorno de chamada para código assíncrono.

Chame js.executeScript(“arguments[0].scrollIntoView(true);”, elemento).

Utilize-o somente quando os comandos do WebDriver falharem ou quando for necessária a manipulação do DOM.

Não. Ele pode sobrescrever o evento `window.alert` antes de ser acionado. Use a API de alertas para diálogos nativos.

Converta o resultado do executeScript, por exemplo, String t = (String) js.executeScript(“return document.title;”);.

Resuma esta postagem com: