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.
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,
- 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 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.
[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 upotrijebit ฤemo demo stranicu "Guru99" za ilustraciju executeAsyncScript. U ovom primjeru hoฤ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) 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.






