JavaScriptExecutor dans Selenium avec exemple
Qu'est-ce que le JavaExรฉcuteur de script ?
JavaScriptExecutor est une interface qui permet d'exรฉcuter JavaScรฉnario ร travers Selenium Pilote Web. JavaScriptExecutor fournit deux mรฉthodes ยซ executescript ยป et ยซ executeAsyncScript ยป pour exรฉcuter JavaScript sur la fenรชtre sรฉlectionnรฉe ou la page actuelle.
Pourquoi avons-nous besoin JavaExรฉcuteur de script ?
In Selenium Webdriver, des localisateurs comme XPath, CSS, etc. sont utilisรฉs pour identifier et effectuer des opรฉrations sur une page Web.
Au cas oรน ces localisateurs ne fonctionneraient pas, vous pouvez utiliser JavaScriptExecutor. Vous pouvez utiliser JavaScriptExecutor pour effectuer une opรฉration souhaitรฉe sur un รฉlรฉment Web.
Selenium prend en charge javaScriptExecutor. Il nโy a pas besoin dโun plugin ou dโun module complรฉmentaire supplรฉmentaire. Il vous suffit d'importer (org.openqa.sรฉlรฉnium.JavascriptExรฉcuteur) dans le script quant ร l'utilisation JavaExรฉcuteur de script.
JavaMรฉthodes ScriptExecutor dans Selenium
exรฉcuterScript
Cette mรฉthode exรฉcute Javascรฉnario dans le contexte du cadre ou de la fenรชtre actuellement sรฉlectionnรฉ dans Selenium. Le script utilisรฉ dans cette mรฉthode s'exรฉcute dans le corps d'une fonction anonyme (une fonction sans nom). On peut aussi lui transmettre des arguments compliquรฉs.
Le script peut renvoyer des valeurs. Les types de donnรฉes renvoyรฉs sont
- Boolean
- Long
- Chaรฎne
- Liste
- WebElement.
JavascriptSyntaxe de l'exรฉcuteur :
JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript(Script,Arguments);
- scรฉnario - C'est le JavaScript qui doit รชtre exรฉcutรฉ.
- Arguments โ Ce sont les arguments du script. C'est facultatif.
exรฉcuterAsyncScript
Avec un script asynchrone, votre page s'affiche plus rapidement. Au lieu de forcer les utilisateurs ร attendre qu'un script soit tรฉlรฉchargรฉ avant que la page ne s'affiche. Cette fonction exรฉcutera une partie asynchrone de JavaScript dans le contexte du cadre ou de la fenรชtre actuellement sรฉlectionnรฉ dans SeleniumLe JS ainsi exรฉcutรฉ est monothread avec une fonction de rappel variรฉe qui s'exรฉcute de maniรจre synchrone.
Comment l'utiliser ? JavaScriptExecutor dans Selenium
Voici un processus รฉtape par รฉtape sur la faรงon d'utiliser JavaScriptExecutor dans Selenium:
รtape 1) Importez le package.
import org.openqa.selenium.JavascriptExecutor;
รtape 2) Crรฉez une rรฉfรฉrence.
JavascriptExecutor js = (JavascriptExecutor) driver;
รtape 3) Appeler le JavascriptMรฉthode exรฉcuteur.
js.executeScript(script, args);
Exemple de clic sur un รฉlรฉment en utilisant JavaScriptExecutor dans Selenium
Pour performScript, nous verrons trois exemples diffรฉrents un par un.
1) Exemple : cliquez sur un bouton pour vous connecter et gรฉnรฉrer une fenรชtre d'alerte ร l'aide de JavaExรฉcuteur de script.
Dans ce scรฉnario, nous utiliserons le site de dรฉmonstration ยซ Guru99 ยป pour illustrer JavaScriptExecutor. Dans cet exemple,
- Lancer le navigateur Web
- ouvrir le site https://demo.guru99.com/V4/ et
- se connecter avec les identifiants
- Afficher la fenรชtre d'alerte en cas de connexion rรฉussie.
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');");
}
}
Sortie : Lorsque le code est exรฉcutรฉ avec succรจs. Vous observerez
- Cliquez avec succรจs sur le bouton de connexion et sur le
- Une fenรชtre d'alerte s'affichera (voir l'image ci-dessous).
2) Exemple : capturez les donnรฉes de scrape et accรฉdez ร diffรฉrentes pages ร l'aide de JavaExรฉcuteur de script.
Exรฉcutez le script sรฉlรฉnium ci-dessous. Dans cet exemple,
- Lancer le site
- Rรฉcupรฉrez les dรฉtails du site comme l'URL du site, le nom du titre et le nom de domaine du site.
- Accรฉdez ensuite ร une autre page.
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/'");
}
}
Sortie : Lorsque le code ci-dessus est exรฉcutรฉ avec succรจs, il rรฉcupรจre les dรฉtails du site et accรจde ร une autre page, comme indiquรฉ ci-dessous.
[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) Exemple : faites dรฉfiler vers le bas en utilisant JavaExรฉcuteur de script.
Exรฉcutez le script sรฉlรฉnium ci-dessous. Dans cet exemple,
- Lancer le site
- Faites dรฉfiler vers le bas de 600 pixels
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)");
}
}
Sortie: Lorsque le code ci-dessus est exรฉcutรฉ, il dรฉfilera vers le bas de 600 pixels (voir l'image ci-dessous).
Exemple de executeAsyncScript dans Selenium
Lโutilisation dโexecuteAsyncScript permet dโamรฉliorer les performances de votre test. Il permet d'รฉcrire un test plus comme un codage normal.
L'exรฉcutifSync bloque d'autres actions effectuรฉes par le Selenium navigateur mais execAsync ne bloque pas l'action. Il enverra un rappel au cรดtรฉ serveur Tests suite une fois le script terminรฉ. Cela signifie que tout ce qui se trouve dans le script sera exรฉcutรฉ par le navigateur et non par le serveur.
Exemple 1 : Effectuer une mise en veille dans le navigateur testรฉ.
Dans ce scรฉnario, nous utiliserons le site de dรฉmonstration ยซ Guru99 ยป pour illustrer executeAsyncScript. Dans cet exemple, vous allez
- Lancez le navigateur.
- Site ouvert https://demo.guru99.com/V4/.
- L'application attend 5 secondes pour effectuer une autre action.
รtape 1) Capturez l'heure de dรฉbut avant d'attendre 5 secondes (5000 millisecondes) ร l'aide de la mรฉthode executeAsyncScript().
รtape 2) Ensuite, utilisez executeAsyncScript() pour attendre 5 secondes.
รtape 3) Ensuite, obtenez lโheure actuelle.
รtape 4) Soustraire (heure actuelle โ heure de dรฉbut) = temps รฉcoulรฉ.
รtape 5) Vรฉrifiez la sortie, elle doit afficher plus de 5000 millisecondes
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));
}
}
Sortie : Affichage rรฉussi du temps รฉcoulรฉ pendant plus de 5 secondes (5000 millisecondes), comme indiquรฉ ci-dessous :
[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
===============================================
Rรฉsumรฉ
JavaScriptExecutor est utilisรฉ lorsque Selenium Webdriver ne parvient ร cliquer sur aucun รฉlรฉment en raison d'un problรจme.
- JavaScriptExecutor fournit deux mรฉthodes ยซ executescript ยป et ยซ executeAsyncScript ยป ร gรฉrer.
- Exรฉcutรฉ le JavaScript utilisant Selenium Pilote Web.
- Illustrรฉ comment cliquer sur un รฉlรฉment via JavaScriptExecutor, si le sรฉlรฉnium ne parvient pas ร cliquer sur l'รฉlรฉment en raison d'un problรจme.
- Gรฉnรฉration de la fenรชtre 'Alerte' en utilisant JavaExรฉcuteur de script.
- Naviguรฉ vers la page diffรฉrente en utilisant JavaExรฉcuteur de script.
- Faites dรฉfiler la fenรชtre vers le bas en utilisant JavaExรฉcuteur de script.
- URL, titre et nom de domaine rรฉcupรฉrรฉs ร l'aide de JavaExรฉcuteur de script.






