JavaScriptExecutor in Selenium mit Beispiel
Was ist JavaSkriptExecutor?
JavaScriptExecutor ist eine Schnittstelle, die bei der Ausführung hilft JavaSkript durch Selenium Webtreiber. JavaScriptExecutor bietet zwei Methoden „executescript“ und „executeAsyncScript“, um JavaScript im ausgewählten Fenster oder auf der aktuellen Seite auszuführen.
Warum brauchen wir JavaSkriptExecutor?
In Selenium Webdriver und Locators wie XPath, CSS usw. werden verwendet, um eine Webseite zu identifizieren und Vorgänge darauf auszuführen.
Falls diese Locators nicht funktionieren, können Sie verwenden JavaScriptExecutor. Sie können verwenden JavaScriptExecutor zum Ausführen einer gewünschten Operation an einem Webelement.
Selenium unterstützt javaScriptExecutor. Es ist kein zusätzliches Plugin oder Add-on erforderlich. Sie müssen nur importieren (org.openqa.selenium.JavascriptTestamentsvollstrecker) im Skript als JavaSkriptExecutor.
JavaScriptExecutor-Methoden in Selenium
Skript ausführen
Diese Methode wird ausgeführt JavaSkript im Kontext des aktuell ausgewählten Rahmens oder Fensters in Selenium. 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. Die zurückgegebenen Datentypen sind
- Boolean
- lang
- Schnur
- Liste
- WebElement.
JavascriptExecutor-Syntax:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Skript - Dies ist das JavaSkript, das ausgeführt werden muss.
- Argumente – Es sind die Argumente zum Skript. Es ist optional.
ausführenAsyncScript
Mit asynchronem Skript wird Ihre Seite schneller gerendert. Anstatt Benutzer zu zwingen, auf den Download eines Skripts zu warten, bevor die Seite gerendert wird. Diese Funktion führt einen asynchronen Teil aus JavaSkript im Kontext des aktuell ausgewählten Rahmens oder Fensters in Selenium. Das so ausgeführte JS ist ein Single-Thread mit verschiedenen Rückruffunktionen, die synchron ausgeführt werden.
Wie man den Dienst nutzt JavaScriptExecutor in Selenium
Hier finden Sie eine Schritt-für-Schritt-Anleitung zur Verwendung JavaScriptExecutor in Selenium:
Schritt 1) Importieren Sie das Paket.
import org.openqa.selenium.JavascriptExecutor;
Schritt 2) Erstellen Sie eine Referenz.
JavascriptExecutor js = (JavascriptExecutor) driver;
Schritt 3) Ruf den JavascriptExecutor-Methode.
js.executeScript(script, args);
Beispiel für „Klicken Sie auf ein Element mit JavaScripExecutor in Selenium
Für „executeScript“ sehen wir nacheinander drei verschiedene Beispiele.
1) Beispiel: Klicken Sie auf eine Schaltfläche, um sich anzumelden und ein Warnfenster zu generieren mit JavaSkriptExecutor.
In diesem Szenario verwenden wir die Demo-Site „Guru99“ zur Veranschaulichung JavaIn diesem Beispiel
- Starten Sie den Webbrowser
- Öffnen Sie die Seite https://demo.guru99.com/V4/ und
- Login mit Zugangsdaten
- Warnfenster 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; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("https://demo.guru99.com/V4/"); WebElement button =driver.findElement(By.name("btnLogin")); //Login to Guru99 driver.findElement(By.name("uid")).sendKeys("mngr34926"); driver.findElement(By.name("password")).sendKeys("amUpenu"); //Perform Click on LOGIN button using JavascriptExecutor js.executeScript("arguments[0].click();", button); //To generate Alert window using JavascriptExecutor. Display the alert message js.executeScript("alert('Welcome to Guru99');"); } }
Ausgang: Wenn der Code erfolgreich ausgeführt wurde. Sie werden beobachten
- Erfolgreicher Klick auf den Login-Button und die
- Es wird ein Warnfenster angezeigt (siehe Abbildung unten).
2) Beispiel: Scrape-Daten erfassen und zu verschiedenen Seiten navigieren mit JavaSkriptExecutor.
Führen Sie das folgende Selenium-Skript aus. In diesem Beispiel
- Starten Sie die Site
- Rufen Sie die Details der Site ab, beispielsweise die URL der Site, den Titelnamen und den Domänennamen der Site.
- 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; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("https://demo.guru99.com/V4/"); //Fetching the Domain Name of the site. Tostring() change object to name. String DomainName = js.executeScript("return document.domain;").toString(); System.out.println("Domain name of the site = "+DomainName); //Fetching the URL of the site. Tostring() change object to name String url = js.executeScript("return document.URL;").toString(); System.out.println("URL of the site = "+url); //Method document.title fetch the Title name of the site. Tostring() change object to name String TitleName = js.executeScript("return document.title;").toString(); System.out.println("Title of the page = "+TitleName); //Navigate to new Page i.e to generate access page. (launch new url) js.executeScript("window.location = 'https://demo.guru99.com/'"); } }
Ausgang: Wenn der obige Code erfolgreich ausgeführt wird, werden die Sitedetails abgerufen und, wie unten gezeigt, zu einer anderen Seite navigiert.
[TestNG] Running: C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-467151014\testng-customsuite.xml log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Domain name of the site = demo.guru99.com URL of the site = https://demo.guru99.com/V4/ Title of the page = Guru99 Bank Home Page PASSED: Login =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 ===============================================
3) Beispiel: Scrollen Sie nach unten mit JavaSkriptExecutor.
Führen Sie das folgende Selenium-Skript aus. In diesem Beispiel
- 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; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("http://moneyboats.com/"); //Maximize window driver.manage().window().maximize(); //Vertical scroll down by 600 pixels js.executeScript("window.scrollBy(0,600)"); } }
Ausgang: Wenn der obige Code ausgeführt wird, scrollt er um 600 Pixel nach unten (siehe Bild unten).
Beispiel für „executeAsyncScript“ in Selenium
Die Verwendung von „executeAsyncScript“ trägt dazu bei, die Leistung Ihres Tests zu verbessern. Dadurch können Tests eher wie normale Codierung geschrieben werden.
Die ExekutiveSync blockiert weitere Aktionen, die von ausgeführt werden Selenium Browser, aber execAsync blockiert die Aktion nicht. Es wird ein Rückruf an die Serverseite gesendet Testen suite, sobald das Skript fertig ist. Das bedeutet, dass alles im Skript vom Browser und nicht vom Server ausgeführt wird.
Beispiel 1: Durchführen eines Ruhezustands im zu testenden Browser.
In diesem Szenario verwenden wir die Demo-Site „Guru99“, um „executeAsyncScript“ zu veranschaulichen. In diesem Beispiel werden Sie
- Starten Sie den Browser.
- Seite öffnen https://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) Verwenden Sie dann „executeAsyncScript()“, um 5 Sekunden zu warten.
Schritt 3) Rufen Sie dann die aktuelle Uhrzeit ab.
Schritt 4) Subtrahieren (aktuelle Zeit – Startzeit) = vergangene Zeit.
Schritt 5) Überprüfen Sie, ob die Ausgabe mehr als 5000 Millisekunden anzeigen sollte
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; public class JavaSE_Test { @Test public void Login() { WebDriver driver= new FirefoxDriver(); //Creating the JavascriptExecutor interface object by Type casting JavascriptExecutor js = (JavascriptExecutor)driver; //Launching the Site. driver.get("https://demo.guru99.com/V4/"); //Maximize window driver.manage().window().maximize(); //Set the Script Timeout to 20 seconds driver.manage().timeouts().setScriptTimeout(20, TimeUnit.SECONDS); //Declare and set the start time long start_time = System.currentTimeMillis(); //Call executeAsyncScript() method to wait for 5 seconds js.executeAsyncScript("window.setTimeout(arguments[arguments.length - 1], 5000);"); //Get the difference (currentTime - startTime) of times. System.out.println("Passed time: " + (System.currentTimeMillis() - start_time)); } }
Ausgang: Die verstrichene Zeit (mehr als 5 Sekunden (5000 Millisekunden)) wurde erfolgreich angezeigt, wie unten dargestellt:
[TestNG] Running: C:\Users\gauravn\AppData\Local\Temp\testng-eclipse-387352559\testng-customsuite.xml log4j:WARN No appenders could be found for logger (org.apache.http.client.protocol.RequestAddCookies). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Passed time: 5022 PASSED: Login =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 ===============================================
Zusammenfassung
JavaScriptExecutor wird verwendet, wenn Selenium Webdriver kann aufgrund eines Problems nicht auf ein Element klicken.
- JavaScriptExecutor bietet zwei Methoden „executescript“ und „executeAsyncScript“ zur Verarbeitung.
- Habe das ausgeführt JavaSkript verwenden Selenium Webtreiber.
- Veranschaulicht, wie man auf ein Element klickt durch JavaScriptExecutor, wenn Selenium aufgrund eines Problems nicht auf das Element klicken kann.
- Das Fenster „Alarm“ wurde erstellt mit JavaSkriptExecutor.
- Zur anderen Seite navigiert mit JavaSkriptExecutor.
- Im Fenster nach unten gescrollt mit JavaSkriptExecutor.
- URL, Titel und Domänenname abgerufen mit JavaSkriptExecutor.