JavaScriptExecutor i Selenium WebDriver med eksempel

Innholdsfortegnelse:

Anonim

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

  1. 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.

  1. 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.