JavaScriptExecutor in Selenium mit Beispiel

Was ist JavaSkriptExecutor?

JavaScriptExecutor ist eine Schnittstelle, die bei der Ausführung hilft JavaSkript durch Selenium Webtreiber. JavaScriptExecutor bietet zwei Methoden „executescript“ und „executeAsyncScript“, um JavaScript im ausgewählten Fenster oder auf der aktuellen Seite auszuführen.

JavaSkriptExecutor

Warum brauchen wir JavaSkriptExecutor?

In Selenium Webdriver und Locators wie XPath, CSS usw. werden verwendet, um eine Webseite zu identifizieren und Vorgänge darauf auszuführen.

Falls diese Locators nicht funktionieren, können Sie verwenden JavaScriptExecutor. Sie können verwenden JavaScriptExecutor zum Ausführen einer gewünschten Operation an einem Webelement.

Selenium unterstützt javaScriptExecutor. Es ist kein zusätzliches Plugin oder Add-on erforderlich. Sie müssen nur importieren (org.openqa.selenium.JavascriptTestamentsvollstrecker) im Skript als JavaSkriptExecutor.

JavaScriptExecutor-Methoden in Selenium

Skript ausführen

Diese Methode wird ausgeführt JavaSkript im Kontext des aktuell ausgewählten Rahmens oder Fensters in Selenium. Das in dieser Methode verwendete Skript wird im Hauptteil einer anonymen Funktion (einer Funktion ohne Namen) ausgeführt. Wir können ihm auch komplizierte Argumente übergeben.

Das Skript kann Werte zurückgeben. Die zurückgegebenen Datentypen sind

  • Boolean
  • lang
  • Schnur
  • Liste
  • WebElement.

JavascriptExecutor-Syntax:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Skript - Dies ist das JavaSkript, das ausgeführt werden muss.
  • Argumente – Es sind die Argumente zum Skript. Es ist optional.

ausführenAsyncScript

Mit asynchronem Skript wird Ihre Seite schneller gerendert. Anstatt Benutzer zu zwingen, auf den Download eines Skripts zu warten, bevor die Seite gerendert wird. Diese Funktion führt einen asynchronen Teil aus JavaSkript im Kontext des aktuell ausgewählten Rahmens oder Fensters in Selenium. Das so ausgeführte JS ist ein Single-Thread mit verschiedenen Rückruffunktionen, die synchron ausgeführt werden.

Wie man den Dienst nutzt JavaScriptExecutor in Selenium

Hier finden Sie eine Schritt-für-Schritt-Anleitung zur Verwendung JavaScriptExecutor in Selenium:

Schritt 1) Importieren Sie das Paket.

import org.openqa.selenium.JavascriptExecutor;

Schritt 2) Erstellen Sie eine Referenz.

JavascriptExecutor js = (JavascriptExecutor) driver;

Schritt 3) Ruf den JavascriptExecutor-Methode.

js.executeScript(script, args);

Beispiel für „Klicken Sie auf ein Element mit JavaScripExecutor in Selenium

Für „executeScript“ sehen wir nacheinander drei verschiedene Beispiele.

1) Beispiel: Klicken Sie auf eine Schaltfläche, um sich anzumelden und ein Warnfenster zu generieren mit JavaSkriptExecutor.

In diesem Szenario verwenden wir die Demo-Site „Guru99“ zur Veranschaulichung JavaIn diesem Beispiel

Klicken Sie auf eine Schaltfläche, um sich anzumelden und ein Warnfenster zu generieren. JavaSkriptExecutor

  • Warnfenster bei erfolgreicher Anmeldung anzeigen.
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');");   
    		
    }		
}

Ausgang: Wenn der Code erfolgreich ausgeführt wurde. Sie werden beobachten

  • Erfolgreicher Klick auf den Login-Button und die
  • Es wird ein Warnfenster angezeigt (siehe Abbildung unten).

Klicken Sie auf eine Schaltfläche, um sich anzumelden und ein Warnfenster zu generieren. JavaSkriptExecutor

