JavaScriptExecutor i Selenium WebDriver (eksempel)
โก Smart oppsummering
JavaScriptExecutor i Selenium WebDriver kjรธrer JavaSkript i nettleseren nรฅr locatorene ikke fungerer. LessOns dekker eksempler pรฅ executeScript, executeAsyncScript, bla, klikk, varsler og skjemainndata.

Hva er JavaScriptExecutor?
JavaScriptExecutor er et grensesnitt som hjelper til med รฅ utfรธre JavaSkript gjennom Selenium Webdriver. JavaScriptExecutor tilbyr to metoder "executescript" og "executeAsyncScript" for รฅ kjรธre javascript pรฅ det valgte vinduet eller gjeldende side.
Hvorfor trenger vi JavaScriptExecutor?
In Selenium Webdriver, locatorer som XPath, CSS, etc. brukes til รฅ identifisere og utfรธre operasjoner pรฅ en nettside.
I tilfelle disse lokatorene ikke fungerer, kan du bruke JavaScriptExecutor. Du kan bruke JavaScriptExecutor for รฅ utfรธre en รธnsket operasjon pรฅ et webelement.
Selenium stรธtter javaScriptExecutor. Det er ikke behov for en ekstra plugin eller tillegg. Du trenger bare รฅ importere (org.openqa.selenium.Javascriptbyrder) i skriptet som skal brukes JavaScriptExecutor.
JavaScriptExecutor-metoder i Selenium
executeScript
Denne metoden utfรธres JavaScript i sammenheng med den valgte rammen eller vinduet i Selenium. Skriptet som brukes i denne metoden kjรธrer i brรธdteksten til en anonym funksjon (en funksjon uten navn). Vi kan ogsรฅ fรธre kompliserte argumenter til det.
Skriptet kan returnere verdier. Datatyper som returneres er
- boolean
- Lang
- String
- Liste
- WebElement.
JavascriptEksekutรธr syntaks:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Script - Dette er JavaSkript som mรฅ kjรธres.
- argumenter โ Det er argumentene til manuset. Det er valgfritt.
kjรธr AsyncScript
Med asynkront skript gjengis siden din raskere. I stedet for รฅ tvinge brukere til รฅ vente pรฅ at et skript skal lastes ned fรธr siden gjengis. Denne funksjonen vil utfรธre en asynkron del av JavaSkript i sammenheng med den valgte rammen eller vinduet i Selenium. JS-en som utfรธres pรฅ denne mรฅten er entrรฅdet med en forskjellig tilbakeringingsfunksjon som kjรธrer synkront.
Bruksanvisning JavaScriptExecutor i Selenium
Her er en trinn-for-trinn-prosess for hvordan du bruker JavaScriptExecutor i Selenium:
Trinn 1) Importer pakken.
import org.openqa.selenium.JavascriptExecutor;
Trinn 2) Opprett en referanse.
JavascriptExecutor js = (JavascriptExecutor) driver;
Trinn 3) Ring JavascriptEksekutรธr metode.
js.executeScript(script, args);
Eksempel pรฅ Klikk pรฅ et element med JavaScripExecutor i Selenium
For executeScript vil vi se tre forskjellige eksempler ett etter ett.
1) Eksempel: Klikk pรฅ en knapp for รฅ logge pรฅ og generere varselvindu ved hjelp av JavaScriptExecutor.
I dette scenariet vil vi bruke ยซGuru99โ demonstrasjonsside for รฅ illustrere JavaScriptExecutor. I dette eksemplet,
- Start nettleseren
- รฅpne siden https://demo.guru99.com/V4/ og
- logg pรฅ med legitimasjon
- Vis varselvindu ved vellykket pรฅlogging.
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');"); } }
Utgang: Nรฅr koden er utfรธrt. Du vil observere
- Vellykket klikk pรฅ pรฅloggingsknappen og
- Varslingsvindu vil vises (se bildet nedenfor).
2) Eksempel: Registrer skrapedata og naviger til forskjellige sider ved hjelp av JavaScriptExecutor.
Utfรธr selenskriptet nedenfor. I dette eksemplet,
- Start nettstedet
- Hent detaljene fra nettstedet, som f.eks. URL av nettstedet, tittelnavn og domenenavn for nettstedet.
- Naviger deretter til en annen side.
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/'"); } }
Utgang: Nรฅr koden ovenfor er utfรธrt vellykket, vil den hente detaljene til nettstedet og navigere til en annen side som vist nedenfor.
[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) Eksempel: Rull ned med JavaScriptExecutor.
Utfรธr selenskriptet nedenfor. I dette eksemplet,
- Start nettstedet
- Rull ned med 600 piksler
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)"); } }
Produksjon: Nรฅr koden ovenfor er utfรธrt, vil den rulle ned med 600 piksler (se bildet nedenfor).
Eksempel pรฅ executeAsyncScript i Selenium
Bruk av executeAsyncScript bidrar til รฅ forbedre ytelsen til testen din. Det lar skrivetesten mer som en vanlig koding.
ExecSync blokkerer ytterligere handlinger som utfรธres av Selenium nettleser, men execAsync blokkerer ikke handling. Det vil sende en tilbakeringing til serversiden Testing suite nรฅr skriptet er ferdig. Det betyr at alt inne i skriptet vil bli utfรธrt av nettleseren og ikke serveren.
Eksempel 1: Utfรธre en dvale i nettleseren som testes.
I dette scenariet vil vi bruke ยซGuru99โ demoside for รฅ illustrere executeAsyncScript. I dette eksemplet skal du
- Start nettleseren.
- ร pne nettsted https://demo.guru99.com/V4/.
- Applikasjonen venter i 5 sekunder for รฅ utfรธre en ytterligere handling.
Trinn 1) Registrer starttiden fรธr du venter i 5 sekunder (5000 millisekunder) ved รฅ bruke executeAsyncScript()-metoden.
Trinn 2) Bruk deretter executeAsyncScript() for รฅ vente 5 sekunder.
Trinn 3) Fรฅ deretter gjeldende tid.
Trinn 4) Subtract (gjeldende tid โ starttid) = forbigรฅtt tid.
Trinn 5) Bekreft utdataene som skal vise mer enn 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; 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)); } }
Utgang: Viste den passerte tiden mer enn 5 sekunder (5000 millisekunder) som vist nedenfor:
[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 ===============================================






