JavaScriptExecutor in Selenium WebDriver met voorbeeld

Inhoudsopgave:

Anonim

Wat is JavaScriptExecutor?

JavaScriptExecutor is een interface die helpt bij het uitvoeren van JavaScript via Selenium Webdriver. JavaScriptExecutor biedt twee methoden "executescript" en "executeAsyncScript" om javascript op het geselecteerde venster of de huidige pagina uit te voeren.

In deze tutorial leer je -

  • Wat is JavaScriptExecutor?
  • Waarom hebben we JavaScriptExecutor nodig?
  • JavaScriptExecutor-methoden
  • Voorbeeld van executeAsyncScript
    • Voorbeeld 1: een slaapstand uitvoeren in de te testen browser.
  • Voorbeeld van executeScript
    • 1) Voorbeeld: klik op een knop om in te loggen en het waarschuwingsvenster te genereren
    • 2) Voorbeeld: Schraapgegevens vastleggen en naar verschillende pagina's navigeren
    • 3) Voorbeeld: omlaag scrollen met

Waarom hebben we JavaScriptExecutor nodig?

In Selenium Webdriver worden locators zoals XPath, CSS, etc. gebruikt om bewerkingen op een webpagina te identificeren en uit te voeren.

Als deze locators niet werken, kunt u JavaScriptExecutor gebruiken. U kunt JavaScriptExecutor gebruiken om een ​​gewenste bewerking op een webelement uit te voeren.

Selenium ondersteunt javaScriptExecutor. Er is geen extra plug-in of add-on nodig. U hoeft alleen ( org.openqa.selenium.JavascriptExecutor ) in het script te importeren om JavaScriptExecutor te gebruiken.

JavaScriptExecutor-methoden

  1. executeAsyncScript

Met asynchroon script wordt uw pagina sneller weergegeven. In plaats van gebruikers te dwingen te wachten tot een script is gedownload voordat de pagina wordt weergegeven. Deze functie voert een asynchroon stukje JavaScript uit in de context van het momenteel geselecteerde frame of venster in Selenium. De zo uitgevoerde JS is single-threaded met een verschillende callback-functie die synchroon loopt.

  1. executeScript

Deze methode voert JavaScript uit in de context van het momenteel geselecteerde frame of venster in Selenium. Het script dat in deze methode wordt gebruikt, wordt uitgevoerd in de hoofdtekst van een anonieme functie (een functie zonder naam). We kunnen er ook ingewikkelde argumenten aan doorgeven.

Het script kan waarden retourneren. De geretourneerde gegevenstypen zijn

  • Boolean
  • Lang
  • Draad
  • Lijst
  • WebElement.

De basissyntaxis voor JavascriptExecutor wordt hieronder gegeven:

Syntaxis:

JavascriptExecutor js = (JavascriptExecutor) stuurprogramma;js.executeScript (script, argumenten);
  • Script - Dit is het JavaScript dat moet worden uitgevoerd.
  • Argumenten - Het zijn de argumenten voor het script. Het is optioneel.

Voorbeeld van executeAsyncScript

Het gebruik van executeAsyncScript helpt om de prestaties van uw test te verbeteren. Het maakt een schrijftest meer als een normale codering mogelijk.

De execSync blokkeert verdere acties die worden uitgevoerd door de Selenium-browser, maar execAsync blokkeert geen actie. Zodra het script is voltooid, wordt er een callback naar de testsuite aan de serverzijde verzonden. Dit betekent dat alles in het script wordt uitgevoerd door de browser en niet door de server.

Voorbeeld 1: een slaapstand uitvoeren in de te testen browser.

In dit scenario zullen we de "Guru99" -demosite gebruiken om executeAsyncScript te illustreren. In dit voorbeeld zul je

  • Start de browser.
  • Open de site "http://demo.guru99.com/V4/".
  • Applicatie wacht 5 seconden om een ​​volgende actie uit te voeren.

Stap 1) Leg de starttijd vast voordat u 5 seconden (5000 milliseconden) wacht met de methode executeAsyncScript ().

Stap 2) Gebruik vervolgens executeAsyncScript () om 5 seconden te wachten.

Stap 3) Haal vervolgens de huidige tijd op.

Stap 4) Aftrekken (huidige tijd - starttijd) = verstreken tijd.

Stap 5) Controleer de uitvoer die meer dan 5000 milliseconden moet weergeven

importeer java.util.concurrent.TimeUnit;importeer org.openqa.selenium.JavascriptExecutor;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;openbare klasse JavaSE_Test {@Testopenbaar ongeldig Inloggen ()​WebDriver-stuurprogramma = nieuwe FirefoxDriver ();// Het JavascriptExecutor-interfaceobject maken door Type castingJavascriptExecutor js = (JavascriptExecutor) stuurprogramma;// Lancering van de site.driver.get ("http://demo.guru99.com/V4/");// Maximaliseer vensterdriver.manage (). window (). maximaliseren ();// Stel de Script Timeout in op 20 secondendriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Declareer en stel de starttijd inlange start_time = System.currentTimeMillis ();// Roep de methode executeAsyncScript () aan om 5 seconden te wachtenjs.executeAsyncScript ("window.setTimeout (arguments [arguments.length - 1], 5000);");// Verkrijg het verschil (currentTime - startTime) van tijden.System.out.println ("Verstreken tijd: + (System.currentTimeMillis () - start_time));​​

Uitvoer: met succes de verstreken tijd meer dan 5 seconden (5000 milliseconden) weergegeven, zoals hieronder weergegeven:

[TestNG] Actief:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-Customuite.xmllog4j: WARN Er zijn geen toevoegingen gevonden voor logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Initialiseer het log4j-systeem correct.log4j: WARN Zie http://logging.apache.org/log4j/1.2/faq.html#noconfig voor meer info.Verstreken tijd: 5022GESLAAGD: Login​StandaardtestTests worden uitgevoerd: 1, fouten: 0, overslaan: 0​

Voorbeeld van executeScript

Voor executeScript zullen we drie verschillende voorbeelden een voor een zien.

1) Voorbeeld: klik op een knop om in te loggen en een waarschuwingsvenster te genereren met JavaScriptExecutor.

