JavaScriptExecutor dans Selenium avec exemple
Qu’est ce qu' 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 USP,EP, BP 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.