JavaScriptExecutor dans Selenium avec exemple

Qu'est-ce que JavaScriptExecutor?

JavaScriptExecutor est une interface qui permet d'exécuter JavaScript via Selenium Webdriver. JavaScriptExecutor fournit deux méthodes « executescript » et « executeAsyncScript » pour exécuter javascript sur la fenêtre sélectionnée ou la page actuelle.

Exécuteur JavaScript

Pourquoi avons-nous besoin de JavaScriptExecutor ?

Dans Selenium Webdriver, des localisateurs tels que XPath, CSS, etc. sont utilisés pour identifier et effectuer des opérations sur une page Web.

Si ces localisateurs ne fonctionnent 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.selenium.JavascriptExecutor) dans le script pour utiliser JavaScriptExecutor.

Méthodes JavaScriptExecutor dans Selenium

exécuterScript

Cette méthode exécute JavaScript 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
  • Location
  • Chaîne
  • Liste
  • WebElement.

Syntaxe JavascriptExecutor :

JavascriptExecutor js = (JavascriptExecutor) driver;  
js.executeScript(Script,Arguments);
  • scénario – C’est le JavaScript qui doit s’exécuter.
  • Arguments – Ce sont les arguments du script. C'est facultatif.

exécuterAsyncscénario

Avec unsyncscript hronique, votre page s'affiche plus rapidement. Au lieu de forcer les utilisateurs à attendre le téléchargement d'un script avant le rendu de la page. Cette fonction exécutera un asyncmorceau de JavaScript hrone dans le contexte du cadre ou de la fenêtre actuellement sélectionné dans Selenium. Le JS ainsi exécuté est monothread avec diverses fonctions de rappel qui s'exécutent synchroneusement.

Comment 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) Appelez la méthode JavascriptExecutor.

js.executeScript(script, args);

Exemple de clic sur un élément à l'aide de JavaScripExecutor 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 JavaScriptExecutor.

Dans ce scénario, nous utiliserons le site de démonstration « Guru99 » pour illustrer JavaScriptExecutor. Dans cet exemple,

Cliquez sur un bouton pour vous connecter et générer une fenêtre d'alerte à l'aide de JavaScriptExecutor

  • 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).

Cliquez sur un bouton pour vous connecter et générer une fenêtre d'alerte à l'aide de JavaScriptExecutor

2) Exemple : capturez les données Scrape et accédez à différentes pages à l'aide de JavaScriptExecutor.

Exécutez le script sélénium ci-dessous. Dans cet exemple,

  • Lancer le site
  • Récupérez le details 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érera le details du site et accédez à une autre page comme indiqué ci-dessous.

Capturez les données de récupération et accédez à différentes pages à l'aide de JavaScriptExecutor

[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
===============================================

Capturez les données de récupération et accédez à différentes pages à l'aide de JavaScriptExecutor

3) Exemple : faites défiler vers le bas à l'aide de JavaScriptExecutor.

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).

Faites défiler vers le bas à l'aide de JavaScriptExecutor

Exemple d'exécutionAsyncScript en sélénium

Utilisation de l'exécutionAsyncScript, contribue à 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 navigateur Selenium mais execAsync ne bloque pas l'action. Il enverra un rappel au côté serveur Essais 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 exécutéAsyncScénario. Dans cet exemple, vous allez

Étape 1) Capturez l'heure de début avant d'attendre 5 secondes (5000 millisecondes) à l'aide d'executeAsyncMéthode Script().

Étape 2) Ensuite, utilisezexecuteAsyncScript() 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 pas à cliquer sur un élément en raison d'un problème.

  • JavaScriptExecutor fournit deux méthodes « executescript » et « executeAsyncScript »à gérer.
  • Exécuté le JavaScript à l'aide de Selenium Webdriver.
  • Illustré comment cliquer sur un élément via JavaScriptExecutor, si Selenium ne parvient pas à cliquer sur l'élément en raison d'un problème.
  • Génération de la fenêtre 'Alerte' à l'aide de JavaScriptExecutor.
  • Navigation vers la page différente à l'aide de JavaScriptExecutor.
  • J'ai fait défiler la fenêtre à l'aide de JavaScriptExecutor.
  • URL, titre et nom de domaine récupérés à l'aide de JavaScriptExecutor.