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 en cours.
Dans ce tutoriel, vous apprendrez -
- Qu'est-ce que JavaScriptExecutor?
- Pourquoi avons-nous besoin de JavaScriptExecutor?
- Méthodes JavaScriptExecutor
- Exemple de executeAsyncScript
- Exemple 1: exécution d'une mise en veille dans le navigateur en cours de test.
- Exemple de executeScript
- 1) Exemple: cliquez sur un bouton pour vous connecter et générer une fenêtre d'alerte
- 2) Exemple: Capturez des données de raclage et accédez à différentes pages
- 3) Exemple: faire défiler vers le bas
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.
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 add-on supplémentaire. Il vous suffit d'importer ( org.openqa.selenium.JavascriptExecutor ) dans le script pour utiliser JavaScriptExecutor.
Méthodes JavaScriptExecutor
- executeAsyncScript
Avec le script asynchrone, 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 élément asynchrone de JavaScript dans le contexte du cadre ou de la fenêtre actuellement sélectionné dans Selenium. Le JS ainsi exécuté est monothread avec une fonction de rappel différente qui s'exécute de manière synchrone.
- executeScript
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 passer des arguments compliqués.
Le script peut renvoyer des valeurs. Les types de données renvoyés sont
- Booléen
- Longue
- Chaîne de caractères
- Lister
- WebElement.
La syntaxe de base de JavascriptExecutor est donnée ci-dessous:
Syntaxe:
JavascriptExecutor js = (JavascriptExecutor) pilote;js.executeScript (Script, Arguments);
- Script - Il s'agit du JavaScript qui doit s'exécuter.
- Arguments - Ce sont les arguments du script. C'est facultatif.
Exemple de executeAsyncScript
L'utilisation de executeAsyncScript permet d'améliorer les performances de votre test. Il permet d'écrire des tests plus comme un codage normal.
ExecSync bloque les autres actions effectuées par le navigateur Selenium mais execAsync ne bloque pas l'action. Il enverra un rappel à la suite de tests côté serveur une fois le script terminé. Cela signifie que tout ce qui se trouve à l'intérieur du script sera exécuté par le navigateur et non par le serveur.
Exemple 1: exécution d'une mise en veille dans le navigateur en cours de test.
Dans ce scénario, nous utiliserons le site de démonstration "Guru99" pour illustrer executeAsyncScript. Dans cet exemple, vous allez
- Lancez le navigateur.
- Ouvrez le site "http://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 qu'il 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;classe publique JavaSE_Test {@TestConnexion public void (){Pilote WebDriver = nouveau FirefoxDriver ();// Création de l'objet d'interface JavascriptExecutor par conversion de typePilote JavascriptExecutor js = (JavascriptExecutor);// Lancement du site.driver.get ("http://demo.guru99.com/V4/");// Agrandir la fenêtredriver.manage (). window (). maximiser ();// Définit le délai d'expiration du script sur 20 secondesdriver.manage (). timeouts (). setScriptTimeout (20, TimeUnit.SECONDS);// Déclarer et définir l'heure de débutlong start_time = System.currentTimeMillis ();// Appelez la méthode executeAsyncScript () pour attendre 5 secondesjs.executeAsyncScript ("window.setTimeout (arguments [arguments.length - 1], 5000);");// Récupère la différence (currentTime - startTime) des heures.System.out.println ("Temps écoulé: + (System.currentTimeMillis () - start_time));}}
Sortie: a bien affiché le temps passé plus de 5 secondes (5000 millisecondes) comme indiqué ci-dessous:
[TestNG] En cours d'exécution:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-387352559 \ testng-customsuite.xmllog4j: WARN Aucun ajout n'a été trouvé pour l'enregistreur (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Veuillez initialiser correctement le système log4j.log4j: WARN Voir http://logging.apache.org/log4j/1.2/faq.html#noconfig pour plus d'informations.Temps écoulé: 5022RÉUSSI: Connexion===============================================Test par défautTests exécutés: 1, échecs: 0, sauts: 0===============================================
Exemple de executeScript
Pour executeScript, 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,
- Lancez le navigateur Web
- ouvrez le site "http://demo.guru99.com/V4/" et
- connectez-vous avec vos 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;classe publique JavaSE_Test {@TestConnexion public void (){Pilote WebDriver = nouveau FirefoxDriver ();// Création de l'objet d'interface JavascriptExecutor par conversion de typePilote JavascriptExecutor js = (JavascriptExecutor);// Lancement du site.driver.get ("http://demo.guru99.com/V4/");Bouton WebElement = driver.findElement (Par.nom ("btnLogin"));// Connectez-vous à Guru99driver.findElement (Par.nom ("uid")). sendKeys ("mngr34926");driver.findElement (Par.nom ("mot de passe")). sendKeys ("amUpenu");// Effectuer Cliquez sur le bouton CONNEXION à l'aide de JavascriptExecutorjs.executeScript ("arguments [0] .click ();", bouton);// Pour générer une fenêtre d'alerte à l'aide de JavascriptExecutor. Afficher le message d'alertejs.executeScript ("alert ('Welcome to Guru99');");}}
Sortie: lorsque le code est exécuté avec succès. Vous observerez
- Clic réussi sur le bouton de connexion et le
- La fenêtre d'alerte s'affichera (voir l'image ci-dessous).
2) Exemple: capturez des données de raclage 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 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;classe publique JavaSE_Test {@TestConnexion public void (){Pilote WebDriver = nouveau FirefoxDriver ();// Création de l'objet d'interface JavascriptExecutor par conversion de typePilote JavascriptExecutor js = (JavascriptExecutor);// Lancement du site.driver.get ("http://demo.guru99.com/V4/");// Récupération du nom de domaine du site. Tostring () change l'objet en nom.String DomainName = js.executeScript ("return document.domain;"). ToString ();System.out.println ("Nom de domaine du site =" + DomainName);// Récupération de l'URL du site. Tostring () change l'objet en nomString url = js.executeScript ("return document.URL;"). ToString ();System.out.println ("URL du site =" + url);// La méthode document.title récupère le nom du titre du site. Tostring () change l'objet en nomString TitleName = js.executeScript ("return document.title;"). ToString ();System.out.println ("Titre de la page =" + TitleName);// Accédez à une nouvelle page, c'est-à-dire pour générer une page d'accès. (lancer une nouvelle URL)js.executeScript ("window.location = 'http://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 page différente comme indiqué ci-dessous.
[TestNG] En cours d'exécution:C: \ Users \ gauravn \ AppData \ Local \ Temp \ testng-eclipse-467151014 \ testng-customsuite.xmllog4j: WARN Aucun ajout n'a été trouvé pour l'enregistreur (org.apache.http.client.protocol.RequestAddCookies).log4j: WARN Veuillez initialiser correctement le système log4j.log4j: WARN Voir http://logging.apache.org/log4j/1.2/faq.html#noconfig pour plus d'informations.Nom de domaine du site = demo.guru99.comURL du site = http://demo.guru99.com/V4/Titre de la page = Page d'accueil de Guru99 BankRÉUSSI: Connexion===============================================Test par défautTests exécutés: 1, échecs: 0, sauts: 0===============================================
3) Exemple: faire 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;classe publique JavaSE_Test {@TestConnexion public void (){Pilote WebDriver = nouveau FirefoxDriver ();// Création de l'objet d'interface JavascriptExecutor par conversion de typePilote JavascriptExecutor js = (JavascriptExecutor);// Lancement du site.driver.get ("http://moneyboats.com/");// Agrandir la fenêtredriver.manage (). window (). maximiser ();// Défilement vertical de 600 pixels vers le basjs.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).
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écution du JavaScript à l'aide de Selenium Webdriver.
- 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» à l'aide de JavaScriptExecutor.
- Accédé à la page différente en utilisant JavaScriptExecutor.
- Faites défiler la fenêtre à l'aide de JavaScriptExecutor.
- URL, titre et nom de domaine récupérés à l'aide de JavaScriptExecutor.