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.