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.
Mindergy pรฅ kontoret 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.






