JavaScriptExecutor i Selenium med exempel

Vad är JavaScriptExecutor?

JavaScriptExecutor är ett gränssnitt som hjälper till att köra JavaManus igenom Selenium Webdriver. JavaScriptExecutor tillhandahåller två metoder "executescript" och "executeAsyncScript" för att köra javascript på det valda fönstret eller den aktuella sidan.

JavaScriptExecutor

Varför behöver vi JavaScriptExecutor?

In Selenium Webdriver, lokaliseringsverktyg som XPath, CSS, etc. används för att identifiera och utföra operationer på en webbsida.

Om dessa lokaliseringsanordningar inte fungerar kan du använda JavaScriptExecutor. Du kan använda JavaScriptExecutor för att utföra en önskad operation på ett webbelement.

Selenium stöder javaScriptExecutor. Det behövs inget extra plugin eller tillägg. Du behöver bara importera (org.openqa.selenium.JavascriptTestamentsexekutor) i skriptet som ska användas JavaScriptExecutor.

JavaScriptExecutor-metoder i Selenium

executeScript

Denna metod körs JavaScript i sammanhanget för den för närvarande valda ramen eller fönstret i Selenium. Skriptet som används i den här metoden körs i kroppen av en anonym funktion (en funktion utan namn). Vi kan också föra komplicerade argument till det.

Skriptet kan returnera värden. Datatyper som returneras är

  • Boolean
  • Lång
  • Sträng
  • Lista
  • WebElement.

JavascriptExekutorsyntax:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Script - Det här är JavaSkript som måste köras.
  • Argument – Det är argumenten till manuset. Det är valfritt.

kör AsyncScript

Med asynkront skript renderas din sida snabbare. Istället för att tvinga användare att vänta på att ett skript ska laddas ner innan sidan renderas. Denna funktion kommer att exekvera en asynkron del av JavaSkript i sammanhanget för den för närvarande valda ramen eller fönstret i Selenium. JS:en som körs på detta sätt är enkeltrådad med olika återuppringningsfunktioner som körs synkront.

Användning JavaScriptExecutor i Selenium

Här är en steg-för-steg-process om hur du använder JavaScriptExecutor i Selenium:

Steg 1) Importera paketet.

import org.openqa.selenium.JavascriptExecutor;

Steg 2) Skapa en referens.

JavascriptExecutor js = (JavascriptExecutor) driver;

Steg 3) Ring JavascriptExekutormetod.

js.executeScript(script, args);

Exempel på Klicka på ett element med hjälp av JavaScripExecutor i Selenium

För executeScript kommer vi att se tre olika exempel ett efter ett.

1) Exempel: Klicka på en knapp för att logga in och generera varningsfönster med JavaScriptExecutor.

I det här scenariot kommer vi att använda "Guru99" demosida för att illustrera JavaScriptExecutor. I det här exemplet,

Klicka på en knapp för att logga in och generera varningsfönster med JavaScriptExecutor

  • Visa varningsfönster vid lyckad inloggning.
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');");   
    		
    }		
}

Produktion: När koden exekveras framgångsrikt. Du kommer att observera

  • Lyckad klicka på inloggningsknappen och
  • Varningsfönster kommer att visas (se bilden nedan).

Klicka på en knapp för att logga in och generera varningsfönster med JavaScriptExecutor

2) Exempel: Fånga skrapa data och navigera till olika sidor med hjälp av JavaScriptExecutor.

Kör selenskriptet nedan. I det här exemplet,

  • Starta webbplatsen
  • Hämta informationen om webbplatsen som webbadressen till webbplatsen, titelnamn och domännamn för webbplatsen.
  • Navigera sedan till en annan sida.
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/'");			
    }		
}

Produktion: När ovanstående kod exekveras framgångsrikt, kommer den att hämta informationen om webbplatsen och navigera till en annan sida som visas nedan.

Fånga skrapa data och navigera till olika sidor med hjälp 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
===============================================

Fånga skrapa data och navigera till olika sidor med hjälp av JavaScriptExecutor

3) Exempel: Scrolla ner med JavaScriptExecutor.

Kör selenskriptet nedan. I det här exemplet,

  • Starta webbplatsen
  • Scrolla ner med 600 pixlar
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 ovanstående kod exekveras kommer den att rulla ner med 600 pixlar (se bilden nedan).

Scrolla ner med JavaScriptExecutor

Exempel på executeAsyncScript i Selenium

Att använda executeAsyncScript hjälper till att förbättra prestandan för ditt test. Det tillåter skrivtest mer som en vanlig kodning.

ExecSync blockerar ytterligare åtgärder som utförs av Selenium webbläsare men execAsync blockerar inte åtgärder. Det kommer att skicka en återuppringning till serversidan Testning svit när skriptet är klart. Det betyder att allt inuti skriptet kommer att köras av webbläsaren och inte servern.

Exempel 1: Utföra en viloläge i webbläsaren som testas.

I det här scenariot kommer vi att använda "Guru99" demosida för att illustrera executeAsyncScript. I det här exemplet kommer du

  • Starta webbläsaren.
  • Öppna webbplats https://demo.guru99.com/V4/.
  • Applikationen väntar i 5 sekunder för att utföra ytterligare en åtgärd.

Steg 1) Fånga starttiden innan du väntar i 5 sekunder (5000 millisekunder) med hjälp av metoden executeAsyncScript().

Steg 2) Använd sedan executeAsyncScript() för att vänta 5 sekunder.

Steg 3) Hämta sedan aktuell tid.

Steg 4) Subtrahera (aktuell tid – starttid) = passerad tid.

Steg 5) Verifiera utdata som ska visa mer än 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));					
                    		
    }		
}			

Produktion: Visade den passerade tiden mer än 5 sekunder (5000 milisekunder) som visas nedan:

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

Sammanfattning

JavaScriptExecutor används när Selenium Webdriver misslyckas med att klicka på något element på grund av något problem.

  • JavaScriptExecutor tillhandahåller två metoder "executescript" och "executeAsyncScript" att hantera.
  • Utförde JavaSkript med hjälp av Selenium Webdriver.
  • Illustrerat hur man klickar på ett element JavaScriptExecutor, om selen misslyckas med att klicka på elementet på grund av något problem.
  • Genererade fönstret 'Alert' med hjälp av JavaScriptExecutor.
  • Navigerade till den andra sidan med hjälp av JavaScriptExecutor.
  • Scrollade ner i fönstret med hjälp av JavaScriptExecutor.
  • Hämtade URL, titel och domännamn med hjälp av JavaScriptExecutor.

Läs mer Readmore