Was ist JavaScriptExecutor?
JavaScriptExecutor ist eine Schnittstelle, mit der JavaScript über Selenium Webdriver ausgeführt werden kann. JavaScriptExecutor bietet zwei Methoden: "executescript" und "executeAsyncScript", um Javascript für das ausgewählte Fenster oder die aktuelle Seite auszuführen.
In diesem Tutorial lernen Sie -
- Was ist JavaScriptExecutor?
- Warum brauchen wir JavaScriptExecutor?
- JavaScriptExecutor-Methoden
- Beispiel für executeAsyncScript
- Beispiel 1: Durchführen eines Ruhezustands im getesteten Browser.
- Beispiel für executeScript
- 1) Beispiel: Klicken Sie auf eine Schaltfläche, um sich anzumelden und ein Benachrichtigungsfenster zu generieren
- 2) Beispiel: Erfassen Sie Scrape-Daten und navigieren Sie zu verschiedenen Seiten
- 3) Beispiel: Scrollen Sie nach unten
Warum brauchen wir JavaScriptExecutor?
In Selenium Webdriver werden Locators wie XPath, CSS usw. verwendet, um Vorgänge auf einer Webseite zu identifizieren und auszuführen.
Falls diese Locators nicht funktionieren, können Sie JavaScriptExecutor verwenden. Mit JavaScriptExecutor können Sie eine gewünschte Operation für ein Webelement ausführen.
Selen unterstützt javaScriptExecutor. Es ist kein zusätzliches Plugin oder Add-On erforderlich. Sie müssen nur ( org.openqa.selenium.JavascriptExecutor ) in das Skript importieren , um JavaScriptExecutor zu verwenden.
JavaScriptExecutor-Methoden
- executeAsyncScript
Mit dem asynchronen Skript wird Ihre Seite schneller gerendert. Anstatt Benutzer zu zwingen, auf das Herunterladen eines Skripts zu warten, bevor die Seite gerendert wird. Diese Funktion führt ein asynchrones Stück JavaScript im Kontext des aktuell ausgewählten Frames oder Fensters in Selenium aus. Das so ausgeführte JS ist Single-Threaded mit einer verschiedenen Rückruffunktion, die synchron ausgeführt wird.
- executeScript
Diese Methode führt JavaScript im Kontext des aktuell ausgewählten Frames oder Fensters in Selenium aus. Das in dieser Methode verwendete Skript wird im Hauptteil einer anonymen Funktion (einer Funktion ohne Namen) ausgeführt. Wir können ihm auch komplizierte Argumente übergeben.
Das Skript kann Werte zurückgeben. Zurückgegebene Datentypen sind
- Boolescher Wert
- Lange
- String
- Liste
- WebElement.
Die grundlegende Syntax für JavascriptExecutor ist unten angegeben:
Syntax:
JavascriptExecutor js = (JavascriptExecutor) Treiber;js.executeScript (Skript, Argumente);
- Skript - Dies ist das JavaScript, das ausgeführt werden muss.
- Argumente - Dies sind die Argumente für das Skript. Es ist optional.
Beispiel für executeAsyncScript
Mithilfe von executeAsyncScript können Sie die Leistung Ihres Tests verbessern. Es ermöglicht das Schreiben von Tests eher wie eine normale Codierung.
ExecSync blockiert weitere Aktionen, die vom Selenium-Browser ausgeführt werden, execAsync blockiert jedoch keine Aktionen. Sobald das Skript fertig ist, wird ein Rückruf an die serverseitige Testsuite gesendet. Dies bedeutet, dass alles im Skript vom Browser und nicht vom Server ausgeführt wird.
Beispiel 1: Durchführen eines Ruhezustands im getesteten Browser.
In diesem Szenario verwenden wir die Demo-Site "Guru99", um executeAsyncScript zu veranschaulichen. In diesem Beispiel werden Sie
- Starten Sie den Browser.
- Öffnen Sie die Website "http://demo.guru99.com/V4/".
- Die Anwendung wartet 5 Sekunden, um eine weitere Aktion auszuführen.
Schritt 1) Erfassen Sie die Startzeit, bevor Sie 5 Sekunden (5000 Millisekunden) warten, indem Sie die Methode executeAsyncScript () verwenden.
Schritt 2) Warten Sie dann mit executeAsyncScript () 5 Sekunden.
Schritt 3) Holen Sie sich dann die aktuelle Zeit.
Schritt 4) Subtrahieren (aktuelle Zeit - Startzeit) = verstrichene Zeit.
Schritt 5) Überprüfen Sie, ob die Ausgabe länger als 5000 Millisekunden angezeigt werden soll
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;öffentliche Klasse JavaSE_Test {@Prüfungpublic void Login (){WebDriver-Treiber = neuer FirefoxDriver ();// Erstellen des JavascriptExecutor-Schnittstellenobjekts durch TypumwandlungJavascriptExecutor js = (JavascriptExecutor) Treiber;// Starten der Site.driver.get ("http://demo.guru99.com/V4/");// Fenster maximierendriver.manage (). window (). maxim ();// Setze das Script Timeout auf 20 Sekundendriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Deklariere und stelle die Startzeit einlong start_time = System.currentTimeMillis ();// Rufe die Methode executeAsyncScript () auf, um 5 Sekunden zu wartenjs.executeAsyncScript ("window.setTimeout (Argumente [Argumente.Länge - 1], 5000);");// Den Unterschied (currentTime - startTime) der Zeiten ermitteln.System.out.println ("Verstrichene Zeit: + (System.currentTimeMillis () - start_time));}}}}
Ausgabe: Die verstrichene Zeit von mehr als 5 Sekunden (5000 Millisekunden) wurde erfolgreich angezeigt (siehe unten):
[TestNG] Laufen:C: \ Benutzer \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customuite.xmllog4j: WARNUNG Für den Logger wurden keine Appender gefunden (org.apache.http.client.protocol.RequestAddCookies).log4j: WARNUNG Bitte initialisieren Sie das log4j-System ordnungsgemäß.log4j: WARN Weitere Informationen finden Sie unter http://logging.apache.org/log4j/1.2/faq.html#noconfig.Verstrichene Zeit: 5022PASSED: Login==============================================StandardtestTestlauf: 1, Fehler: 0, Überspringen: 0==============================================
Beispiel für executeScript
Für executeScript sehen wir nacheinander drei verschiedene Beispiele.
1) Beispiel: Klicken Sie auf eine Schaltfläche, um sich mit JavaScriptExecutor anzumelden und ein Warnfenster zu generieren.
In diesem Szenario verwenden wir die Demo-Site "Guru99", um JavaScriptExecutor zu veranschaulichen. In diesem Beispiel ist
- Starten Sie den Webbrowser
- Öffnen Sie die Website "http://demo.guru99.com/V4/" und
- Login mit Anmeldeinformationen
- Benachrichtigungsfenster bei erfolgreicher Anmeldung anzeigen.
import 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;öffentliche Klasse JavaSE_Test {@Prüfungpublic void Login (){WebDriver-Treiber = neuer FirefoxDriver ();// Erstellen des JavascriptExecutor-Schnittstellenobjekts durch TypumwandlungJavascriptExecutor js = (JavascriptExecutor) Treiber;// Starten der Site.driver.get ("http://demo.guru99.com/V4/");WebElement button = driver.findElement (By.name ("btnLogin"));// Melde dich bei Guru99 andriver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("password")). sendKeys ("amUpenu");// Ausführen Klicken Sie mit JavascriptExecutor auf die Schaltfläche ANMELDENjs.executeScript ("Argumente [0] .click ();", Schaltfläche);// So generieren Sie ein Warnfenster mit JavascriptExecutor. Zeigen Sie die Warnmeldung anjs.executeScript ("alert ('Willkommen bei Guru99');");}}}}
Ausgabe: Wenn der Code erfolgreich ausgeführt wurde. Sie werden beobachten
- Erfolgreich klicken Sie auf die Login-Schaltfläche und die
- Das Warnfenster wird angezeigt (siehe Bild unten).
2) Beispiel: Erfassen Sie Scrape-Daten und navigieren Sie mit JavaScriptExecutor zu verschiedenen Seiten.
Führen Sie das folgende Selenskript aus. In diesem Beispiel ist
- Starten Sie die Site
- Rufen Sie die Details der Site wie die URL der Site, den Titelnamen und den Domainnamen der Site ab.
- Navigieren Sie dann zu einer anderen Seite.
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;öffentliche Klasse JavaSE_Test {@Prüfungpublic void Login (){WebDriver-Treiber = neuer FirefoxDriver ();// Erstellen des JavascriptExecutor-Schnittstellenobjekts durch TypumwandlungJavascriptExecutor js = (JavascriptExecutor) Treiber;// Starten der Site.driver.get ("http://demo.guru99.com/V4/");// Abrufen des Domainnamens der Site. Tostring () ändert das Objekt in einen Namen.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Domainname der Site =" + DomainName);// URL der Site abrufen. Tostring () ändert das Objekt in einen NamenString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL der Site =" + URL);// Methode document.title ruft den Titelnamen der Site ab. Tostring () ändert das Objekt in einen NamenString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Titel der Seite =" + TitleName);// Navigiere zu neuer Seite, dh um eine Zugriffsseite zu generieren. (Neue URL starten)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}}}
Ausgabe: Wenn der obige Code erfolgreich ausgeführt wurde, werden die Details der Site abgerufen und zu einer anderen Seite navigiert, wie unten gezeigt.
[TestNG] Laufen:C: \ Benutzer \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customuite.xmllog4j: WARNUNG Für den Logger wurden keine Appender gefunden (org.apache.http.client.protocol.RequestAddCookies).log4j: WARNUNG Bitte initialisieren Sie das log4j-System ordnungsgemäß.log4j: WARN Weitere Informationen finden Sie unter http://logging.apache.org/log4j/1.2/faq.html#noconfig.Domainname der Site = demo.guru99.comURL der Site = http://demo.guru99.com/V4/Titel der Seite = Guru99 Bank Home PagePASSED: Login==============================================StandardtestTestlauf: 1, Fehler: 0, Überspringen: 0==============================================
3) Beispiel: Scrollen Sie mit JavaScriptExecutor nach unten.
Führen Sie das folgende Selenskript aus. In diesem Beispiel ist
- Starten Sie die Site
- Scrollen Sie um 600 Pixel nach unten
import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;öffentliche Klasse JavaSE_Test {@Prüfungpublic void Login (){WebDriver-Treiber = neuer FirefoxDriver ();// Erstellen des JavascriptExecutor-Schnittstellenobjekts durch TypumwandlungJavascriptExecutor js = (JavascriptExecutor) Treiber;// Starten der Site.driver.get ("http://moneyboats.com/");// Fenster maximierendriver.manage (). window (). maxim ();// Vertikal um 600 Pixel nach unten scrollenjs.executeScript ("window.scrollBy (0,600)");}}}}
Ausgabe : Wenn der obige Code ausgeführt wird, wird er um 600 Pixel nach unten gescrollt (siehe Abbildung unten).
Zusammenfassung:
JavaScriptExecutor wird verwendet, wenn Selenium Webdriver aufgrund eines Problems kein Element anklickt.
- JavaScriptExecutor bietet zwei Methoden: "executescript" und "executeAsyncScript".
- JavaScript mit Selenium Webdriver ausgeführt.
- Veranschaulicht, wie Sie mit JavaScriptExecutor auf ein Element klicken, wenn Selen aufgrund eines Problems nicht auf ein Element klicken kann.
- Generierte das 'Alert'-Fenster mit JavaScriptExecutor.
- Mit JavaScriptExecutor zu einer anderen Seite navigiert.
- Scrollen Sie mit JavaScriptExecutor durch das Fenster.
- Abgerufener URL, Titel und Domainname mit JavaScriptExecutor.