JavaScriptExecutor in Selenium WebDriver (Esempio)

⚡ Riepilogo intelligente

JavaScriptExecutor in Selenium WebDriver esegue JavaScript da eseguire all'interno del browser quando i localizzatori non sono sufficienti. LessI nostri esempi includono executeScript, executeAsyncScript, scorrimento, clic, avvisi e input di moduli.

  • ⚙️ Risolve i limiti: Bypassa gli elementi nascosti e JavaPagine con molti testi.
  • 🧩 Due metodi: executeScript viene eseguito in modalità sincrona; executeAsyncScript gestisce le operazioni asincrone tramite callback.
  • 📜 scroll: Scorri la finestra, vai alle coordinate o scorri un elemento per visualizzarlo.
  • 🖱️ Clic nascosti: Attiva il clic() sugli elementi che WebDriver non può raggiungere.
  • 📝 Controllo del modulo: Inserisci valori e leggi il testo da elementi complessi.
  • 🤖 Frammenti di intelligenza artificiale: Gli strumenti di intelligenza artificiale generano JavaCodice ScriptExecutor e correzione dei selettori instabili.

JavaScriptExecutor in Selenium

Cosa è JavaScriptExecutor?

JavaScriptExecutor è un'interfaccia che aiuta a eseguire JavaScrittura attraverso Selenium Webdriver. JavaScriptExecutor fornisce due metodi “executescript” e “executeAsyncScript” per eseguire javascript sulla finestra selezionata o sulla pagina corrente.

JavaScriptExecutor

Perché abbiamo bisogno JavaScriptExecutor?

In Selenium Webdriver, localizzatori come XPath, CSS, ecc. vengono utilizzati per identificare ed eseguire operazioni su una pagina web.

Nel caso in cui questi localizzatori non funzionino, puoi utilizzarli JavaScriptExecutor. Puoi usare JavaScriptExecutor per eseguire un'operazione desiderata su un elemento web.

Selenium supporta javaScriptExecutor. Non è necessario alcun plug-in o componente aggiuntivo aggiuntivo. Devi solo importare (org.openqa.selenium.Javascriptesecutore) nello script da utilizzare JavaEsecutore di script.

JavaMetodi ScriptExecutor in Selenium

eseguiScript

Questo metodo viene eseguito JavaCopione nel contesto del frame o della finestra attualmente selezionata Selenium. Lo script utilizzato in questo metodo viene eseguito nel corpo di una funzione anonima (una funzione senza nome). Possiamo anche sottoporgli argomenti complicati.

Lo script può restituire valori. I tipi di dati restituiti sono

  • Booleano
  • Lunghi
  • Corda
  • Lista
  • Elemento Web.

JavascriptSintassi dell'esecutore:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Copione - Questo è il JavaScript che deve essere eseguito.
  • argomenti – Sono gli argomenti della sceneggiatura. È facoltativo.

eseguiAsyncScript

Con Asynchronous script, la tua pagina viene renderizzata più rapidamente. Invece di costringere gli utenti ad attendere che uno script venga scaricato prima che la pagina venga renderizzata. Questa funzione eseguirà un pezzo asincrono di JavaScript nel contesto del frame o della finestra attualmente selezionati in SeleniumIl JS così eseguito è monothread con diverse funzioni di callback che vengono eseguite in modo sincrono.

Come si usa JavaScriptExecutor in Selenium

Ecco una procedura dettagliata su come utilizzare JavaScriptExecutor in Selenium:

Passo 1) Importa il pacchetto.

import org.openqa.selenium.JavascriptExecutor;

Passo 2) Crea un riferimento.

JavascriptExecutor js = (JavascriptExecutor) driver;

Passo 3) Chiama il JavascriptMetodo dell'esecutore.

js.executeScript(script, args);

Esempio di fare clic su un elemento utilizzando JavaScripExecutor nel Selenium

Per eseguireScript, vedremo tre diversi esempi uno per uno.

1) Esempio: fare clic su un pulsante per accedere e generare una finestra di avviso utilizzando JavaEsecutore di script.

