Vad är JavaScriptExecutor?
JavaScriptExecutor är ett gränssnitt som hjälper till att köra JavaScript via 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.
I den här handledningen lär du dig -
- Vad är JavaScriptExecutor?
- Varför behöver vi JavaScriptExecutor?
- JavaScriptExecutor-metoder
- Exempel på executeAsyncScript
- Exempel 1: Att sova i webbläsaren som testas.
- Exempel på executeScript
- 1) Exempel: Klicka på en knapp för att logga in och skapa varningsfönster
- 2) Exempel: Fånga in skrapdata och navigera till olika sidor
- 3) Exempel: Bläddra nedanvändning
Varför behöver vi JavaScriptExecutor?
I Selenium Webdriver används lokatorer som XPath, CSS, etc. för att identifiera och utföra åtgärder på en webbsida.
Om dessa lokaliserare 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 finns inget behov av ett extra plugin eller tillägg. Du behöver bara importera ( org.openqa.selenium.JavascriptExecutor ) i skriptet för att använda JavaScriptExecutor.
JavaScriptExecutor-metoder
- executeAsyncScript
Med Asynkron skript återges din sida snabbare. Istället för att tvinga användare att vänta på att ett skript ska laddas ner innan sidan återges. Denna funktion kör en asynkron JavaScript-bit i samband med den valda ramen eller fönstret i Selen. Den så utförda JS-enheten är engängad med olika återuppringningsfunktioner som körs synkront.
- executeScript
Den här metoden kör JavaScript i samband med den valda ramen eller fönstret i Selen. Skriptet som används i den här metoden körs i kroppen av en anonym funktion (en funktion utan namn). Vi kan också skicka komplicerade argument till det.
Skriptet kan returnera värden. Datatyper som returneras är
- Boolean
- Lång
- Sträng
- Lista
- WebElement.
Den grundläggande syntaxen för JavascriptExecutor ges nedan:
Syntax:
JavascriptExecutor js = (JavascriptExecutor) drivrutin;js.executeScript (skript, argument);
- Skript - Detta är JavaScript som måste köras.
- Argument - Det är argumenten till manuset. Det är valfritt.
Exempel på executeAsyncScript
Användning av executeAsyncScript hjälper till att förbättra testets prestanda. Det gör att skrivtest mer som en vanlig kodning.
ExecSync blockerar ytterligare åtgärder som utförs av Selenium-webbläsaren men execAsync blockerar inte åtgärder. Det skickar en återuppringning till serversidan Testing Suite när skriptet är klart. Det betyder att allt inuti skriptet körs av webbläsaren och inte av servern.
Exempel 1: Att sova i webbläsaren som testas.
I detta scenario använder vi demosidan "Guru99" för att illustrera executeAsyncScript. I det här exemplet kommer du
- Starta webbläsaren.
- Öppna webbplatsen "http://demo.guru99.com/V4/".
- Ansökan väntar i 5 sekunder för att utföra en ytterligare åtgärd.
Steg 1) Fånga starttiden innan du väntar i 5 sekunder (5000 millisekunder) med executeAsyncScript () -metoden.
Steg 2) Använd sedan executeAsyncScript () för att vänta 5 sekunder.
Steg 3) Få sedan aktuell tid.
Steg 4) Subtrahera (aktuell tid - starttid) = passerad tid.
Steg 5) Kontrollera utmatningen som den ska visa mer än 5000 millisekunder
importera java.util.concurrent.TimeUnit;importera org.openqa.selenium.JavascriptExecutor;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.annotations.Test;offentlig klass JavaSE_Test {@Testapublic void Login (){WebDriver-drivrutin = ny FirefoxDriver ();// Skapa gränssnittsobjektet JavascriptExecutor genom typgjutningJavascriptExecutor js = (JavascriptExecutor) drivrutin;// Starta webbplatsen.driver.get ("http://demo.guru99.com/V4/");// Maximera fönstretdriver.manage (). fönster (). maximera ();// Ställ timeout för skript till 20 sekunderdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Deklarera och ställ in starttidenlång starttid = System.currentTimeMillis ();// Ring metoden executeAsyncScript () för att vänta i 5 sekunderjs.executeAsyncScript ("window.setTimeout (argument [argument.längd - 1], 5000);");// Få skillnaden (currentTime - startTime) av gånger.System.out.println ("Passed time: + (System.currentTimeMillis () - starttid));}}
Output: Visade den passerade tiden framgångsrikt mer än 5 sekunder (5000 milisekunder) som visas nedan:
[TestNG] Running:C: \ Användare \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-tolluite.xmllog4j: WARN Inga appenders kunde hittas för logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Initiera log4j-systemet ordentligt.log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig för mer information.Passerad tid: 5022GÅNG: Inloggning=================================================StandardtestTestkörningar: 1, misslyckanden: 0, hoppar över: 0=================================================
Exempel på executeScript
För executeScript ser vi tre olika exempel en efter en.
1) Exempel: Klicka på en knapp för att logga in och skapa varningsfönster med JavaScriptExecutor.
I det här scenariot kommer vi att använda "Guru99" demo-webbplats för att illustrera JavaScriptExecutor. I detta exempel,
- Starta webbläsaren
- öppna webbplatsen "http://demo.guru99.com/V4/" och
- logga in med referenser
- Visa varningsfönster vid lyckad inloggning.
importera org.openqa.selenium.By;importera org.openqa.selenium.JavascriptExecutor;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.WebElement;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.annotations.Test;offentlig klass JavaSE_Test {@Testapublic void Login (){WebDriver-drivrutin = ny FirefoxDriver ();// Skapa gränssnittsobjektet JavascriptExecutor genom typgjutningJavascriptExecutor js = (JavascriptExecutor) drivrutin;// Starta webbplatsen.driver.get ("http://demo.guru99.com/V4/");WebElement-knapp = driver.findElement (By.name ("btnLogin"));// Logga in på Guru99driver.findElement (By.name ("uid")). sendKeys ("mngr34926");driver.findElement (By.name ("password")). sendKeys ("amUpenu");// Utför Klicka på inloggningsknappen med JavascriptExecutorjs.executeScript ("argument [0] .klicka ();", knapp);// Att skapa varningsfönster med JavascriptExecutor. Visa varningsmeddelandetjs.executeScript ("alert ('Welcome to Guru99');");}}
Output: När koden körs framgångsrikt. Du kommer att observera
- Framgångsrikt klicka på inloggningsknappen och
- Varningsfönstret visas (se bilden nedan).
2) Exempel: Fånga in skrapdata och navigera till olika sidor med JavaScriptExecutor.
Kör nedanstående selenskript. I detta exempel,
- Starta webbplatsen
- Hämta information om webbplatsen som URL för webbplatsen, titeln och webbplatsens domännamn.
- Navigera sedan till en annan sida.
importera org.openqa.selenium.JavascriptExecutor;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.annotations.Test;offentlig klass JavaSE_Test {@Testapublic void Login (){WebDriver-drivrutin = ny FirefoxDriver ();// Skapa gränssnittsobjektet JavascriptExecutor genom typgjutningJavascriptExecutor js = (JavascriptExecutor) drivrutin;// Starta webbplatsen.driver.get ("http://demo.guru99.com/V4/");// Hämtar webbplatsens domännamn. Tostring () ändra objekt till namn.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Webbplatsens domännamn =" + Domännamn);// Hämtar webbadressen till webbplatsen. Tostring () ändra objekt till namnString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("Webbplatsens URL =" + url);// Method document.title hämta webbplatsens titelnamn. Tostring () ändra objekt till namnString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Sidans titel =" + Titelnamn);// Navigera till ny sida, dvs för att skapa åtkomstsida. (starta ny webbadress)js.executeScript ("window.location = 'http://demo.guru99.com/'");}}
Output: När ovanstående kod körs framgångsrikt hämtar den informationen på webbplatsen och navigerar till en annan sida som visas nedan.
[TestNG] Running:C: \ Användare \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-tolluite.xmllog4j: WARN Inga appenders kunde hittas för logger (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Initiera log4j-systemet ordentligt.log4j: WARN Se http://logging.apache.org/log4j/1.2/faq.html#noconfig för mer information.Webbplatsens domännamn = demo.guru99.comWebbplatsens URL = http://demo.guru99.com/V4/Sidans titel = Guru99 Banks hemsidaGÅNG: Inloggning=================================================StandardtestTestkörningar: 1, misslyckanden: 0, hoppar över: 0=================================================
3) Exempel: Rulla ned genom att använda JavaScriptExecutor.
Kör nedanstående selenskript. I detta exempel,
- Starta webbplatsen
- Rulla ner med 600 pixlar
importera org.openqa.selenium.JavascriptExecutor;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.annotations.Test;offentlig klass JavaSE_Test {@Testapublic void Login (){WebDriver-drivrutin = ny FirefoxDriver ();// Skapa gränssnittsobjektet JavascriptExecutor genom typgjutningJavascriptExecutor js = (JavascriptExecutor) drivrutin;// Starta webbplatsen.driver.get ("http://moneyboats.com/");// Maximera fönstretdriver.manage (). fönster (). maximera ();// Vertikalt bläddra ner med 600 pixlarjs.executeScript ("window.scrollBy (0,600)");}}
Utgång : När ovanstående kod körs, rullar den ner med 600 pixlar (se bilden nedan).
Sammanfattning:
JavaScriptExecutor används när Selenium Webdriver inte klickar på något element på grund av något problem.
- JavaScriptExecutor tillhandahåller två metoder "executescript" och "executeAsyncScript" att hantera.
- Körde JavaScript med Selenium Webdriver.
- Illustrerat hur man klickar på ett element genom JavaScriptExecutor, om selen inte klickar på elementet på grund av något problem.
- Skapade fönstret 'Alert' med JavaScriptExecutor.
- Navigerade till den andra sidan med JavaScriptExecutor.
- Scrollade ner genom fönstret med JavaScriptExecutor.
- Hämtad URL, titel och domännamn med JavaScriptExecutor.