JavaScriptExecutor in Selenium WebDriver con esempio

Sommario:

Anonim

Cos'è JavaScriptExecutor?

JavaScriptExecutor è un'interfaccia che aiuta a eseguire JavaScript tramite Selenium Webdriver. JavaScriptExecutor fornisce due metodi "executescript" e "executeAsyncScript" per eseguire javascript nella finestra selezionata o nella pagina corrente.

In questo tutorial imparerai:

  • Cos'è JavaScriptExecutor?
  • Perché abbiamo bisogno di JavaScriptExecutor?
  • Metodi JavaScriptExecutor
  • Esempio di executeAsyncScript
    • Esempio 1: esecuzione di una sospensione nel browser sottoposto a test.
  • Esempio di executeScript
    • 1) Esempio: fare clic su un pulsante per accedere e generare la finestra di avviso
    • 2) Esempio: acquisire i dati di scrap e passare a pagine diverse
    • 3) Esempio: scorrere verso il basso utilizzando

Perché abbiamo bisogno di 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 utilizzare JavaScriptExecutor. È possibile utilizzare JavaScriptExecutor per eseguire un'operazione desiderata su un elemento web.

Selenium supporta javaScriptExecutor. Non è necessario un plug-in o un componente aggiuntivo aggiuntivo. Devi solo importare ( org.openqa.selenium.JavascriptExecutor ) nello script per utilizzare JavaScriptExecutor.

Metodi JavaScriptExecutor

  1. executeAsyncScript

Con lo script asincrono, il rendering della pagina viene eseguito più rapidamente. Invece di costringere gli utenti ad attendere il download di uno script prima del rendering della pagina. Questa funzione eseguirà una parte asincrona di JavaScript nel contesto del frame o della finestra attualmente selezionati in Selenium. Il JS così eseguito è a thread singolo con una diversa funzione di callback che viene eseguita in modo sincrono.

  1. executeScript

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

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

  • Booleano
  • Lungo
  • Corda
  • Elenco
  • WebElement.

Di seguito viene fornita la sintassi di base per JavascriptExecutor:

Sintassi:

JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript (Script, Arguments);
  • Script: questo è il JavaScript che deve essere eseguito.
  • Argomenti: sono gli argomenti dello script. È opzionale.

Esempio di executeAsyncScript

L'uso di executeAsyncScript aiuta a migliorare le prestazioni del test. Permette di scrivere test più come una normale codifica.

ExecSync blocca ulteriori azioni eseguite dal browser Selenium ma execAsync non blocca l'azione. Una volta terminato lo script, invierà una richiamata alla suite di test lato server. Significa che tutto all'interno dello script verrà eseguito dal browser e non dal server.

Esempio 1: esecuzione di una sospensione nel browser sottoposto a test.

In questo scenario, utilizzeremo il sito demo "Guru99" per illustrare executeAsyncScript. In questo esempio, lo farai

  • Avvia il browser.
  • Apri il sito "http://demo.guru99.com/V4/".
  • L'applicazione attende 5 secondi per eseguire un'ulteriore azione.

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

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

Passaggio 3) Quindi, ottenere l'ora corrente.

Passaggio 4) Sottrai (ora corrente - ora di inizio) = tempo trascorso.

Passaggio 5) Verificare che l'output dovrebbe visualizzare 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;classe pubblica JavaSE_Test {@Testpublic void Login (){Driver WebDriver = nuovo FirefoxDriver ();// Creazione dell'oggetto dell'interfaccia JavascriptExecutor tramite il casting del tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Avvio del sito.driver.get ("http://demo.guru99.com/V4/");// Ingrandisci la finestradriver.manage (). window (). maxim ();// Imposta il timeout dello script su 20 secondidriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Dichiara e imposta l'ora di iniziostart_time lungo = System.currentTimeMillis ();// Chiama il metodo executeAsyncScript () per attendere 5 secondijs.executeAsyncScript ("window.setTimeout (arguments [arguments.length - 1], 5000);");// Ottieni la differenza (currentTime - startTime) di volte.System.out.println ("Tempo trascorso: + (System.currentTimeMillis () - start_time));}}

Output: visualizzato correttamente il tempo trascorso più di 5 secondi (5000 millisecondi) come mostrato di seguito:

[TestNG] In esecuzione:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customuite.xmllog4j: WARN Impossibile trovare appendici per logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Si prega di inizializzare correttamente il sistema log4j.log4j: WARN Vedi http://logging.apache.org/log4j/1.2/faq.html#noconfig per maggiori informazioni.Tempo trascorso: 5022SUPERATO: Accedi===============================================Test predefinitoTest eseguiti: 1, Errori: 0, Salti: 0===============================================

