JavaScriptExecutor u Selenium s Primjerom

ล to je JavaScriptExecutor?

JavaScriptExecutor je suฤelje koje pomaลพe u izvrลกenju JavaSkripta kroz Selenium Webdriver. JavaScriptExecutor nudi dvije metode "executescript" & "executeAsyncScript" za pokretanje javascripta na odabranom prozoru ili trenutnoj stranici.

JavaScriptExecutor

Zaลกto nam treba JavaScriptExecutor?

In Selenium Webdriver, lokatori poput XPath, CSS, itd. koriste se za identifikaciju i izvoฤ‘enje operacija na web stranici.

U sluฤaju da ovi lokatori ne rade, moลพete ih koristiti JavaScriptExecutor. Moลพete koristiti JavaScriptExecutor za izvoฤ‘enje ลพeljene operacije na web elementu.

Selenium podrลพava javaScriptExecutor. Nema potrebe za dodatnim dodatkom ili dodatkom. Samo trebate uvesti (org.openqa.selen.Javascriptizvrลกitelj) u skripti za koriลกtenje JavaScriptExecutor.

JavaScriptExecutor metode u Selenium

izvrลกi skriptu

Ova metoda se izvrลกava JavaScript u kontekstu trenutno odabranog okvira ili prozora u Selenium. Skripta koriลกtena u ovoj metodi izvodi se u tijelu anonimne funkcije (funkcije bez naziva). Takoฤ‘er mu moลพemo proslijediti komplicirane argumente.

Skripta moลพe vratiti vrijednosti. Vraฤ‡eni tipovi podataka su

  • Booleova
  • Dug
  • Niz
  • Popis
  • WebElement.

JavascriptSintaksa izvrลกitelja:

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • Script - Ovo je JavaSkripta koja se treba izvrลกiti.
  • argumenti โ€“ To su argumenti scenariju. Nije obavezno.

izvrลกi AsyncScript

S asinkronom skriptom vaลกa se stranica prikazuje brลพe. Umjesto da tjeraju korisnike da ฤekaju da se skripta preuzme prije nego ลกto se stranica renderira. Ova funkcija ฤ‡e izvrลกiti asinkroni dio JavaSkripta u kontekstu trenutno odabranog okvira ili prozora Selenium. Tako izveden JS jednonitni je s razliฤitim funkcijama povratnog poziva koje se izvode sinkrono.

Kako koristiti JavaScriptExecutor u Selenium

Ovdje je korak po korak postupak koriลกtenja JavaScriptExecutor u Selenium:

Korak 1) Uvezi paket.

import org.openqa.selenium.JavascriptExecutor;

Korak 2) Stvorite referencu.

JavascriptExecutor js = (JavascriptExecutor) driver;

Korak 3) Nazovite JavascriptMetoda izvrลกitelja.

js.executeScript(script, args);

Primjer klika na element pomoฤ‡u JavaScripExecutor u Selenium

Za executeScript, vidjet ฤ‡emo tri razliฤita primjera jedan po jedan.

1) Primjer: Kliknite gumb za prijavu i generiranje prozora upozorenja pomoฤ‡u JavaScriptExecutor.

U ovom scenariju koristit ฤ‡emo demo stranicu "Guru99" za ilustraciju JavaScriptExecutor. U ovom primjeru,

Pritisnite gumb za prijavu i generiranje prozora upozorenja pomoฤ‡u JavaScriptExecutor

  • Prikaz prozora upozorenja nakon uspjeลกne prijave.
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');");   
    		
    }		
}

Izlaz: Kada se kod uspjeลกno izvede. Vi ฤ‡ete promatrati

  • Uspjeลกan klik na gumb za prijavu i
  • Prikazat ฤ‡e se prozor upozorenja (pogledajte sliku ispod).

Pritisnite gumb za prijavu i generiranje prozora upozorenja pomoฤ‡u JavaScriptExecutor

