Hva er JavaScriptExecutor?
JavaScriptExecutor er et grensesnitt som hjelper til å utføre JavaScript gjennom Selenium Webdriver. JavaScriptExecutor tilbyr to metoder "executescript" og "executeAsyncScript" for å kjøre javascript på det valgte vinduet eller den aktuelle siden.
I denne opplæringen lærer du -
- Hva er JavaScriptExecutor?
- Hvorfor trenger vi JavaScriptExecutor?
- JavaScriptExecutor Methods
- Eksempel på executeAsyncScript
- Eksempel 1: Å sove i nettleseren som testes.
- Eksempel på executeScript
- 1) Eksempel: Klikk på en knapp for å logge inn og generere varslingsvindu
- 2) Eksempel: Registrer skrapedata og naviger til forskjellige sider
- 3) Eksempel: Bla nedover
Hvorfor trenger vi JavaScriptExecutor?
I Selenium Webdriver brukes lokatorer som XPath, CSS, etc. til å identifisere og utføre operasjoner på en webside.
I tilfelle disse lokalisatorene ikke fungerer, kan du bruke JavaScriptExecutor. Du kan bruke JavaScriptExecutor til å utføre en ønsket operasjon på et webelement.
Selen støtter javaScriptExecutor. Det er ikke behov for et ekstra plugin eller tillegg. Du trenger bare å importere ( org.openqa.selenium.JavascriptExecutor ) i skriptet for å bruke JavaScriptExecutor.
JavaScriptExecutor Methods
- executeAsyncScript
Med asynkront skript gjengis siden din raskere. I stedet for å tvinge brukerne til å vente på at et skript skal lastes ned før siden gjengis. Denne funksjonen vil utføre et asynkront stykke JavaScript i sammenheng med den valgte rammen eller vinduet i Selen. Den så utførte JS er en-trådet med en annen tilbakeringingsfunksjon som kjører synkront.
- executeScript
Denne metoden utfører JavaScript i sammenheng med den valgte rammen eller vinduet i Selen. Skriptet som brukes i denne metoden kjører i kroppen til en anonym funksjon (en funksjon uten navn). Vi kan også føre kompliserte argumenter til det.
Skriptet kan returnere verdier. Datatyper returnert er
- Boolsk
- Lang
- String
- Liste
- WebElement.
Den grunnleggende syntaksen for JavascriptExecutor er gitt nedenfor:
Syntaks:
JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript (skript, argumenter);
- Skript - Dette er JavaScript som må utføres.
- Argumenter - Det er argumentene til skriptet. Det er valgfritt.
Eksempel på executeAsyncScript
Ved hjelp av executeAsyncScript hjelper du deg å forbedre ytelsen til testen din. Det tillater skrivetest mer som en vanlig koding.
ExecSync blokkerer ytterligere handlinger som utføres av Selenium-nettleseren, men execAsync blokkerer ikke handling. Det vil ringe tilbake til testserien på serversiden når skriptet er gjort. Det betyr at alt i skriptet vil bli utført av nettleseren og ikke serveren.
Eksempel 1: Å sove i nettleseren som testes.
I dette scenariet vil vi bruke "Guru99" demoside for å illustrere executeAsyncScript. I dette eksemplet vil du
- Start nettleseren.
- Åpne nettstedet "http://demo.guru99.com/V4/".
- Søknad venter i 5 sekunder for å utføre en videre handling.
Trinn 1) Ta opp starttiden før du venter i 5 sekunder (5000 millisekunder) ved å bruke metoden executeAsyncScript ().
Trinn 2) Bruk deretter executeAsyncScript () til å vente i 5 sekunder.
Trinn 3) Så får du gjeldende tid.
Trinn 4) Trekk (nåværende tid - starttid) = bestått tid.
Trinn 5) Bekreft utgangen den skal vise mer enn 5000 millisekunder
importere java.util.concurrent.TimeUnit;importer org.openqa.selenium.JavascriptExecutor;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.annotations.Test;offentlig klasse JavaSE_Test {@Testoffentlig ugyldig pålogging (){WebDriver-driver = ny FirefoxDriver ();// Opprette JavascriptExecutor-grensesnittobjektet ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Lansering av nettstedet.driver.get ("http://demo.guru99.com/V4/");// Maksimer vinduetdriver.manage (). vindu (). maksimere ();// Sett tidsavbrudd for skript til 20 sekunderdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Erklære og angi starttidlang starttid = System.currentTimeMillis ();// Ring metoden executeAsyncScript () for å vente i 5 sekunderjs.executeAsyncScript ("window.setTimeout (argumenter [argumenter.lengde - 1], 5000);");// Få forskjellen (currentTime - startTime) av ganger.System.out.println ("Bestått tid: + (System.currentTimeMillis () - starttid));}}
Utgang: Viste den passerte tiden mer enn 5 sekunder (5000 milisekunder) som vist nedenfor:
[TestNG] Kjører:C: \ Brukere \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-toll-suite.xmllog4j: WARN Ingen appenders ble funnet for logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Vennligst initialiser log4j-systemet riktig.log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig for mer info.Bestått tid: 5022PASSERT: Pålogging==================================================Standard testTestene kjøres: 1, feil: 0, hopper over: 0==================================================
Eksempel på executeScript
For executeScript vil vi se tre forskjellige eksempler en etter en.
1) Eksempel: Klikk på en knapp for å logge på og generere varslingsvindu ved hjelp av JavaScriptExecutor.
I dette scenariet vil vi bruke "Guru99" demoside for å illustrere JavaScriptExecutor. I dette eksemplet,
- Start nettleseren
- åpne nettstedet "http://demo.guru99.com/V4/" og
- pålogging med legitimasjon
- Vis varslingsvindu ved vellykket pålogging.
importer org.openqa.selenium.By;importer org.openqa.selenium.JavascriptExecutor;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.WebElement;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.annotations.Test;offentlig klasse JavaSE_Test {@Testoffentlig ugyldig pålogging (){WebDriver-driver = ny FirefoxDriver ();// Opprette JavascriptExecutor-grensesnittobjektet ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Lansering av nettstedet.driver.get ("http://demo.guru99.com/V4/");WebElement-knapp = driver.findElement (By.name ("btnLogin"));// Logg inn på Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("password")). sendKeys ("amUpenu");// Utfør Klikk på LOGG INN-knappen ved hjelp av JavascriptExecutorjs.executeScript ("argumenter [0]. klikk ();", knapp);// For å generere varslingsvindu ved hjelp av JavascriptExecutor. Vis varselmeldingenjs.executeScript ("alert ('Welcome to Guru99');");}}
Utgang: Når koden er utført vellykket. Du vil observere
- Vellykket klikk på påloggingsknappen og
- Varslingsvindu vises (se bildet nedenfor).
2) Eksempel: Registrer skrapedata og naviger til forskjellige sider ved hjelp av JavaScriptExecutor.
Utfør selen-skriptet nedenfor. I dette eksemplet,
- Start nettstedet
- Hent detaljene på nettstedet, som URL til nettstedet, tittelnavn og domenenavn på nettstedet.
- Naviger deretter til en annen side.
importer org.openqa.selenium.JavascriptExecutor;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.annotations.Test;offentlig klasse JavaSE_Test {@Testoffentlig ugyldig pålogging (){WebDriver-driver = ny FirefoxDriver ();// Opprette JavascriptExecutor-grensesnittobjektet ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Lansering av nettstedet.driver.get ("http://demo.guru99.com/V4/");// Henter domenenavnet til nettstedet. Tostring () endre objekt til navn.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Domenenavn på nettstedet =" + Domenenavn);// Henter nettadressen til nettstedet. Tostring () endre objekt til navnString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL for nettstedet =" + url);// Method document.title henter tittelnavnet på nettstedet. Tostring () endre objekt til navnStreng tittelnavn = js.executeScript ("return document.title;"). ToString ();System.out.println ("Tittel på siden =" + Tittelnavn);// Naviger til ny side, dvs. for å generere tilgangsside. (start ny url)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Utdata: Når ovennevnte kode er utført vellykket, vil den hente detaljene på nettstedet og navigere til en annen side som vist nedenfor.
[TestNG] Kjører:C: \ Brukere \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-toll-suite.xmllog4j: WARN Ingen appenders ble funnet for logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Vennligst initialiser log4j-systemet riktig.log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig for mer info.Nettstedets domenenavn = demo.guru99.comNettadressen til nettstedet = http://demo.guru99.com/V4/Sidens tittel = Guru99 Banks hjemmesidePASSERT: Pålogging==================================================Standard testTestene kjøres: 1, feil: 0, hopper over: 0==================================================
3) Eksempel: Rull ned ved hjelp av JavaScriptExecutor.
Utfør selen-skriptet nedenfor. I dette eksemplet,
- Start nettstedet
- Rull ned med 600 piksler
importer org.openqa.selenium.JavascriptExecutor;importer org.openqa.selenium.WebDriver;importer org.openqa.selenium.firefox.FirefoxDriver;importer org.testng.annotations.Test;offentlig klasse JavaSE_Test {@Testoffentlig ugyldig pålogging (){WebDriver-driver = ny FirefoxDriver ();// Opprette JavascriptExecutor-grensesnittobjektet ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Lansering av nettstedet.driver.get ("http://moneyboats.com/");// Maksimer vinduetdriver.manage (). vindu (). maksimere ();// Vertikalt bla ned 600 pikslerjs.executeScript ("window.scrollBy (0,600)");}}
Utgang : Når ovennevnte kode utføres, vil den rulle ned med 600 piksler (se bildet nedenfor).
Sammendrag:
JavaScriptExecutor brukes når Selenium Webdriver ikke klikker på noe element på grunn av noe problem.
- JavaScriptExecutor tilbyr to metoder "executescript" og "executeAsyncScript" å håndtere.
- Utførte JavaScript ved hjelp av Selenium Webdriver.
- Illustrert hvordan du klikker på et element gjennom JavaScriptExecutor, hvis selen ikke klikker på elementet på grunn av noe problem.
- Genererte "Alert" -vinduet ved hjelp av JavaScriptExecutor.
- Navigerte til den andre siden ved hjelp av JavaScriptExecutor.
- Rullet nedover vinduet ved hjelp av JavaScriptExecutor.
- Hentet URL, tittel og domenenavn ved hjelp av JavaScriptExecutor.