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

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.

Oppsummer dette innlegget med: