JavaScriptExecutor în Selenium cu Exemplu

Ce Este JavaScriptExecutor?

JavaScriptExecutor este o interfață care ajută la execuție JavaScript prin Selenium Webdriver. JavaScriptExecutor oferă două metode „executescript” și „executeAsyncScript” pentru a rula javascript în fereastra selectată sau în pagina curentă.

JavaScriptExecutor

De ce avem nevoie? JavaScriptExecutor?

In Selenium Webdriver, locatoare precum XPath, CSS etc. sunt folosite pentru a identifica și efectua operațiuni pe o pagină web.

În cazul în care, aceste localizatoare nu funcționează, puteți folosi JavaScriptExecutor. Puteți folosi JavaScriptExecutor pentru a efectua o operație dorită pe un element web.

Selenium acceptă javaScriptExecutor. Nu este nevoie de un plugin sau supliment suplimentar. Trebuie doar să importați (org.openqa.seleniu.JavascriptExecutor testamentar) în script-ul de utilizat JavaScriptExecutor.

JavaMetode ScriptExecutor în Selenium

executeScript

Această metodă se execută JavaScenariu în contextul cadrului sau ferestrei selectate curent în Selenium. Scriptul folosit în această metodă rulează în corpul unei funcții anonime (o funcție fără nume). Îi putem transmite și argumente complicate.

Scriptul poate returna valori. Tipurile de date returnate sunt

  • boolean
  • Lung
  • Şir
  • Listă
  • WebElement.

JavascriptSintaxa executorului:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Scenariu - Acesta este JavaScript care trebuie executat.
  • Argumente – Sunt argumentele scenariului. Este optional.

executeAsyncScript

Cu scriptul asincron, pagina dvs. se redă mai rapid. În loc să forțați utilizatorii să aștepte descărcarea unui script înainte ca pagina să fie randată. Această funcție va executa o bucată asincronă din JavaScript în contextul cadrului sau ferestrei selectate în prezent Selenium. JS-ul astfel executat este cu un singur thread, cu o funcție variată de apel invers care rulează sincron.

Cum să utilizați JavaScriptExecutor în Selenium

Iată un proces pas cu pas despre cum se utilizează JavaScriptExecutor în Selenium:

Pas 1) Importă pachetul.

import org.openqa.selenium.JavascriptExecutor;

Pas 2) Creați o referință.

JavascriptExecutor js = (JavascriptExecutor) driver;

Pas 3) Suna JavascriptMetoda executorului.

js.executeScript(script, args);

Exemplu de folosire Faceți clic pe un element JavaScripExecutor în Selenium

Pentru executeScript, vom vedea trei exemple diferite unul câte unul.

1) Exemplu: Faceți clic pe un buton pentru a vă autentifica și a genera o fereastră de alertă folosind JavaScriptExecutor.

În acest scenariu, vom folosi site-ul demonstrativ „Guru99” pentru a ilustra JavaScriptExecutor. În acest exemplu,

Faceți clic pe un buton pentru a vă autentifica și a genera o fereastră de alertă folosind JavaScriptExecutor

  • Afișează fereastra de alertă la autentificare cu succes.
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');");   
    		
    }		
}

ieșire: Când codul este executat cu succes. Vei observa

  • Faceți clic cu succes pe butonul de conectare și pe
  • Va fi afișată o fereastră de alertă (vezi imaginea de mai jos).

Faceți clic pe un buton pentru a vă autentifica și a genera o fereastră de alertă folosind JavaScriptExecutor

2) Exemplu: Capturați date Scrape și navigați la diferite pagini folosind JavaScriptExecutor.

Executați scriptul seleniu de mai jos. În acest exemplu,

  • Lansați site-ul
  • Preluați detaliile site-ului, cum ar fi adresa URL a site-ului, numele titlului și numele de domeniu al site-ului.
  • Apoi navigați la o altă pagină.
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/'");			
    }		
}

ieșire: Când codul de mai sus este executat cu succes, acesta va prelua detaliile site-ului și va naviga la altă pagină, așa cum se arată mai jos.

Capturați date Scrape și navigați la diferite pagini folosind 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
===============================================

Capturați date Scrape și navigați la diferite pagini folosind JavaScriptExecutor

3) Exemplu: Derulați în jos folosind JavaScriptExecutor.

Executați scriptul seleniu de mai jos. În acest exemplu,

  • Lansați site-ul
  • Derulați în jos cu 600 de pixeli
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)");			
    }		
}

producție: Când este executat codul de mai sus, acesta va derula în jos cu 600 de pixeli (vezi imaginea de mai jos).

Derulați în jos folosind JavaScriptExecutor

Exemplu de executeAsyncScript în Selenium

Utilizarea executeAsyncScript ajută la îmbunătățirea performanței testului. Permite testul de scriere mai mult ca o codare normală.

ExeculSync blochează acțiunile ulterioare efectuate de către Selenium browser, dar execAsync nu blochează acțiunea. Va trimite un apel invers pe partea serverului Testarea suite odată ce scriptul este terminat. Înseamnă că totul din interiorul scriptului va fi executat de browser și nu de server.

Exemplul 1: Efectuarea unui somn în browserul testat.

În acest scenariu, vom folosi site-ul demonstrativ „Guru99” pentru a ilustra executeAsyncScript. În acest exemplu, veți face

  • Lansați browserul.
  • Site deschis https://demo.guru99.com/V4/.
  • Aplicația așteaptă 5 secunde pentru a efectua o acțiune suplimentară.

Pas 1) Capturați ora de pornire înainte de a aștepta 5 secunde (5000 milisecunde) utilizând metoda executeAsyncScript().

Pas 2) Apoi, utilizați executeAsyncScript() pentru a aștepta 5 secunde.

Pas 3) Apoi, obțineți ora curentă.

Pas 4) Scădere (ora curentă – ora de începere) = timpul trecut.

Pas 5) Verificați ieșirea ar trebui să afișeze mai mult de 5000 de milisecunde

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

ieșire: Timpul trecut a fost afișat cu succes mai mult de 5 secunde (5000 milisecunde), după cum se arată mai jos:

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

Rezumat

JavaScriptExecutor este folosit când Selenium Webdriver nu reușește să facă clic pe niciun element din cauza unei probleme.

  • JavaScriptExecutor oferă două metode „executescript” și „executeAsyncScript” de gestionat.
  • A executat JavaUtilizarea scriptului Selenium Webdriver.
  • Ilustrat cum se face clic pe un element JavaScriptExecutor, dacă seleniul nu face clic pe element din cauza unei probleme.
  • A generat fereastra „Alerta” folosind JavaScriptExecutor.
  • Navigat la pagina diferită folosind JavaScriptExecutor.
  • A derulat în jos fereastră folosind JavaScriptExecutor.
  • Adresa URL, titlul și numele de domeniu preluate folosind JavaScriptExecutor.

Citește mai mult Readmore