2) Primjer: Snimite skrape podatke i idite na razliฤite stranice pomoฤ‡u JavaScriptExecutor.

Izvrลกite donju selenium skriptu. U ovom primjeru,

  • Pokrenite stranicu
  • Dohvatite pojedinosti web-mjesta poput URL-a web-mjesta, naziva naslova i naziva domene web-mjesta.
  • Zatim prijeฤ‘ite na drugu stranicu.
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/'");			
    }		
}

Izlaz: Kada se gornji kod uspjeลกno izvrลกi, dohvatit ฤ‡e pojedinosti web-mjesta i otiฤ‡i na drugu stranicu kao ลกto je prikazano u nastavku.

Snimite skrape podatke i idite na razliฤite stranice pomoฤ‡u 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
===============================================

Snimite skrape podatke i idite na razliฤite stranice pomoฤ‡u JavaScriptExecutor

3) Primjer: Pomaknite se prema dolje pomoฤ‡u JavaScriptExecutor.

Izvrลกite donju selenium skriptu. U ovom primjeru,

  • Pokrenite stranicu
  • Pomaknite se prema dolje za 600 piksela
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)");			
    }		
}

Izlaz: Kada se gornji kod izvrลกi, pomaknut ฤ‡e se prema dolje za 600 piksela (pogledajte sliku ispod).

Pomaknite se prema dolje pomoฤ‡u JavaScriptExecutor

Primjer executeAsyncScript u Selenium

Koriลกtenje executeAsyncScript pomaลพe u poboljลกanju izvedbe vaลกeg testa. Omoguฤ‡uje test pisanja viลกe nalik normalnom kodiranju.

IzvrลกniSync blokira daljnje radnje koje izvodi Selenium preglednik, ali execAsync ne blokira akciju. Poslat ฤ‡e povratni poziv strani posluลพitelja Ispitivanje paket nakon ลกto je skripta gotova. To znaฤi da ฤ‡e sve unutar skripte izvrลกiti preglednik, a ne posluลพitelj.

Primjer 1: Izvoฤ‘enje mirovanja u pregledniku koji se testira.

U ovom scenariju upotrijebit ฤ‡emo demo stranicu "Guru99" za ilustraciju executeAsyncScript. U ovom primjeru hoฤ‡ete

Korak 1) Zabiljeลพite vrijeme poฤetka prije ฤekanja od 5 sekundi (5000 milisekundi) pomoฤ‡u metode executeAsyncScript().

Korak 2) Zatim upotrijebite executeAsyncScript() da priฤekate 5 sekundi.

Korak 3) Zatim dohvatite trenutno vrijeme.

Korak 4) Oduzmi (trenutno vrijeme โ€“ vrijeme poฤetka) = proลกlo vrijeme.

Korak 5) Provjerite izlaz koji bi trebao prikazivati โ€‹โ€‹viลกe od 5000 milisekundi

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

Izlaz: Uspjeลกno prikazano proteklo vrijeme viลกe od 5 sekundi (5000 milisekundi) kao ลกto je prikazano u nastavku:

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

Rezime

JavaScriptExecutor se koristi kada Selenium Webdriver ne uspijeva kliknuti nijedan element zbog nekog problema.

  • JavaScriptExecutor nudi dvije metode "executescript" & "executeAsyncScript" za rukovanje.
  • Izvrลกio JavaKoriลกtenje skripte Selenium Webdriver.
  • Ilustrirano kako kliknuti na element JavaScriptExecutor, ako selenium ne uspije kliknuti na element zbog nekog problema.
  • Prozor 'Upozorenje' generiran pomoฤ‡u JavaScriptExecutor.
  • Navigiran na drugu stranicu pomoฤ‡u JavaScriptExecutor.
  • Pomaknuo se niz prozor pomoฤ‡u JavaScriptExecutor.
  • Dohvaฤ‡eni URL, naslov i naziv domene pomoฤ‡u JavaScriptExecutor.

Saลพmite ovu objavu uz: