JavaScriptExecutor i Selenium med Eksempel

Hvad er JavaScriptExecutor?

JavaScriptExecutor er en grænseflade, der hjælper med at udføre JavaScript igennem Selenium Webdriver. JavaScriptExecutor giver to metoder "executescript" og "executeAsyncScript" for at køre javascript på det valgte vindue eller den aktuelle side.

JavaScriptExecutor

Hvorfor har vi brug for JavaScriptExecutor?

In Selenium Webdriver, locatorer som XPath, CSS osv. bruges til at identificere og udføre operapå en webside.

Hvis disse locatorer ikke virker, kan du bruge JavaScriptExecutor. Du kan bruge JavaScriptExecutor til at udføre en ønsket operation på et webelement.

Selenium understøtter javaScriptExecutor. Der er ikke behov for et ekstra plugin eller tilføjelse. Du skal bare importere (org.openqa.selenium.JavascriptExecutor) i scriptet for at bruge JavaScriptExecutor.

JavaScriptExecutor Methods i Selenium

executeScript

Denne metode udføres JavaScript i sammenhæng med den aktuelt valgte ramme eller vindue i Selenium. Scriptet, der bruges i denne metode, kører i brødteksten af ​​en anonym funktion (en funktion uden navn). Vi kan også sende komplicerede argumenter til det.

Scriptet kan returnere værdier. De returnerede datatyper er

  • Boolesk
  • Lang
  • String
  • Liste
  • WebElement.

JavascriptExecutor syntaks:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Script – Dette er JavaScript, der skal udføres.
  • argumenter – Det er argumenterne til manuskriptet. Det er valgfrit.

udføreAsyncScript

Med ensynchronous script, gengives din side hurtigere. I stedet for at tvinge brugere til at vente på, at et script downloades, før siden gengives. Denne funktion vil udføre en asynchelt ærligt stykke JavaScript i sammenhæng med den aktuelt valgte ramme eller vindue i Selenium. Den således udførte JS er enkelt-trådet med en forskellig tilbagekaldsfunktion, som kører syncærligt.

Sådan bruger du JavaScriptExecutor i Selenium

Her er en trin-for-trin proces om, hvordan du bruger JavaScriptExecutor i Selenium:

Trin 1) Importer pakken.

import org.openqa.selenium.JavascriptExecutor;

Trin 2) Opret en reference.

JavascriptExecutor js = (JavascriptExecutor) driver;

Trin 3) Kald JavascriptExecutor-metoden.

js.executeScript(script, args);

Eksempel på Klik på et element ved hjælp af JavaScripExecutor i Selenium

For executeScript vil vi se tre forskellige eksempler et efter et.

1) Eksempel: Klik på en knap for at logge ind og generere advarselsvindue ved hjælp af JavaScriptExecutor.

I dette scenarie vil vi bruge "Guru99" demo-site til at illustrere JavaScriptExecutor. I dette eksempel,

Klik på en knap for at logge ind og generere advarselsvindue ved hjælp af JavaScriptExecutor

  • Vis advarselsvindue ved vellykket login.
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: Når koden er eksekveret med succes. Du vil observere

  • Vellykket klik på login-knappen og
  • Advarselsvindue vil blive vistyed (se billedet nedenfor).

Klik på en knap for at logge ind og generere advarselsvindue ved hjælp af JavaScriptExecutor

2) Eksempel: Hent skrabe data og naviger til forskellige sider ved hjælp af JavaScriptExecutor.

Udfør nedenstående selenium manuskript. I dette eksempel,

  • Start stedet
  • Hent details af webstedet som URL på webstedet, titelnavn og domænenavn på webstedet.
  • Naviger derefter til en anden side.
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: Når ovenstående kode er eksekveret med succes, vil den hente details af webstedet og naviger til en anden side som vist nedenfor.

Indfang skrabe data og naviger til forskellige sider ved hjælp af 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
===============================================

Indfang skrabe data og naviger til forskellige sider ved hjælp af JavaScriptExecutor

3) Eksempel: Rul ned ved hjælp af JavaScriptExecutor.

Udfør nedenstående selenium manuskript. I dette eksempel,

  • Start stedet
  • Rul ned med 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)");			
    }		
}

Produktion: Når ovenstående kode udføres, vil den rulle ned med 600 pixels (se billedet nedenfor).

Rul ned ved hjælp af JavaScriptExecutor

Eksempel på executeAsyncScript i Selenium

Ved hjælp af executeAsyncScript, hjælper med at forbedre ydeevnen af ​​din test. Det tillader skrivetest mere som en normal kodning.

ExecSync blokerer for yderligere handlinger, der udføres af Selenium browser men execAsync blokerer ikke handling. Det vil sende et tilbagekald til serversiden Test suite, når scriptet er færdigt. Det betyder, at alt inde i scriptet vil blive udført af browseren og ikke serveren.

Eksempel 1: Udførelse af en dvale i browseren under test.

I dette scenarie vil vi bruge "Guru99" demo site til at illustrere executeAsyncManuskript. I dette eksempel vil du

Trin 1) Fang starttiden, før du venter i 5 sekunder (5000 millisekunder) ved at bruge executeAsyncScript() metode.

Trin 2) Brug derefter executeAsyncScript() for at vente 5 sekunder.

Trin 3) Få derefter det aktuelle tidspunkt.

Trin 4) Træk fra (aktuel tid – starttid) = passeret tid.

Trin 5) Bekræft outputtet, det skal vise mere end 5000 millisekunder

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: Displayed den passerede tid mere end 5 sekunder (5000 millisekunder) som vist nedenfor:

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

Resumé

JavaScriptExecutor bruges når Selenium Webdriver kan ikke klikke på noget element på grund af et eller andet problem.

  • JavaScriptExecutor giver to metoder "executescript" og "executeAsyncScript" at håndtere.
  • Udførte JavaScript ved hjælp af Selenium Webdriver.
  • Illustreret, hvordan man klikker på et element gennem JavaScriptExecutor, hvis selenium undlader at klikke på elementet på grund af et eller andet problem.
  • Genererede 'Alert'-vinduet ved hjælp af JavaScriptExecutor.
  • Navigerede til den anden side ved hjælp af JavaScriptExecutor.
  • Rullede ned i vinduet ved hjælp af JavaScriptExecutor.
  • Hentede URL, titel og domænenavn ved hjælp af JavaScriptExecutor.