JavaScriptExecutor em Selenium com exemplo

O que é o 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 o site de demonstração “Guru99” 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 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 Ensaios 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á

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.

Saiba Mais Leia mais