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.






