Što je JavaScriptExecutor?
JavaScriptExecutor je sučelje koje pomaže u izvršavanju JavaScript-a putem Selenium Webdriver. JavaScriptExecutor pruža dvije metode "executescript" & "executeAsyncScript" za pokretanje javascripta na odabranom prozoru ili trenutnoj stranici.
U ovom vodiču naučit ćete -
- Što je JavaScriptExecutor?
- Zašto nam treba JavaScriptExeecuter?
- JavaScriptExecutor metode
- Primjer executeAsyncScript
- Primjer 1: Spavanje u pregledniku koji se ispituje.
- Primjer executeScript-a
- 1) Primjer: Kliknite gumb za prijavu i generiranje prozora upozorenja
- 2) Primjer: Snimite podatke za struganje i pomaknite se na različite stranice
- 3) Primjer: Pomicanje prema dolje
Zašto nam treba JavaScriptExeecuter?
U programu Selenium Webdriver lokatori poput XPath, CSS itd. Koriste se za prepoznavanje i izvođenje operacija na web stranici.
U slučaju da ovi lokatori ne rade, možete 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.selenium.JavascriptExecutor ) u skriptu kao da biste koristili JavaScriptExecutor.
JavaScriptExecutor metode
- executeAsyncScript
Uz asinkronu skriptu vaša se stranica brže prikazuje. Umjesto da prisiljava korisnike da pričekaju preuzimanje skripte prije nego što se stranica generira. Ova će funkcija izvršiti asinkroni dio JavaScript-a u kontekstu trenutno odabranog okvira ili prozora u programu Selenium. Tako izvršeni JS jednonitni je s raznom funkcijom povratnog poziva koja se sinkrono izvodi.
- executeScript
Ova metoda izvršava JavaScript u kontekstu trenutno odabranog okvira ili prozora u Seleniju. Skripta korištena u ovoj metodi radi u tijelu anonimne funkcije (funkcije bez imena). Na to također možemo prenositi složene argumente.
Skripta može vratiti vrijednosti. Vratili su se tipovi podataka
- Booleova
- Dugo
- Niz
- Popis
- WebElement.
Osnovna sintaksa za JavascriptExecutor dana je u nastavku:
Sintaksa:
JavascriptExecutor js = (JavascriptExecutor) pokretački program;js.executeScript (skripta, argumenti);
- Skripta - ovo je JavaScript koji treba izvršiti.
- Argumenti - to su argumenti skripti. Nije obavezno.
Primjer executeAsyncScript
Korištenje executeAsyncScript pomaže poboljšati izvedbu testa. Omogućuje pisanje testa više poput uobičajenog kodiranja.
ExecSync blokira daljnje radnje koje izvodi preglednik Selenium, ali execAsync ne blokira radnje. Poslat će povratni poziv na ispitni paket na strani poslužitelja nakon što skripta bude gotova. To znači da će sve unutar skripte izvršiti preglednik, a ne poslužitelj.
Primjer 1: Spavanje u pregledniku koji se ispituje.
U ovom ćemo scenariju koristiti demonstracijsku stranicu "Guru99" za ilustraciju executeAsyncScript. U ovom ćete primjeru
- Pokrenite preglednik.
- Otvorite web mjesto "http://demo.guru99.com/V4/".
- Aplikacija čeka 5 sekundi da izvrši daljnju radnju.
Korak 1) Snimite vrijeme početka prije nego što pričekate 5 sekundi (5000 milisekundi) metodom executeAsyncScript ().
Korak 2) Zatim upotrijebite executeAsyncScript () da pričekate 5 sekundi.
Korak 3) Zatim odredite 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;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javna klasa JavaSE_Test {@Testjavna praznina Prijava (){Upravljački program za WebDriver = novi FirefoxDriver ();// Stvaranje objekta sučelja JavascriptExecutor lijevanjem tipaJavascriptExecutor js = (JavascriptExecutor) pokretački program;// Pokretanje web mjesta.driver.get ("http://demo.guru99.com/V4/");// Uvećaj prozordriver.manage (). window (). maximize ();// Postavite Script Timeout na 20 sekundidriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Izjavite i postavite vrijeme početkalong start_time = System.currentTimeMillis ();// Pozovite metodu executeAsyncScript () da pričekate 5 sekundijs.executeAsyncScript ("window.setTimeout (argumenti [argument.length - 1], 5000);");// Dobivamo razliku (currentTime - startTime) puta.System.out.println ("Prošlo vrijeme: + (System.currentTimeMillis () - start_time));}}
Izlaz: Uspješno prikazano prošlo vrijeme duže od 5 sekundi (5000 milisekundi) kao što je prikazano dolje:
[TestNG] Trčanje:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: UPOZORENJE Nisu pronađeni dodaci za zapisnik (org.apache.http.client.protocol.RequestAddCookies).log4j: UPOZORENJE Molimo vas da pravilno inicijalizirate log4j sustav.log4j: UPOZORENJE Pogledajte http://logging.apache.org/log4j/1.2/faq.html#noconfig za više informacija.Prošlo vrijeme: 5022PROŠLO: Prijava===================================================Zadani testIzvršeni testovi: 1, neuspjesi: 0, preskoci: 0===================================================
Primjer executeScript-a
Za executeScript vidjet ćemo tri različita primjera jedan po jedan.
1) Primjer: Kliknite gumb za prijavu i generiranje prozora upozorenja pomoću JavaScriptExecutor-a.
U ovom ćemo scenariju koristiti demonstracijsku stranicu "Guru99" da bismo ilustrirali JavaScriptExecutor. U ovom primjeru,
- Pokrenite web preglednik
- otvorite web mjesto "http://demo.guru99.com/V4/" i
- prijava s vjerodajnicama
- Prikaži prozor upozorenja o uspješnoj prijavi.
uvoz org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.WebElement;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javna klasa JavaSE_Test {@Testjavna praznina Prijava (){Upravljački program za WebDriver = novi FirefoxDriver ();// Stvaranje objekta sučelja JavascriptExecutor lijevanjem tipaJavascriptExecutor js = (JavascriptExecutor) pokretački program;// Pokretanje web mjesta.driver.get ("http://demo.guru99.com/V4/");Gumb WebElement = driver.findElement (By.name ("btnLogin"));// Prijava u Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("lozinka")). sendKeys ("amUpenu");// Izvršite klik na gumb PRIJAVA pomoću JavascriptExecutor-ajs.executeScript ("argumenti [0] .click ();", gumb);// Za generiranje prozora upozorenja pomoću JavascriptExecutor-a. Prikažite poruku upozorenjajs.executeScript ("alert ('Dobro došli u Guru99');");}}
Izlaz: Kada se kod uspješno izvrši. Promatrat ćete
- Uspješan klik na gumb za prijavu i
- Prikazat će se prozor upozorenja (vidi sliku dolje).
2) Primjer: Hvatanje podataka za struganje i kretanje do različitih stranica pomoću JavaScriptExecutor-a.
Izvršite donju skriptu selena. U ovom primjeru,
- Pokrenite web mjesto
- Dohvatite detalje web stranice, kao što su URL web stranice, naziv naslova i naziv domene web stranice.
- Zatim prijeđite na drugu stranicu.
import org.openqa.selenium.JavascriptExecutor;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javna klasa JavaSE_Test {@Testjavna praznina Prijava (){Upravljački program za WebDriver = novi FirefoxDriver ();// Stvaranje objekta sučelja JavascriptExecutor lijevanjem tipaJavascriptExecutor js = (JavascriptExecutor) pokretački program;// Pokretanje web mjesta.driver.get ("http://demo.guru99.com/V4/");// Dohvaćanje naziva domene web mjesta. Tostring () promijeni objekt u ime.Niz DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Naziv domene web mjesta =" + Ime domene);// Dohvaćanje URL-a web mjesta. Tostring () promijeni objekt u imeNiz url = js.executeScript ("vrati dokument.URL;"). ToString ();System.out.println ("URL web mjesta =" + url);// Metoda document.title dohvaća naziv naslova web mjesta. Tostring () promijeni objekt u imeNiz TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Naslov stranice =" + NazivName);// Idite na novu stranicu, tj. Za generiranje pristupne stranice. (pokreni novi url)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Izlaz: Kada se gornji kôd uspješno izvrši, dohvatit će detalje web stranice i prijeći na drugu stranicu kao što je prikazano u nastavku.
[TestNG] Trčanje:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: UPOZORENJE Nisu pronađeni dodaci za zapisnik (org.apache.http.client.protocol.RequestAddCookies).log4j: UPOZORENJE Molimo vas da pravilno inicijalizirate log4j sustav.log4j: UPOZORENJE Pogledajte http://logging.apache.org/log4j/1.2/faq.html#noconfig za više informacija.Naziv domene stranice = demo.guru99.comURL web stranice = http://demo.guru99.com/V4/Naslov stranice = Početna stranica Guru99 bankePROŠLO: Prijava===================================================Zadani testIzvršeni testovi: 1, neuspjesi: 0, preskoci: 0===================================================
3) Primjer: Pomicanje prema dolje koristeći JavaScriptExecutor.
Izvršite donju skriptu selena. U ovom primjeru,
- Pokrenite web mjesto
- Pomaknite se prema dolje za 600 piksela
import org.openqa.selenium.JavascriptExecutor;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javna klasa JavaSE_Test {@Testjavna praznina Prijava (){Upravljački program za WebDriver = novi FirefoxDriver ();// Stvaranje objekta sučelja JavascriptExecutor lijevanjem tipaJavascriptExecutor js = (JavascriptExecutor) pokretački program;// Pokretanje web mjesta.driver.get ("http://moneyboats.com/");// Uvećaj prozordriver.manage (). window (). maximize ();// Okomito pomicanje prema dolje za 600 pikselajs.executeScript ("window.scrollBy (0,600)");}}
Izlaz : Kada se izvrši gornji kôd, pomaknut će se prema dolje za 600 piksela (vidi sliku dolje).
Sažetak:
JavaScriptExecutor koristi se kada Selenium Webdriver ne uspije kliknuti nijedan element zbog neke poteškoće.
- JavaScriptExecutor pruža dvije metode "executescript" i "executeAsyncScript" za rukovanje.
- Izvršio JavaScript koristeći Selenium Webdriver.
- Ilustrirano je kako kliknuti na element putem JavaScriptExecutor-a, ako selen zbog nekog problema ne uspije kliknuti na element.
- Generirao je prozor 'Upozorenje' pomoću JavaScriptExecutor-a.
- Došlo je do druge stranice pomoću JavaScriptExecutor-a.
- Pomaknuo se prema prozoru pomoću JavaScriptExecutor-a.
- Dohvaćeni URL, naslov i ime domene pomoću JavaScriptExecutor-a.