2) Beispiel: Scrape-Daten erfassen und zu verschiedenen Seiten navigieren mit JavaSkriptExecutor.

Führen Sie das folgende Selenium-Skript aus. In diesem Beispiel

  • Starten Sie die Site
  • Rufen Sie die Details der Site ab, beispielsweise die URL der Site, den Titelnamen und den Domänennamen der Site.
  • Navigieren Sie dann zu einer anderen Seite.
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/'");			
    }		
}

Ausgang: Wenn der obige Code erfolgreich ausgeführt wird, werden die Sitedetails abgerufen und, wie unten gezeigt, zu einer anderen Seite navigiert.

Erfassen Sie Scrape-Daten und navigieren Sie zu verschiedenen Seiten mit JavaSkriptExecutor

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

Erfassen Sie Scrape-Daten und navigieren Sie zu verschiedenen Seiten mit JavaSkriptExecutor

3) Beispiel: Scrollen Sie nach unten mit JavaSkriptExecutor.

Führen Sie das folgende Selenium-Skript aus. In diesem Beispiel

  • Starten Sie die Site
  • Scrollen Sie um 600 Pixel nach unten
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)");			
    }		
}

Ausgang: Wenn der obige Code ausgeführt wird, scrollt er um 600 Pixel nach unten (siehe Bild unten).

Scrollen Sie nach unten mit JavaSkriptExecutor

Beispiel für „executeAsyncScript“ in Selenium

Die Verwendung von „executeAsyncScript“ trägt dazu bei, die Leistung Ihres Tests zu verbessern. Dadurch können Tests eher wie normale Codierung geschrieben werden.

Die ExekutiveSync blockiert weitere Aktionen, die von ausgeführt werden Selenium Browser, aber execAsync blockiert die Aktion nicht. Es wird ein Rückruf an die Serverseite gesendet Testen suite, sobald das Skript fertig ist. Das bedeutet, dass alles im Skript vom Browser und nicht vom Server ausgeführt wird.

Beispiel 1: Durchführen eines Ruhezustands im zu testenden Browser.

In diesem Szenario verwenden wir die Demo-Site „Guru99“, um „executeAsyncScript“ zu veranschaulichen. In diesem Beispiel werden Sie

  • Starten Sie den Browser.
  • Seite öffnen https://demo.guru99.com/V4/.
  • Die Anwendung wartet 5 Sekunden, um eine weitere Aktion auszuführen.

Schritt 1) Erfassen Sie die Startzeit, bevor Sie 5 Sekunden (5000 Millisekunden) warten, indem Sie die Methode executeAsyncScript() verwenden.

Schritt 2) Verwenden Sie dann „executeAsyncScript()“, um 5 Sekunden zu warten.

Schritt 3) Rufen Sie dann die aktuelle Uhrzeit ab.

Schritt 4) Subtrahieren (aktuelle Zeit – Startzeit) = vergangene Zeit.

Schritt 5) Überprüfen Sie, ob die Ausgabe mehr als 5000 Millisekunden anzeigen sollte

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

Ausgang: Die verstrichene Zeit (mehr als 5 Sekunden (5000 Millisekunden)) wurde erfolgreich angezeigt, wie unten dargestellt:

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

Zusammenfassung

JavaScriptExecutor wird verwendet, wenn Selenium Webdriver kann aufgrund eines Problems nicht auf ein Element klicken.

  • JavaScriptExecutor bietet zwei Methoden „executescript“ und „executeAsyncScript“ zur Verarbeitung.
  • Habe das ausgeführt JavaSkript verwenden Selenium Webtreiber.
  • Veranschaulicht, wie man auf ein Element klickt durch JavaScriptExecutor, wenn Selenium aufgrund eines Problems nicht auf das Element klicken kann.
  • Das Fenster „Alarm“ wurde erstellt mit JavaSkriptExecutor.
  • Zur anderen Seite navigiert mit JavaSkriptExecutor.
  • Im Fenster nach unten gescrollt mit JavaSkriptExecutor.
  • URL, Titel und Domänenname abgerufen mit JavaSkriptExecutor.

Mehr lesen Weiterlesen