JavaScriptExecutor i Selenium WebDriver med eksempel

Indholdsfortegnelse:

Anonim

Hvad er JavaScriptExecutor?

JavaScriptExecutor er et interface, der hjælper med at udføre JavaScript via Selenium Webdriver. JavaScriptExecutor giver to metoder "executescript" og "executeAsyncScript" til at køre javascript på det valgte vindue eller den aktuelle side.

I denne vejledning lærer du -

  • Hvad er JavaScriptExecutor?
  • Hvorfor har vi brug for JavaScriptExecutor?
  • JavaScriptExecutor-metoder
  • Eksempel på executeAsyncScript
    • Eksempel 1: At sove i den browser, der testes.
  • Eksempel på executeScript
    • 1) Eksempel: Klik på en knap for at logge ind og generere alarmvindue
    • 2) Eksempel: Capture Scrape Data og naviger til forskellige sider
    • 3) Eksempel: Rul ned ved brug

Hvorfor har vi brug for JavaScriptExecutor?

I Selenium Webdriver bruges locators som XPath, CSS osv. Til at identificere og udføre operationer på en webside.

Hvis disse placatorer ikke fungerer, kan du bruge JavaScriptExecutor. Du kan bruge JavaScriptExecutor til at udføre en ønsket operation på et webelement.

Selenium understøtter javaScriptExecutor. Der er ikke behov for et ekstra plugin eller tilføjelse. Du skal bare importere ( org.openqa.selenium.JavascriptExecutor ) i scriptet for at bruge JavaScriptExecutor.

JavaScriptExecutor-metoder

  1. executeAsyncScript

Med asynkront script gengives din side hurtigere. I stedet for at tvinge brugerne til at vente på, at et script downloades, før siden gengives. Denne funktion udfører et asynkront stykke JavaScript i sammenhæng med den aktuelt valgte ramme eller et vindue i Selen. Den så udførte JS er enkeltgevindet med forskellige tilbagekaldsfunktioner, der kører synkront.

  1. executeScript

Denne metode udfører JavaScript i sammenhæng med den aktuelt valgte ramme eller et vindue i Selen. Scriptet, der bruges i denne metode, kører i kroppen af ​​en anonym funktion (en funktion uden navn). Vi kan også videregive komplicerede argumenter til det.

Scriptet kan returnere værdier. Datatyper returneres er

  • Boolsk
  • Lang
  • Snor
  • Liste
  • WebElement.

Den grundlæggende syntaks for JavascriptExecutor er angivet nedenfor:

Syntaks:

JavascriptExecutor js = (JavascriptExecutor) driver;js.executeScript (script, argumenter);
  • Script - Dette er JavaScript, der skal udføres.
  • Argumenter - Det er argumenterne for scriptet. Det er valgfrit.

Eksempel på executeAsyncScript

Brug af executeAsyncScript hjælper med at forbedre din tests ydeevne. Det giver skrivetest mere som en normal kodning.

ExecSync blokerer for yderligere handlinger, der udføres af Selenium-browseren, men execAsync blokerer ikke handling. Det sender et tilbagekald til testserien på serversiden, når scriptet er færdigt. Det betyder, at alt inde i scriptet udføres af browseren og ikke af serveren.

Eksempel 1: At sove i den browser, der testes.

I dette scenarie bruger vi "Guru99" demo-site til at illustrere executeAsyncScript. I dette eksempel vil du

  • Start browseren.
  • Åbn webstedet "http://demo.guru99.com/V4/".
  • Ansøgning venter i 5 sekunder for at udføre en yderligere handling.

Trin 1) Indfang starttiden, inden du venter i 5 sekunder (5000 millisekunder) ved hjælp af executeAsyncScript () -metoden.

Trin 2) Brug derefter executeAsyncScript () til at vente 5 sekunder.

Trin 3) Få derefter den aktuelle tid.

Trin 4) Træk (aktuel tid - starttid) = bestået tid.