In dit scenario zullen we de "Guru99" -demosite gebruiken om JavaScriptExecutor te illustreren. In dit voorbeeld

  • Start de webbrowser
  • open de site "http://demo.guru99.com/V4/" en
  • login met inloggegevens
  • Waarschuwingsvenster weergeven bij succesvol inloggen.
import org.openqa.selenium.By;importeer org.openqa.selenium.JavascriptExecutor;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.WebElement;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;openbare klasse JavaSE_Test {@Testopenbaar ongeldig Inloggen ()​WebDriver-stuurprogramma = nieuwe FirefoxDriver ();// Het JavascriptExecutor-interfaceobject maken door Type castingJavascriptExecutor js = (JavascriptExecutor) stuurprogramma;// Lancering van de site.driver.get ("http://demo.guru99.com/V4/");WebElement-knop = driver.findElement (By.name ("btnLogin"));// Log in op Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("wachtwoord")). sendKeys ("amUpenu");// Uitvoeren Klik op de LOGIN-knop met JavascriptExecutorjs.executeScript ("arguments [0] .click ();", knop);// Om een ​​waarschuwingsvenster te genereren met JavascriptExecutor. Geef het waarschuwingsbericht weerjs.executeScript ("alert ('Welkom bij Guru99');");​​

Uitvoer: wanneer de code met succes is uitgevoerd. U zult observeren

  • Succesvolle klik op de login-knop en het
  • Het waarschuwingsvenster wordt weergegeven (zie onderstaande afbeelding).

2) Voorbeeld: Scrape-gegevens vastleggen en naar verschillende pagina's navigeren met JavaScriptExecutor.

Voer het onderstaande seleniumscript uit. In dit voorbeeld

  • Start de site
  • Haal de details van de site op, zoals de URL van de site, titelnaam en domeinnaam van de site.
  • Navigeer vervolgens naar een andere pagina.
importeer org.openqa.selenium.JavascriptExecutor;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;openbare klasse JavaSE_Test {@Testopenbaar ongeldig Inloggen ()​WebDriver-stuurprogramma = nieuwe FirefoxDriver ();// Het JavascriptExecutor-interfaceobject maken door Type castingJavascriptExecutor js = (JavascriptExecutor) stuurprogramma;// Lancering van de site.driver.get ("http://demo.guru99.com/V4/");// De domeinnaam van de site ophalen. Tostring () verander object in naam.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Domeinnaam van de site =" + domeinnaam);// De URL van de site ophalen. Tostring () verander object in naamString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL van de site =" + url);// Method document.title haalt de titelnaam van de site op. Tostring () verander object in naamString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Titel van de pagina =" + Titelnaam);// Navigeer naar een nieuwe pagina, dwz om een ​​toegangspagina te genereren. (start nieuwe url)js.executeScript ("window.location = 'http://demo.guru99.com/'");​​

Uitvoer: wanneer bovenstaande code met succes is uitgevoerd, haalt het de details van de site op en navigeert naar een andere pagina, zoals hieronder wordt weergegeven.

[TestNG] Actief:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-Customuite.xmllog4j: WARN Er zijn geen toevoegingen gevonden voor logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Initialiseer het log4j-systeem correct.log4j: WARN Zie http://logging.apache.org/log4j/1.2/faq.html#noconfig voor meer info.Domeinnaam van de site = demo.guru99.comURL van de site = http://demo.guru99.com/V4/Titel van de pagina = Guru99 Bank Home PageGESLAAGD: Login​StandaardtestTests worden uitgevoerd: 1, fouten: 0, overslaan: 0​ 

3) Voorbeeld: Scroll naar beneden met JavaScriptExecutor.

Voer het onderstaande seleniumscript uit. In dit voorbeeld

  • Start de site
  • Scrol met 600 pixels naar beneden
importeer org.openqa.selenium.JavascriptExecutor;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;openbare klasse JavaSE_Test {@Testopenbaar ongeldig Inloggen ()​WebDriver-stuurprogramma = nieuwe FirefoxDriver ();// Het JavascriptExecutor-interfaceobject maken door Type castingJavascriptExecutor js = (JavascriptExecutor) stuurprogramma;// Lancering van de site.driver.get ("http://moneyboats.com/");// Maximaliseer vensterdriver.manage (). window (). maximaliseren ();// Verticaal naar beneden scrollen met 600 pixelsjs.executeScript ("window.scrollBy (0,600)");​​

Uitvoer : Wanneer bovenstaande code wordt uitgevoerd, zal deze 600 pixels naar beneden scrollen (zie onderstaande afbeelding).

Overzicht:

JavaScriptExecutor wordt gebruikt wanneer Selenium Webdriver vanwege een probleem niet op een element kan klikken.

  • JavaScriptExecutor biedt twee methoden om "executescript" en "executeAsyncScript" af te handelen.
  • JavaScript uitgevoerd met Selenium Webdriver.
  • Geïllustreerd hoe u op een element klikt via JavaScriptExecutor, als selenium niet op het element klikt vanwege een probleem.
  • Genereerde het 'Alert'-venster met JavaScriptExecutor.
  • Navigeerde naar de andere pagina met JavaScriptExecutor.
  • Door het venster naar beneden gescrold met JavaScriptExecutor.
  • Opgehaalde URL, titel en domeinnaam met JavaScriptExecutor.