Esempio di executeScript

Per executeScript, vedremo tre diversi esempi uno per uno.

1) Esempio: fare clic su un pulsante per accedere e generare la finestra di avviso utilizzando JavaScriptExecutor.

In questo scenario, utilizzeremo il sito demo "Guru99" per illustrare JavaScriptExecutor. In questo esempio,

  • Avvia il browser web
  • apri il sito "http://demo.guru99.com/V4/" e
  • accedi con le credenziali
  • 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;classe pubblica JavaSE_Test {@Testpublic void Login (){Driver WebDriver = nuovo FirefoxDriver ();// Creazione dell'oggetto dell'interfaccia JavascriptExecutor tramite il casting del tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Avvio del sito.driver.get ("http://demo.guru99.com/V4/");Pulsante WebElement = driver.findElement (By.name ("btnLogin"));// Accedi a Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("password")). sendKeys ("amUpenu");// Esegui Fare clic sul pulsante LOGIN utilizzando JavascriptExecutorjs.executeScript ("argomenti [0] .click ();", pulsante);// Per generare la finestra di avviso utilizzando JavascriptExecutor. Visualizza il messaggio di avvisojs.executeScript ("alert ('Welcome to Guru99');");}}

Output: quando il codice viene eseguito correttamente. Osserverai

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

2) Esempio: acquisire i dati di scrap e navigare in pagine diverse utilizzando JavaScriptExecutor.

Esegui lo script di selenio riportato di seguito. In questo esempio,

  • Avvia il sito
  • Recupera i dettagli del sito come l'URL del sito, il nome del titolo e il 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;classe pubblica JavaSE_Test {@Testpublic void Login (){Driver WebDriver = nuovo FirefoxDriver ();// Creazione dell'oggetto dell'interfaccia JavascriptExecutor tramite il casting del tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Avvio del sito.driver.get ("http://demo.guru99.com/V4/");// Recupero del nome di dominio del sito. Tostring () cambia oggetto in nome.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Nome di dominio del sito =" + DomainName);// Recupero dell'URL del sito. Tostring () cambia oggetto in nomeStringa url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL del sito =" + url);// Il metodo document.title recupera il nome del titolo del sito. Tostring () cambia oggetto in nomeString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Titolo della pagina =" + TitleName);// Passa alla nuova pagina, ovvero per generare la pagina di accesso. (lancia nuovo URL)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Output: quando il codice sopra viene eseguito correttamente, recupererà i dettagli del sito e passerà a una pagina diversa come mostrato di seguito.

[TestNG] In esecuzione:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customuite.xmllog4j: WARN Impossibile trovare appendici per logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Si prega di inizializzare correttamente il sistema log4j.log4j: WARN Vedi http://logging.apache.org/log4j/1.2/faq.html#noconfig per maggiori informazioni.Nome di dominio del sito = demo.guru99.comURL del sito = http://demo.guru99.com/V4/Titolo della pagina = Home Page di Guru99 BankSUPERATO: Accedi===============================================Test predefinitoTest eseguiti: 1, Errori: 0, Salti: 0=============================================== 

3) Esempio: scorrere verso il basso utilizzando JavaScriptExecutor.

Esegui lo script di selenio riportato di seguito. 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;classe pubblica JavaSE_Test {@Testpublic void Login (){Driver WebDriver = nuovo FirefoxDriver ();// Creazione dell'oggetto dell'interfaccia JavascriptExecutor tramite il casting del tipoJavascriptExecutor js = (JavascriptExecutor) driver;// Avvio del sito.driver.get ("http://moneyboats.com/");// Ingrandisci la finestradriver.manage (). window (). maxim ();// Scorrimento verticale verso il basso di 600 pixeljs.executeScript ("window.scrollBy (0,600)");}}

Output : quando viene eseguito il codice sopra, scorrerà verso il basso di 600 pixel (vedi immagine sotto).

Sommario:

JavaScriptExecutor viene utilizzato quando Selenium Webdriver non riesce a fare clic su qualsiasi elemento a causa di qualche problema.

  • JavaScriptExecutor fornisce due metodi "executescript" e "executeAsyncScript" da gestire.
  • Eseguito JavaScript utilizzando Selenium Webdriver.
  • Illustrato come fare clic su un elemento tramite JavaScriptExecutor, se il selenio non riesce a fare clic su un elemento a causa di qualche problema.
  • Generata la finestra "Avviso" utilizzando JavaScriptExecutor.
  • Navigato alla pagina diversa utilizzando JavaScriptExecutor.
  • Scorri la finestra verso il basso utilizzando JavaScriptExecutor.
  • URL, titolo e nome di dominio recuperati utilizzando JavaScriptExecutor.