JavaScriptExecutor i Selenium med exempel
Vad är JavaScriptExecutor?
JavaScriptExecutor är ett gränssnitt som hjälper till att köra JavaManus igenom Selenium Webdriver. JavaScriptExecutor tillhandahåller två metoder "executescript" och "executeAsyncScript" för att köra javascript på det valda fönstret eller den aktuella sidan.
Varför behöver vi JavaScriptExecutor?
In Selenium Webdriver, lokaliseringsverktyg som XPath, CSS, etc. används för att identifiera och utföra operationer på en webbsida.
Om dessa lokaliseringsanordningar inte fungerar kan du använda JavaScriptExecutor. Du kan använda JavaScriptExecutor för att utföra en önskad operation på ett webbelement.
Selenium stöder javaScriptExecutor. Det behövs inget extra plugin eller tillägg. Du behöver bara importera (org.openqa.selenium.JavascriptTestamentsexekutor) i skriptet som ska användas JavaScriptExecutor.
JavaScriptExecutor-metoder i Selenium
executeScript
Denna metod körs JavaScript i sammanhanget för den för närvarande valda ramen eller fönstret i Selenium. Skriptet som används i den här metoden körs i kroppen av en anonym funktion (en funktion utan namn). Vi kan också föra komplicerade argument till det.
Skriptet kan returnera värden. Datatyper som returneras är
- Boolean
- Lång
- Sträng
- Lista
- WebElement.
JavascriptExekutorsyntax:
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- Script - Det här är JavaSkript som måste köras.
- Argument – Det är argumenten till manuset. Det är valfritt.
kör AsyncScript
Med asynkront skript renderas din sida snabbare. Istället för att tvinga användare att vänta på att ett skript ska laddas ner innan sidan renderas. Denna funktion kommer att exekvera en asynkron del av JavaSkript i sammanhanget för den för närvarande valda ramen eller fönstret i Selenium. JS:en som körs på detta sätt är enkeltrådad med olika återuppringningsfunktioner som körs synkront.
Användning JavaScriptExecutor i Selenium
Här är en steg-för-steg-process om hur du använder JavaScriptExecutor i Selenium:
Steg 1) Importera paketet.
import org.openqa.selenium.JavascriptExecutor;
Steg 2) Skapa en referens.
JavascriptExecutor js = (JavascriptExecutor) driver;
Steg 3) Ring JavascriptExekutormetod.
js.executeScript(script, args);
Exempel på Klicka på ett element med hjälp av JavaScripExecutor i Selenium
För executeScript kommer vi att se tre olika exempel ett efter ett.
1) Exempel: Klicka på en knapp för att logga in och generera varningsfönster med JavaScriptExecutor.
I det här scenariot kommer vi att använda "Guru99" demosida för att illustrera JavaScriptExecutor. I det här exemplet,
- Starta webbläsaren
- öppna webbplatsen https://demo.guru99.com/V4/ och
- logga in med inloggningsuppgifter
- Visa varningsfönster vid lyckad inloggning.
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');"); } }
Produktion: När koden exekveras framgångsrikt. Du kommer att observera
- Lyckad klicka på inloggningsknappen och
- Varningsfönster kommer att visas (se bilden nedan).
2) Exempel: Fånga skrapa data och navigera till olika sidor med hjälp av JavaScriptExecutor.
Kör selenskriptet nedan. I det här exemplet,
- Starta webbplatsen
- Hämta informationen om webbplatsen som webbadressen till webbplatsen, titelnamn och domännamn för webbplatsen.
- Navigera sedan till en annan sida.
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/'"); } }
Produktion: När ovanstående kod exekveras framgångsrikt, kommer den att hämta informationen om webbplatsen och navigera till en annan sida som visas nedan.
[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) Exempel: Scrolla ner med JavaScriptExecutor.
Kör selenskriptet nedan. I det här exemplet,
- Starta webbplatsen
- Scrolla ner med 600 pixlar
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)"); } }
Produktion: När ovanstående kod exekveras kommer den att rulla ner med 600 pixlar (se bilden nedan).
Exempel på executeAsyncScript i Selenium
Att använda executeAsyncScript hjälper till att förbättra prestandan för ditt test. Det tillåter skrivtest mer som en vanlig kodning.
ExecSync blockerar ytterligare åtgärder som utförs av Selenium webbläsare men execAsync blockerar inte åtgärder. Det kommer att skicka en återuppringning till serversidan Testning svit när skriptet är klart. Det betyder att allt inuti skriptet kommer att köras av webbläsaren och inte servern.
Exempel 1: Utföra en viloläge i webbläsaren som testas.
I det här scenariot kommer vi att använda "Guru99" demosida för att illustrera executeAsyncScript. I det här exemplet kommer du
- Starta webbläsaren.
- Öppna webbplats https://demo.guru99.com/V4/.
- Applikationen väntar i 5 sekunder för att utföra ytterligare en åtgärd.
Steg 1) Fånga starttiden innan du väntar i 5 sekunder (5000 millisekunder) med hjälp av metoden executeAsyncScript().
Steg 2) Använd sedan executeAsyncScript() för att vänta 5 sekunder.
Steg 3) Hämta sedan aktuell tid.
Steg 4) Subtrahera (aktuell tid – starttid) = passerad tid.
Steg 5) Verifiera utdata som ska visa mer än 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)); } }
Produktion: Visade den passerade tiden mer än 5 sekunder (5000 milisekunder) som visas nedan:
[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 ===============================================
Sammanfattning
JavaScriptExecutor används när Selenium Webdriver misslyckas med att klicka på något element på grund av något problem.
- JavaScriptExecutor tillhandahåller två metoder "executescript" och "executeAsyncScript" att hantera.
- Utförde JavaSkript med hjälp av Selenium Webdriver.
- Illustrerat hur man klickar på ett element JavaScriptExecutor, om selen misslyckas med att klicka på elementet på grund av något problem.
- Genererade fönstret 'Alert' med hjälp av JavaScriptExecutor.
- Navigerade till den andra sidan med hjälp av JavaScriptExecutor.
- Scrollade ner i fönstret med hjälp av JavaScriptExecutor.
- Hämtade URL, titel och domännamn med hjälp av JavaScriptExecutor.