In questo scenario, useremo “GuruSito dimostrativo da 99 pollici per illustrare JavaScriptExecutor. In questo esempio,

Fare clic su un pulsante per accedere e generare una finestra di avviso utilizzando JavaScriptExecutor

  • Visualizza la finestra di avviso in caso di accesso riuscito.
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');");   
    		
    }		
}

Produzione: Quando il codice viene eseguito correttamente. Osserverai

  • Fare clic con successo sul pulsante di accesso e sul
  • Verrà visualizzata la finestra di avviso (vedere l'immagine sotto).

Fare clic su un pulsante per accedere e generare una finestra di avviso utilizzando JavaScriptExecutor

2) Esempio: acquisire dati di raschiamento e spostarsi in pagine diverse utilizzando JavaEsecutore di script.

Esegui lo script di selenio seguente. In questo esempio,

  • Avvia il sito
  • Recupera i dettagli del sito come URL del sito, titolo e nome di dominio del sito.
  • Quindi vai a una pagina diversa.
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/'");			
    }		
}

Produzione: Una volta eseguito correttamente il codice sopra, verranno recuperati i dettagli del sito e si passerà a una pagina diversa, come mostrato di seguito.

Acquisisci dati di raschiatura e passa a pagine diverse utilizzando JavaScriptExecutor

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

Acquisisci dati di raschiatura e passa a pagine diverse utilizzando JavaScriptExecutor

3) Esempio: scorrere verso il basso utilizzando JavaEsecutore di script.

Esegui lo script di selenio seguente. In questo esempio,

  • Avvia il sito
  • Scorri verso il basso di 600 pixel
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)");			
    }		
}

Uscita: Quando viene eseguito il codice precedente, scorrerà verso il basso di 600 pixel (vedi immagine sotto).

Scorri verso il basso utilizzando JavaScriptExecutor

Esempio di executeAsyncScript in Selenium

Utilizzando executeAsyncScript, puoi migliorare le prestazioni del tuo test. Permette di scrivere il test in modo più simile a una normale codifica.

il dirigenteSync blocca ulteriori azioni eseguite da Selenium browser ma execAsync non blocca l'azione. Invierà un callback al server-side Collaudo suite una volta terminato lo script. Significa che tutto all'interno dello script verrà eseguito dal browser e non dal server.

Esempio 1: esecuzione di una sospensione nel browser in prova.

In questo scenario, useremo “GuruSito demo da 99” per illustrare executeAsyncScript. In questo esempio,

Passo 1) Cattura l'ora di inizio prima di attendere 5 secondi (5000 millisecondi) utilizzando il metodo executeAsyncScript().

Passo 2) Quindi, utilizzare executeAsyncScript() per attendere 5 secondi.

Passo 3) Quindi, ottieni l'ora corrente.

Passo 4) Subtract (tempo attuale – tempo di inizio) = tempo trascorso.

Passo 5) Verificare che l'output dovrebbe essere visualizzato più di 5000 millisecondi

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

Produzione: Visualizzato correttamente il tempo trascorso per più di 5 secondi (5000 millisecondi) come mostrato di seguito:

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

DOMANDE FREQUENTI

Quando i localizzatori falliscono, per gli elementi nascosti, lo scorrimento o l'accesso al DOM WebDriver non li espone.

Sì. Copilot genera frammenti di codice, suggerisce modelli di scorrimento e corregge i test instabili.

Sì. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Testim e i selettori di auto-guarigione Mabl e aggiungi JavaOpzioni di ripiego dello script.

executeScript è sincrono. executeAsyncScript viene completato tramite callback per il codice asincrono.

Chiama js.executeScript(“arguments[0].scrollIntoView(true);”, element).

Utilizzalo solo quando i comandi di WebDriver falliscono o è necessaria la manipolazione del DOM.

No. Può sovrascrivere window.alert prima di essere attivato. Utilizza l'API Alert per le finestre di dialogo native.

Esegui il cast del risultato di executeScript, ad esempio String t = (String) js.executeScript("return document.title;");.

Riassumi questo post con: