JavaScriptExecutor in Selenium met Voorbeeld
Wat is JavaScriptExecutor?
JavaScriptExecutor is een interface die helpt bij het uitvoeren JavaScript door Selenium Webdriver. JavaScriptExecutor biedt twee methoden: “executescript” en “executeAsyncScript” om javascript uit te voeren op het geselecteerde venster of de huidige pagina.
Waarom hebben we nodig JavaScriptExecutor?
In Selenium Webdriver, locators zoals XPath, CSS, etc. worden gebruikt om een webpagina te identificeren en bewerkingen uit te voeren.
Als deze locators niet werken, kunt u deze gebruiken JavaScriptExecutor. U kunt gebruiken JavaScriptExecutor om een gewenste bewerking op een webelement uit te voeren.
Selenium ondersteunt javaScriptExecutor. Er is geen extra plug-in of add-on nodig. Je hoeft alleen maar te importeren (org.openqa.selenium.Javascriptexecuteur) in het script dat u wilt gebruiken JavaScriptExecutor.
JavaScriptExecutor-methoden in Selenium
executeScript
Deze methode wordt uitgevoerd JavaScript in de context van het momenteel geselecteerde frame of venster Selenium. Het script dat bij 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.
JavascriptSyntaxis van de uitvoerder:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Script - Dit is de JavaScript dat uitgevoerd moet worden.
- argumenten – Het zijn de argumenten voor het script. Het is optioneel.
voerAsyncScript uit
Met Asynchronous script wordt uw pagina sneller gerenderd. In plaats van gebruikers te dwingen te wachten tot een script is gedownload voordat de pagina wordt gerenderd. Deze functie voert een asynchroon stuk uit JavaScript in de context van het momenteel geselecteerde frame of venster in SeleniumDe JS die op deze manier wordt uitgevoerd, is single-threaded met verschillende callbackfuncties die synchroon worden uitgevoerd.
Gebruiksaanwijzing JavaScriptExecutor in Selenium
Hier vindt u een stapsgewijs proces voor het gebruik JavaScriptExecutor in Selenium:
Stap 1) Importeer het pakket.
import org.openqa.selenium.JavascriptExecutor;
Stap 2) Maak een referentie.
JavascriptExecutor js = (JavascriptExecutor) driver;
Stap 3) Bel de JavascriptUitvoerder methode.
js.executeScript(script, args);
Voorbeeld van klikken op een element met behulp van JavaScriptExecutor in Selenium
Voor executeScript zullen we drie verschillende voorbeelden één voor één zien.
1) Voorbeeld: klik op een knop om in te loggen en een waarschuwingsvenster te genereren JavaScriptExecutor.
In dit scenario zullen we de demosite “Guru99” gebruiken ter illustratie JavaScriptExecutor. In dit voorbeeld,
- Start de webbrowser
- de site openen https://demo.guru99.com/V4/ en
- inloggen met inloggegevens
- Geef een waarschuwingsvenster weer bij succesvol inloggen.
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');"); } }
Output: Wanneer de code succesvol is uitgevoerd. Je zult observeren
- Klik met succes op de login-knop en de
- Er wordt een waarschuwingsvenster weergegeven (zie onderstaande afbeelding).
2) Voorbeeld: Scrape-gegevens vastleggen en naar verschillende pagina's navigeren met behulp van JavaScriptExecutor.
Voer het onderstaande selenium-script uit. In dit voorbeeld,
- Lanceer de site
- Haal de gegevens van de site op, zoals de URL van de site, de titel en de domeinnaam van de site.
- Navigeer vervolgens naar een andere pagina.
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/'"); } }
Output: Wanneer de bovenstaande code succesvol wordt uitgevoerd, worden de details van de site opgehaald en wordt er naar een andere pagina genavigeerd, zoals hieronder weergegeven.
[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) Voorbeeld: Scroll naar beneden met JavaScriptExecutor.
Voer het onderstaande selenium-script uit. In dit voorbeeld,
- Lanceer de site
- Scroll 600 pixels naar beneden
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)"); } }
uitgang: Wanneer bovenstaande code wordt uitgevoerd, scrollt deze 600 pixels naar beneden (zie onderstaande afbeelding).
Voorbeeld van executeAsyncScript in Selenium
Met behulp van executeAsyncScript verbetert u de prestaties van uw test. Het maakt het schrijven van tests meer vergelijkbaar met normale codering.
de directeurSync blokkeert verdere acties die worden uitgevoerd door de Selenium browser, maar execAsync blokkeert geen actie. Het stuurt een callback naar de server-side Testen suite zodra het script klaar is. Het betekent dat alles in het script door de browser wordt uitgevoerd en niet door de server.
Voorbeeld 1: Een slaapstand uitvoeren in de geteste browser.
In dit scenario gebruiken we de demosite “Guru99” om executeAsyncScript te illustreren. In dit voorbeeld zult u
- Start de browser.
- Open site https://demo.guru99.com/V4/.
- De toepassing wacht 5 seconden voordat een verdere actie wordt uitgevoerd.
Stap 1) Leg de starttijd vast voordat u 5 seconden (5000 milliseconden) wacht met behulp van 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 of de uitvoer meer dan 5000 milliseconden moet weergeven
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)); } }
Output: De verstreken tijd van meer dan 5 seconden (5000 milliseconden) is succesvol weergegeven, zoals hieronder weergegeven:
[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 ===============================================
Samenvatting
JavaScriptExecutor wordt gebruikt wanneer Selenium Webdriver kan vanwege een probleem niet op enig element klikken.
- JavaScriptExecutor biedt twee methoden: “executescript” en “executeAsyncScript”.
- Uitgevoerd de JavaScript met behulp van Selenium Webdriver.
- Geïllustreerd hoe u op een element kunt klikken JavaScriptExecutor, als Selenium vanwege een probleem niet op een element kan klikken.
- Het 'Alert'-venster gegenereerd met behulp van JavaScriptExecutor.
- Navigeer naar de andere pagina met behulp van JavaScriptExecutor.
- Blader door het venster met behulp van JavaScriptExecutor.
- URL, titel en domeinnaam opgehaald met behulp van JavaScriptExecutor.