Trin 5) Bekræft det output, det skal vise mere end 5000 millisekunder

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;offentlig klasse JavaSE_Test {@Prøveoffentlig ugyldig login (){WebDriver-driver = ny FirefoxDriver ();// Oprettelse af interfaceobjektet JavascriptExecutor ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Start af webstedet.driver.get ("http://demo.guru99.com/V4/");// Maksimer vinduetdriver.manage (). vindue (). maksimere ();// Indstil script-timeout til 20 sekunderdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Erklær og indstil starttidspunktetlang starttid = System.currentTimeMillis ();// Ring til executeAsyncScript () -metoden for at vente i 5 sekunderjs.executeAsyncScript ("window.setTimeout (argumenter [argumenter.længde - 1], 5000);");// Få forskellen (currentTime - startTime) af gange.System.out.println ("Passed time: + (System.currentTimeMillis () - starttid));}}

Output: Viste den passerede tid med succes i mere end 5 sekunder (5000 milisekunder) som vist nedenfor:

[TestNG] Kører:C: \ Brugere \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-tolluite.xmllog4j: WARN Ingen appenders kunne findes til logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Initialiser log4j-systemet korrekt.log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig for mere info.Bestået tid: 5022PASSED: Login==================================================Standard testTestkørsel: 1, Fejl: 0, Spring over: 0==================================================

Eksempel på executeScript

For executeScript vil vi se tre forskellige eksempler en efter en.

1) Eksempel: Klik på en knap for at logge ind og generere alarmvindue ved hjælp af JavaScriptExecutor.

I dette scenarie bruger vi "Guru99" demo-site til at illustrere JavaScriptExecutor. I dette eksempel

  • Start webbrowseren
  • åbne webstedet "http://demo.guru99.com/V4/" og
  • login med legitimationsoplysninger
  • Vis alarmvindue ved vellykket login.
importer 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;offentlig klasse JavaSE_Test {@Prøveoffentlig ugyldig login (){WebDriver-driver = ny FirefoxDriver ();// Oprettelse af interfaceobjektet JavascriptExecutor ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Start af webstedet.driver.get ("http://demo.guru99.com/V4/");WebElement-knap = driver.findElement (By.name ("btnLogin"));// Log ind på Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("password")) sendKeys ("amUpenu");// Udfør Klik på LOGIN-knappen ved hjælp af JavascriptExecutorjs.executeScript ("argumenter [0]. klik ();", knap);// At generere alarmvindue ved hjælp af JavascriptExecutor. Vis advarselsmeddelelsenjs.executeScript ("alarm ('Velkommen til Guru99');");}}

Output: Når koden udføres med succes. Du vil observere

  • Vellykket klik på login-knappen og
  • Alertvindue vises (se billedet nedenfor).

2) Eksempel: Capture Scrape Data og naviger til forskellige sider ved hjælp af JavaScriptExecutor.

Udfør nedenstående selen-script. I dette eksempel

  • Start webstedet
  • Hent detaljerne på webstedet som URL til webstedet, titlenavn og domænenavn på webstedet.
  • Naviger derefter til en anden side.
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;offentlig klasse JavaSE_Test {@Prøveoffentlig ugyldig login (){WebDriver-driver = ny FirefoxDriver ();// Oprettelse af interfaceobjektet JavascriptExecutor ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Start af webstedet.driver.get ("http://demo.guru99.com/V4/");// Henter domænenavnet på webstedet. Tostring () skift objekt til navn.String DomainName = js.executeScript ("returner dokument.domæne;"). ToString ();System.out.println ("Websteds domænenavn =" + Domænenavn);// Henter webadressens websted. Tostring () skift objekt til navnString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("webstedets URL =" + url);// Method document.title henter titlenavnet på webstedet. Tostring () skift objekt til navnString Titelnavn = js.executeScript ("returner dokument.title;"). ToString ();System.out.println ("Sidens titel =" + Titelnavn);// Naviger til ny side, dvs. generer adgangsside. (start ny url)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}

Output: Når ovenstående kode udføres med succes, henter den detaljerne på webstedet og navigerer til en anden side som vist nedenfor.

[TestNG] Kører:C: \ Brugere \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-tolluite.xmllog4j: WARN Ingen appenders kunne findes til logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Initialiser log4j-systemet korrekt.log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig for mere info.Websteds domænenavn = demo.guru99.comWebstedets URL = http://demo.guru99.com/V4/Sidens titel = Guru99 Banks startsidePASSED: Login==================================================Standard testTestkørsel: 1, Fejl: 0, Spring over: 0================================================== 

3) Eksempel: Rul ned ved hjælp af JavaScriptExecutor.

Udfør nedenstående selen-script. I dette eksempel

  • Start webstedet
  • Rul ned med 600 pixel
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;offentlig klasse JavaSE_Test {@Prøveoffentlig ugyldig login (){WebDriver-driver = ny FirefoxDriver ();// Oprettelse af interfaceobjektet JavascriptExecutor ved Type castingJavascriptExecutor js = (JavascriptExecutor) driver;// Start af webstedet.driver.get ("http://moneyboats.com/");// Maksimer vinduetdriver.manage (). vindue (). maksimere ();// Lodret rul ned med 600 pixelsjs.executeScript ("window.scrollBy (0,600)");}}

Output : Når ovenstående kode udføres, vil den rulle ned med 600 pixels (se billedet nedenfor).

Resumé:

JavaScriptExecutor bruges, når Selenium Webdriver ikke klikker på et element på grund af et eller andet problem.

  • JavaScriptExecutor giver to metoder "eksekverskript" og "udfør AsyncScript" til håndtering.
  • Udførte JavaScript ved hjælp af Selenium Webdriver.
  • Illustreret hvordan man klikker på et element gennem JavaScriptExecutor, hvis selen ikke klikker på elementet på grund af et eller andet problem.
  • Genererede vinduet 'Alert' ved hjælp af JavaScriptExecutor.
  • Navigeret til den anden side ved hjælp af JavaScriptExecutor.
  • Rulede ned ad vinduet ved hjælp af JavaScriptExecutor.
  • Hentet URL, titel og domænenavn ved hjælp af JavaScriptExecutor.