JavaScriptExecutor in Selenium met Voorbeeld

Wat is JavaScriptExecutor?

JavaScriptExecutor is een interface die helpt bij het uitvoeren JavaScript door Selenium Webdriver. JavaScriptExecutor biedt twee methoden: “executescript” en “executeAsyncScript” om javascript uit te voeren op het geselecteerde venster of de huidige pagina.

JavaScriptUitvoerder

Waarom hebben we nodig JavaScriptExecutor?

In Selenium Webdriver, locators zoals XPath, CSS, etc. worden gebruikt om een ​​webpagina te identificeren en bewerkingen uit te voeren.

Als deze locators niet werken, kunt u deze gebruiken JavaScriptExecutor. U kunt gebruiken JavaScriptExecutor om een ​​gewenste bewerking op een webelement uit te voeren.

Selenium ondersteunt javaScriptExecutor. Er is geen extra plug-in of add-on nodig. Je hoeft alleen maar te importeren (org.openqa.selenium.Javascriptexecuteur) in het script dat u wilt gebruiken JavaScriptExecutor.

JavaScriptExecutor-methoden in Selenium

executeScript

Deze methode wordt uitgevoerd JavaScript in de context van het momenteel geselecteerde frame of venster Selenium. Het script dat bij deze methode wordt gebruikt, wordt uitgevoerd in de hoofdtekst van een anonieme functie (een functie zonder naam). We kunnen er ook ingewikkelde argumenten aan doorgeven.

Het script kan waarden retourneren. De geretourneerde gegevenstypen zijn

  • Boolean
  • Lang
  • Draad
  • Lijst
  • WebElement.

JavascriptSyntaxis van de uitvoerder:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Script - Dit is de JavaScript dat uitgevoerd moet worden.
  • argumenten – Het zijn de argumenten voor het script. Het is optioneel.

voerAsyncScript uit

Met Asynchronous script wordt uw pagina sneller gerenderd. In plaats van gebruikers te dwingen te wachten tot een script is gedownload voordat de pagina wordt gerenderd. Deze functie voert een asynchroon stuk uit JavaScript in de context van het momenteel geselecteerde frame of venster in SeleniumDe JS die op deze manier wordt uitgevoerd, is single-threaded met verschillende callbackfuncties die synchroon worden uitgevoerd.

Gebruiksaanwijzing JavaScriptExecutor in Selenium

Hier vindt u een stapsgewijs proces voor het gebruik JavaScriptExecutor in Selenium:

Stap 1) Importeer het pakket.

import org.openqa.selenium.JavascriptExecutor;

Stap 2) Maak een referentie.

JavascriptExecutor js = (JavascriptExecutor) driver;

Stap 3) Bel de JavascriptUitvoerder methode.

js.executeScript(script, args);

Voorbeeld van klikken op een element met behulp van JavaScriptExecutor in Selenium

Voor executeScript zullen we drie verschillende voorbeelden één voor één zien.

1) Voorbeeld: klik op een knop om in te loggen en een waarschuwingsvenster te genereren JavaScriptExecutor.

In dit scenario zullen we de demosite “Guru99” gebruiken ter illustratie JavaScriptExecutor. In dit voorbeeld,

Klik op een knop om in te loggen en een waarschuwingsvenster te genereren JavaScriptUitvoerder

  • Geef een waarschuwingsvenster weer bij succesvol inloggen.
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');");   
    		
    }		
}

Output: Wanneer de code succesvol is uitgevoerd. Je zult observeren

  • Klik met succes op de login-knop en de
  • Er wordt een waarschuwingsvenster weergegeven (zie onderstaande afbeelding).

Klik op een knop om in te loggen en een waarschuwingsvenster te genereren JavaScriptUitvoerder

2) Voorbeeld: Scrape-gegevens vastleggen en naar verschillende pagina's navigeren met behulp van JavaScriptExecutor.

Voer het onderstaande selenium-script uit. In dit voorbeeld,

  • Lanceer de site
  • Haal de gegevens van de site op, zoals de URL van de site, de titel en de domeinnaam van de site.
  • Navigeer vervolgens naar een andere pagina.
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/'");			
    }		
}

Output: Wanneer de bovenstaande code succesvol wordt uitgevoerd, worden de details van de site opgehaald en wordt er naar een andere pagina genavigeerd, zoals hieronder weergegeven.

Leg scrape-gegevens vast en navigeer naar verschillende pagina's met behulp van JavaScriptUitvoerder

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

Leg scrape-gegevens vast en navigeer naar verschillende pagina's met behulp van JavaScriptUitvoerder

3) Voorbeeld: Scroll naar beneden met JavaScriptExecutor.

Voer het onderstaande selenium-script uit. In dit voorbeeld,

  • Lanceer de site
  • Scroll 600 pixels naar beneden
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)");			
    }		
}

uitgang: Wanneer bovenstaande code wordt uitgevoerd, scrollt deze 600 pixels naar beneden (zie onderstaande afbeelding).

Scroll naar beneden met JavaScriptUitvoerder

Voorbeeld van executeAsyncScript in Selenium

Met behulp van executeAsyncScript verbetert u de prestaties van uw test. Het maakt het schrijven van tests meer vergelijkbaar met normale codering.

de directeurSync blokkeert verdere acties die worden uitgevoerd door de Selenium browser, maar execAsync blokkeert geen actie. Het stuurt een callback naar de server-side Testen suite zodra het script klaar is. Het betekent dat alles in het script door de browser wordt uitgevoerd en niet door de server.

Voorbeeld 1: Een slaapstand uitvoeren in de geteste browser.

In dit scenario gebruiken we de demosite “Guru99” om executeAsyncScript te illustreren. In dit voorbeeld zult u

Stap 1) Leg de starttijd vast voordat u 5 seconden (5000 milliseconden) wacht met behulp van de methode executeAsyncScript().

Stap 2) Gebruik vervolgens executeAsyncScript() om 5 seconden te wachten.

Stap 3) Haal vervolgens de huidige tijd op.

Stap 4) Aftrekken (huidige tijd – starttijd) = verstreken tijd.

Stap 5) Controleer of de uitvoer meer dan 5000 milliseconden moet weergeven

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

Output: De verstreken tijd van meer dan 5 seconden (5000 milliseconden) is succesvol weergegeven, zoals hieronder weergegeven:

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

Samenvatting

JavaScriptExecutor wordt gebruikt wanneer Selenium Webdriver kan vanwege een probleem niet op enig element klikken.

  • JavaScriptExecutor biedt twee methoden: “executescript” en “executeAsyncScript”.
  • Uitgevoerd de JavaScript met behulp van Selenium Webdriver.
  • Geïllustreerd hoe u op een element kunt klikken JavaScriptExecutor, als Selenium vanwege een probleem niet op een element kan klikken.
  • Het 'Alert'-venster gegenereerd met behulp van JavaScriptExecutor.
  • Navigeer naar de andere pagina met behulp van JavaScriptExecutor.
  • Blader door het venster met behulp van JavaScriptExecutor.
  • URL, titel en domeinnaam opgehaald met behulp van JavaScriptExecutor.

Lees meer readmore