Kaj je JavaScriptExecutor?
JavaScriptExecutor je vmesnik, ki pomaga izvajati JavaScript prek programa Selenium Webdriver. JavaScriptExecutor ponuja dve metodi "executescript" in "executeAsyncScript" za zagon javascripta v izbranem oknu ali trenutni strani.
V tej vadnici boste izvedeli -
- Kaj je JavaScriptExecutor?
- Zakaj potrebujemo JavaScriptExecutor?
- Metode JavaScriptExecutor
- Primer executeAsyncScript
- Primer 1: Spanje v preizkušenem brskalniku.
- Primer executeScript
- 1) Primer: Kliknite gumb za prijavo in ustvarjanje okna opozorila
- 2) Primer: Zajemite podatke za strganje in se pomaknite na različne strani
- 3) Primer: Pomaknite se navzdol
Zakaj potrebujemo JavaScriptExecutor?
V programu Selenium Webdriver se lokatorji, kot so XPath, CSS itd., Uporabljajo za prepoznavanje in izvajanje operacij na spletni strani.
V primeru, da ti lokatorji ne delujejo, lahko uporabite JavaScriptExecutor. S pomočjo JavaScriptExecutor lahko izvedete želeno operacijo spletnega elementa.
Selenium podpira javaScriptExecutor. Dodatni vtičnik ali dodatek ni potreben. V skript morate samo uvoziti ( org.openqa.selenium.JavascriptExecutor ) kot uporabiti JavaScriptExecutor.
Metode JavaScriptExecutor
- executeAsyncScript
Z asinhronim skriptom se vaša stran hitreje upodobi. Namesto da bi prisilili uporabnike, da čakajo, da se skript prenese, preden se stran upodobi. Ta funkcija bo izvedla asinhroni del JavaScript v kontekstu trenutno izbranega okvira ali okna v programu Selenium. Tako izveden JS je enonitni z različno funkcijo povratnega klica, ki deluje sinhrono.
- executeScript
Ta metoda izvaja JavaScript v kontekstu trenutno izbranega okvira ali okna v programu Selenium. Skript, uporabljen pri tej metodi, se izvaja v telesu anonimne funkcije (funkcije brez imena). Vanjo lahko posredujemo tudi zapletene argumente.
Skript lahko vrne vrednosti. Vrnjeni podatki so
- Logično
- dolga
- Vrvica
- Seznam
- WebElement.
Osnovna sintaksa za JavascriptExecutor je podana spodaj:
Sintaksa:
JavascriptExecutor js = (JavascriptExecutor) gonilnik;js.executeScript (skript, argumenti);
- Skripta - to je JavaScript, ki ga je treba zagnati.
- Argumenti - to so argumenti v skriptu. Neobvezno.
Primer executeAsyncScript
Uporaba executeAsyncScript pomaga izboljšati delovanje testa. Omogoča pisanje testa bolj kot običajno kodiranje.
ExecSync blokira nadaljnja dejanja, ki jih izvaja brskalnik Selenium, vendar execAsync ne blokira dejanj. Ko bo skript končan, bo strežniku poslal povratni klic za testiranje. To pomeni, da bo vse znotraj skripta izvajal brskalnik in ne strežnik.
Primer 1: Spanje v preizkušenem brskalniku.
V tem primeru bomo za ponazoritev executeAsyncScript uporabili predstavitveno spletno mesto "Guru99". V tem primeru boste
- Zaženite brskalnik.
- Odprite spletno mesto "http://demo.guru99.com/V4/".
- Aplikacija čaka 5 sekund, da izvede nadaljnje dejanje.
Korak 1) Ujemite začetni čas, preden počakate 5 sekund (5000 milisekund) z metodo executeAsyncScript ().
2. korak) Nato s pomočjo executeAsyncScript () počakajte 5 sekund.
Korak 3) Nato dobite trenutni čas.
Korak 4) Odštevanje (trenutni čas - začetni čas) = pretečeni čas.
Korak 5) Preverite izhod, ki naj bo prikazan več kot 5000 milisekund
uvoz 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;javni razred JavaSE_Test {@Testjavna praznina Prijava (){Gonilnik WebDriver = novi FirefoxDriver ();// Ustvarjanje predmeta vmesnika JavascriptExecutor z vlivanjem tipaJavascriptExecutor js = (JavascriptExecutor) gonilnik;// Zagon spletnega mesta.driver.get ("http://demo.guru99.com/V4/");// Povečaj oknodriver.manage (). window (). maximize ();// Nastavite časovno omejitev skripta na 20 sekunddriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Navedite in nastavite začetni časdolg start_time = System.currentTimeMillis ();// Pokličite metodo executeAsyncScript (), da počakate 5 sekundjs.executeAsyncScript ("window.setTimeout (argumenti [argument.length - 1], 5000);");// Pridobimo razliko (currentTime - startTime) v časih.System.out.println ("Pretečeni čas: + (System.currentTimeMillis () - start_time));}}
Izhod: Uspešno prikazan pretečeni čas več kot 5 sekund (5000 milisekund), kot je prikazano spodaj:
[TestNG] Tek:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: OPOZORILO Za zapisovalnik datotek ni mogoče najti pripisov (org.apache.http.client.protocol.RequestAddCookies).log4j: OPOZORILO Prosimo, pravilno inicializirajte sistem log4j.log4j: OPOZORILO Za več informacij glejte http://logging.apache.org/log4j/1.2/faq.html#noconfig.Pretečeni čas: 5022MENJENO: Prijava=================================================Privzeti testIzvedeni testi: 1, neuspehi: 0, preskoki: 0=================================================
Primer executeScript
Za executeScript bomo videli enega za drugim tri različne primere.
1) Primer: Kliknite gumb za prijavo in ustvarjanje okna opozorila z uporabo JavaScriptExecutor.
V tem primeru bomo za ponazoritev JavaScriptExecutor uporabili predstavitveno spletno mesto "Guru99". V tem primeru
- Zaženite spletni brskalnik
- odprite spletno mesto "http://demo.guru99.com/V4/" in
- prijava s poverilnicami
- Prikaže okno z opozorilom ob uspešni 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;javni razred JavaSE_Test {@Testjavna praznina Prijava (){Gonilnik WebDriver = novi FirefoxDriver ();// Ustvarjanje predmeta vmesnika JavascriptExecutor z vlivanjem tipaJavascriptExecutor js = (JavascriptExecutor) gonilnik;// Zagon spletnega mesta.driver.get ("http://demo.guru99.com/V4/");Gumb WebElement = driver.findElement (By.name ("btnLogin"));// Prijava v Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("geslo")). sendKeys ("amUpenu");// S klikom na gumb PRIJAVA uporabite JavascriptExecutorjs.executeScript ("argumenti [0] .click ();", gumb);// Ustvari okno opozorila z uporabo JavascriptExecutor. Prikažite opozorilno sporočilojs.executeScript ("opozorilo ('Dobrodošli v Guru99');");}}
Izhod: Ko je koda uspešno izvedena. Opazovali boste
- Uspešen klik na gumb za prijavo in
- Prikaže se okno z opozorili (glej sliko spodaj).
2) Primer: Zajemite podatke za strganje in se pomaknite na različne strani z uporabo JavaScriptExecutor.
Izvedite spodnji skript selena. V tem primeru
- Zaženite spletno mesto
- Pridobite podrobnosti spletnega mesta, kot so URL spletnega mesta, ime naslova in ime domene spletnega mesta.
- Nato se pomaknite na drugo stran.
import org.openqa.selenium.JavascriptExecutor;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javni razred JavaSE_Test {@Testjavna praznina Prijava (){Gonilnik WebDriver = novi FirefoxDriver ();// Ustvarjanje predmeta vmesnika JavascriptExecutor z vlivanjem tipaJavascriptExecutor js = (JavascriptExecutor) gonilnik;// Zagon spletnega mesta.driver.get ("http://demo.guru99.com/V4/");// Pridobivanje domenskega imena spletnega mesta. Tostring () spremeni predmet v ime.Niz DomainName = js.executeScript ("vrni document.domain;"). ToString ();System.out.println ("Ime domene spletnega mesta =" + Ime domene);// Pridobivanje URL-ja spletnega mesta. Tostring () spremeni predmet v imeNiz url = js.executeScript ("vrni dokument.URL;"). ToString ();System.out.println ("URL spletnega mesta =" + url);// Metoda document.title pridobi naslov Naslov spletnega mesta. Tostring () spremeni predmet v imeNiz TitleName = js.executeScript ("vrni document.title;"). ToString ();System.out.println ("Naslov strani =" + TitleName);// Pomaknite se na novo stran, tj. Za ustvarjanje strani za dostop. (zaženi nov url)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Rezultat: Ko je zgornja koda uspešno izvedena, bo pridobila podrobnosti spletnega mesta in se pomaknila na drugo stran, kot je prikazano spodaj.
[TestNG] Tek:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: OPOZORILO Za zapisovalnik datotek ni mogoče najti pripisov (org.apache.http.client.protocol.RequestAddCookies).log4j: OPOZORILO Prosimo, pravilno inicializirajte sistem log4j.log4j: OPOZORILO Za več informacij glejte http://logging.apache.org/log4j/1.2/faq.html#noconfig.Domena spletnega mesta = demo.guru99.comURL spletnega mesta = http://demo.guru99.com/V4/Naslov strani = Domača stran banke Guru99MENJENO: Prijava=================================================Privzeti testIzvedeni testi: 1, neuspehi: 0, preskoki: 0=================================================
3) Primer: Pomaknite se navzdol z uporabo JavaScriptExecutor.
Izvedite spodnji skript selena. V tem primeru
- Zaženite spletno mesto
- Pomaknite se navzdol za 600 slikovnih pik
import org.openqa.selenium.JavascriptExecutor;uvoz org.openqa.selenium.WebDriver;uvoz org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;javni razred JavaSE_Test {@Testjavna praznina Prijava (){Gonilnik WebDriver = novi FirefoxDriver ();// Ustvarjanje predmeta vmesnika JavascriptExecutor z vlivanjem tipaJavascriptExecutor js = (JavascriptExecutor) gonilnik;// Zagon spletnega mesta.driver.get ("http://moneyboats.com/");// Povečaj oknodriver.manage (). window (). maximize ();// Navpično pomikanje navzdol za 600 slikovnih pikjs.executeScript ("window.scrollBy (0,600)");}}
Izhod : Ko je zgornja koda izvedena, se bo pomaknila navzdol za 600 pik (glej sliko spodaj).
Povzetek:
JavaScriptExecutor se uporablja, kadar Selenium Webdriver zaradi določene težave ne klikne nobenega elementa.
- JavaScriptExecutor ponuja dve metodi "executescript" in "executeAsyncScript" za obdelavo.
- Izvedel JavaScript z uporabo programa Selenium Webdriver.
- Ilustrirano je, kako kliknemo element prek JavaScriptExecutorja, če selen zaradi neke težave ne klikne elementa.
- Ustvari okno »Opozorilo« z uporabo JavaScriptExecutor.
- Do druge strani je prišlo z uporabo JavaScriptExecutor.
- Pomaknil se po oknu s pomočjo JavaScriptExecutor.
- Preneseni URL, naslov in ime domene z uporabo JavaScriptExecutor.