JavaScriptExecutor i Selenium med eksempel
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" demoside 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 til nettstedet som URL til nettstedet, tittelnavn og domenenavn til 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 vil 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) Trekk fra (nรฅvรฆrende tid โ starttid) = passert 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
===============================================
Sammendrag
JavaScriptExecutor brukes nรฅr Selenium Webdriver klarer ikke รฅ klikke pรฅ noe element pรฅ grunn av et eller annet problem.
- JavaScriptExecutor tilbyr to metoder "executescript" og "executeAsyncScript" for รฅ hรฅndtere.
- Utfรธrte JavaSkript ved hjelp av Selenium Webdriver.
- Illustrert hvordan du klikker pรฅ et element JavaScriptExecutor, hvis selen ikke klarer รฅ klikke pรฅ elementet pรฅ grunn av et problem.
- Genererte 'Alert'-vinduet ved hjelp av JavaScriptExecutor.
- Navigerte til den andre siden ved hjelp av JavaScriptExecutor.
- Rullet nedover vinduet ved hjelp av JavaScriptExecutor.
- Hentet URL, tittel og domenenavn ved hjelp av JavaScriptExecutor.






