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.

JavaExécuteur de script

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,

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

  • 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 JavaExécuteur de script

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.

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

[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 JavaExécuteur de script

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

Faites défiler vers le bas en utilisant JavaExécuteur de script

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

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