JavaScriptExecutor u Selenium WebDriver (primjer)
โก Pametni saลพetak
JavaScriptExecutor u Selenium WebDriver se pokreฤe JavaSkripta unutar preglednika kada lokatori ne uspiju. LessObuhvaฤaju primjere executeScript, executeAsyncScript, pomicanja, klikanja, upozorenja i unosa u obrasce.

ล 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.
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 "GuruDemo stranica od 99โ za ilustraciju JavaScriptExecutor. U ovom primjeru,
- Pokrenite web preglednik
- otvorite stranicu https://demo.guru99.com/V4/ i
- prijavite se s vjerodajnicama
- 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).
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 detalje stranice kao ลกto su URL stranice, naziv stranice i naziv domene stranice.
- 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.
[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 ===============================================
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).
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 koristit ฤemo "GuruDemo stranica od 99โ za ilustraciju executeAsyncScript. U ovom primjeru ฤete
- Pokrenite preglednik.
- Otvori stranicu https://demo.guru99.com/V4/.
- Aplikacija ฤeka 5 sekundi za izvoฤenje daljnje akcije.
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) ispodtract (trenutno vrijeme โ vrijeme poฤetka) = proteklo 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 ===============================================






