JavaScriptExecutor i Selenium med eksempel

Hva er JavaScriptExecutor?

JavaScriptExecutor er et grensesnitt som hjelper til med å utføre JavaSkript gjennom Selenium Webdriver. JavaScriptExecutor tilbyr to metoder "executescript" og "executeAsyncScript" for å kjøre javascript på det valgte vinduet eller gjeldende side.

JavaScriptExecutor

Hvorfor trenger vi JavaScriptExecutor?

In Selenium Webdriver, locatorer som XPath, CSS, etc. brukes til å identifisere og utføre operasjoner på en nettside.

I tilfelle disse lokatorene ikke fungerer, kan du bruke JavaScriptExecutor. Du kan bruke JavaScriptExecutor for å utføre en ønsket operasjon på et webelement.

Selenium støtter javaScriptExecutor. Det er ikke behov for en ekstra plugin eller tillegg. Du trenger bare å importere (org.openqa.selenium.Javascriptbyrder) i skriptet som skal brukes JavaScriptExecutor.

JavaScriptExecutor-metoder i Selenium

executeScript

Denne metoden utføres JavaScript i sammenheng med den valgte rammen eller vinduet i Selenium. Skriptet som brukes i denne metoden kjører i brødteksten til en anonym funksjon (en funksjon uten navn). Vi kan også føre kompliserte argumenter til det.

Skriptet kan returnere verdier. Datatyper som returneres er

  • boolean
  • Lang
  • String
  • Liste
  • WebElement.

JavascriptEksekutør syntaks:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Script - Dette er JavaSkript som må kjøres.
  • argumenter – Det er argumentene til manuset. Det er valgfritt.

kjør AsyncScript

Med asynkront skript gjengis siden din raskere. I stedet for å tvinge brukere til å vente på at et skript skal lastes ned før siden gjengis. Denne funksjonen vil utføre en asynkron del av JavaSkript i sammenheng med den valgte rammen eller vinduet i Selenium. JS-en som utføres på denne måten er entrådet med en forskjellig tilbakeringingsfunksjon som kjører synkront.

Bruksanvisning JavaScriptExecutor i Selenium

Her er en trinn-for-trinn-prosess for hvordan du bruker JavaScriptExecutor i Selenium:

Trinn 1) Importer pakken.

import org.openqa.selenium.JavascriptExecutor;

Trinn 2) Opprett en referanse.

JavascriptExecutor js = (JavascriptExecutor) driver;

Trinn 3) Ring JavascriptEksekutør metode.

js.executeScript(script, args);

Eksempel på Klikk på et element med JavaScripExecutor i Selenium

For executeScript vil vi se tre forskjellige eksempler ett etter ett.

1) Eksempel: Klikk på en knapp for å logge på og generere varselvindu ved hjelp av JavaScriptExecutor.

I dette scenariet vil vi bruke "Guru99" demoside for å illustrere JavaScriptExecutor. I dette eksemplet,

Klikk på en knapp for å logge på og generere varslingsvindu med JavaScriptExecutor

  • Vis varselvindu ved vellykket pålogging.
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');");   
    		
    }		
}

Utgang: Når koden er utført. Du vil observere

  • Vellykket klikk på påloggingsknappen og
  • Varslingsvindu vil vises (se bildet nedenfor).

Klikk på en knapp for å logge på og generere varslingsvindu med JavaScriptExecutor

2) Eksempel: Registrer skrapedata og naviger til forskjellige sider ved hjelp av JavaScriptExecutor.

Utfør selenskriptet nedenfor. I dette eksemplet,

  • Start nettstedet
  • Hent detaljene til nettstedet som URL til nettstedet, tittelnavn og domenenavn til nettstedet.
  • Naviger deretter til en annen 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/'");			
    }		
}

Utgang: Når koden ovenfor er utført vellykket, vil den hente detaljene til nettstedet og navigere til en annen side som vist nedenfor.

Fang skrapedata og naviger til forskjellige sider ved hjelp av 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
===============================================

Fang skrapedata og naviger til forskjellige sider ved hjelp av JavaScriptExecutor

3) Eksempel: Rull ned med JavaScriptExecutor.

Utfør selenskriptet nedenfor. I dette eksemplet,

  • Start nettstedet
  • Rull ned med 600 piksler
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)");			
    }		
}

Produksjon: Når koden ovenfor er utført, vil den rulle ned med 600 piksler (se bildet nedenfor).

Rull ned med JavaScriptExecutor

Eksempel på executeAsyncScript i Selenium

Bruk av executeAsyncScript bidrar til å forbedre ytelsen til testen din. Det lar skrivetesten mer som en vanlig koding.

ExecSync blokkerer ytterligere handlinger som utføres av Selenium nettleser, men execAsync blokkerer ikke handling. Det vil sende en tilbakeringing til serversiden Testing suite når skriptet er ferdig. Det betyr at alt inne i skriptet vil bli utført av nettleseren og ikke serveren.

Eksempel 1: Utføre en dvale i nettleseren som testes.

I dette scenariet vil vi bruke "Guru99" demoside for å illustrere executeAsyncScript. I dette eksemplet vil du

  • Start nettleseren.
  • Åpne nettsted https://demo.guru99.com/V4/.
  • Applikasjonen venter i 5 sekunder for å utføre en ytterligere handling.

Trinn 1) Registrer starttiden før du venter i 5 sekunder (5000 millisekunder) ved å bruke executeAsyncScript()-metoden.

Trinn 2) Bruk deretter executeAsyncScript() for å vente 5 sekunder.

Trinn 3) Få deretter gjeldende tid.

Trinn 4) Trekk fra (nåværende tid – starttid) = passert tid.

Trinn 5) Bekreft utdataene som skal vise mer enn 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));					
                    		
    }		
}			

Utgang: Viste den passerte tiden mer enn 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		
===============================================

Sammendrag

JavaScriptExecutor brukes når Selenium Webdriver klarer ikke å klikke på noe element på grunn av et eller annet problem.

  • JavaScriptExecutor tilbyr to metoder "executescript" og "executeAsyncScript" for å håndtere.
  • Utførte JavaSkript ved hjelp av Selenium Webdriver.
  • Illustrert hvordan du klikker på et element JavaScriptExecutor, hvis selen ikke klarer å klikke på elementet på grunn av et problem.
  • Genererte 'Alert'-vinduet ved hjelp av JavaScriptExecutor.
  • Navigerte til den andre siden ved hjelp av JavaScriptExecutor.
  • Rullet nedover vinduet ved hjelp av JavaScriptExecutor.
  • Hentet URL, tittel og domenenavn ved hjelp av JavaScriptExecutor.