Sélénium - Grille

Selenium Grid est un outil qui distribue les tests sur plusieurs machines physiques ou virtuelles afin que nous puissions exécuter des scripts en parallèle (simultanément). Il accélère considérablement le processus de test sur les navigateurs et sur toutes les plates-formes en nous donnant des commentaires rapides et précis.

Selenium Grid nous permet d'exécuter plusieurs instances de tests WebDriver ou Selenium Remote Control en parallèle qui utilisent la même base de code, par conséquent le code n'a PAS besoin d'être présent sur le système qu'ils exécutent. Le package selenium-server-standalone inclut Hub, WebDriver et Selenium RC pour exécuter les scripts dans la grille.

Selenium Grid a un Hub et un Node.

  • Hub- Le hub peut également être compris comme un serveur qui agit comme le point central où les tests seraient déclenchés. Un Selenium Grid n'a qu'un seul Hub et il est lancé une fois sur une seule machine.

  • Node- Les nœuds sont les instances Selenium qui sont attachées au Hub qui exécutent les tests. Il peut y avoir un ou plusieurs nœuds dans une grille qui peuvent être de n'importe quel système d'exploitation et peuvent contenir n'importe lequel des navigateurs pris en charge par Selenium.

Architecture

Le diagramme suivant montre l'architecture de Selenium Grid.

Travailler avec Grid

Afin de travailler avec le Grid, nous devons suivre certains protocoles. Écoutez ci-dessous les principales étapes de ce processus -

  • Configuration du concentrateur
  • Configuration des nœuds
  • Développer le script et préparer le fichier XML
  • Exécution des tests
  • Analyse des résultats

Laissez-nous discuter de chacune de ces étapes en détail.

Configuration du concentrateur

Step 1 - Téléchargez le dernier fichier JAR autonome de Selenium Server à partir de http://docs.seleniumhq.org/download/. Téléchargez-le en cliquant sur la version ci-dessous.

Step 2- Démarrez le Hub en lançant le serveur Selenium à l'aide de la commande suivante. Nous allons maintenant utiliser le port '4444' pour démarrer le hub.

Note - Assurez-vous qu'aucune autre application n'est en cours d'exécution sur le port # 4444.

java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000

Step 3 - Ouvrez maintenant le navigateur et accédez à l'URL http // localhost: 4444 à partir du Hub (le système sur lequel vous avez exécuté l'étape 2).

Step 4- Cliquez maintenant sur le lien 'console' et cliquez sur 'view config'. La configuration du hub serait affichée comme suit. Pour l'instant, nous n'avons pas de nœuds, nous ne pourrons donc pas voir les détails.

Configuration des nœuds

Step 1- Connectez-vous au nœud (sur lequel vous souhaitez exécuter les scripts) et placez le 'selenium-server-standalone-2.42.2' dans un dossier. Nous devons pointer vers le JAR selenium-server-standalone lors du lancement des nœuds.

Step 2 - Lancez FireFox Node à l'aide de la commande ci-dessous.

java -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role node -hub http://10.30.217.157:4444/grid/register
   -browser browserName = firefox -port 5555

Où,

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Emplacement du fichier Jar autonome du serveur Selenium (sur la machine Node)

http://10.30.217.157:4444 = Adresse IP du Hub et 4444 est le port du Hub

browserName = firefox (Paramètre pour spécifier le nom du navigateur sur les nœuds)

5555 = Port sur lequel Firefox Node serait opérationnel.

Step 3- Après avoir exécuté la commande, revenez au Hub. Accédez à l'URL - http://10.30.217.157:4444 et le hub afficherait maintenant le nœud qui lui est attaché.

Step 4- Lançons maintenant le nœud Internet Explorer. Pour lancer le nœud IE, nous devons avoir le pilote Internet Explorer téléchargé sur la machine du nœud.

Step 5 - Pour télécharger le pilote Internet Explorer, accédez à http://docs.seleniumhq.org/download/et téléchargez le fichier approprié en fonction de l'architecture de votre système d'exploitation. Après avoir téléchargé, décompressez le fichier exe et placez-y un dossier qui doit être référencé lors du lancement des nœuds IE.

Step 6 - Lancez IE à l'aide de la commande suivante.

C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role webdriver -hub http://10.30.217.157:4444/grid/register
   -browser browserName = ie,platform = WINDOWS -port 5558

Où,

D: \ IEDriverServer.exe = L'emplacement du pilote IE téléchargé (sur la machine Node)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Emplacement du fichier Jar autonome du serveur Selenium (sur la machine Node)

http://10.30.217.157:4444 = Adresse IP du Hub et 4444 est le port du Hub

browserName = ie (Paramètre pour spécifier le nom du navigateur sur les nœuds)

5558 = Port sur lequel le nœud IE serait opérationnel.

Step 7- Après avoir exécuté la commande, revenez au Hub. Accédez à l'URL - http://10.30.217.157:4444 et le hub afficherait maintenant le nœud IE qui lui est attaché.

Step 8- Lançons maintenant Chrome Node. Pour lancer le nœud Chrome, nous devons télécharger le pilote Chrome sur la machine du nœud.

Step 9 - Pour télécharger le pilote Chrome, accédez à http://docs.seleniumhq.org/download/ puis accédez à la zone Pilotes de navigateur tiers et cliquez sur le numéro de version «2.10» comme indiqué ci-dessous.

Step 10- Téléchargez le pilote en fonction du type de votre système d'exploitation. Nous l'exécuterons sur l'environnement Windows, par conséquent, nous téléchargerons le pilote Windows Chrome. Après avoir téléchargé, décompressez le fichier exe et placez-le dans un dossier qui doit être référencé lors du lancement des nœuds chrome.

Step 11 - Lancez Chrome à l'aide de la commande suivante.

C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe 
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar 
   -role webdriver -hub  http://10.30.217.157:4444/grid/register 
   -browser browserName = chrome, platform = WINDOWS -port 5557

Où,

D: \ chromedriver.exe = L'emplacement du pilote Chrome téléchargé (sur la machine Node)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Emplacement du fichier Jar autonome du serveur Selenium (sur la machine Node)

http://10.30.217.157:4444 = Adresse IP du Hub et 4444 est le port du Hub

browserName = chrome (Paramètre pour spécifier le nom du navigateur sur les nœuds)

5557 = Port sur lequel Chrome Node serait opérationnel.

Step 12- Après avoir exécuté la commande, revenez au Hub. Accédez à l'URL - http://10.30.217.157:4444 et le hub afficherait maintenant le nœud chrome qui lui est attaché.

Développer le script et préparer le fichier XML

Step 1- Nous développerons un test en utilisant TestNG. Dans l'exemple suivant, nous allons lancer chacun de ces navigateurs à l'aide de webDriver distant. Il peut transmettre leurs capacités au pilote afin que le pilote dispose de toutes les informations à exécuter sur les nœuds.

Le paramètre de navigateur serait passé du fichier "XML".

package TestNG;

import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.net.MalformedURLException;

public class TestNGClass {
   public WebDriver driver;
   public String URL, Node;
   protected ThreadLocal<RemoteWebDriver> threadDriver = null;
   
   @Parameters("browser")
   @BeforeTest
   public void launchapp(String browser) throws MalformedURLException {
      String URL = "http://www.calculator.net";
      
      if (browser.equalsIgnoreCase("firefox")) {
         System.out.println(" Executing on FireFox");
         String Node = "http://10.112.66.52:5555/wd/hub";
         DesiredCapabilities cap = DesiredCapabilities.firefox();
         cap.setBrowserName("firefox");
         
         driver = new RemoteWebDriver(new URL(Node), cap);
         // Puts an Implicit wait, Will wait for 10 seconds before throwing exception
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("chrome")) {
         System.out.println(" Executing on CHROME");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("chrome");
         String Node = "http://10.112.66.52:5557/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("ie")) {
         System.out.println(" Executing on IE");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("ie");
         String Node = "http://10.112.66.52:5558/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
         
         // Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else {
         throw new IllegalArgumentException("The Browser Type is Undefined");
      }
   }
   
   @Test
   public void calculatepercent() {
      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();     	
      
      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
      
      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");
      
      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");
      
      // Click Calculate Button
      // driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();
      
      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);
      
      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }
   
   @AfterTest
   public void closeBrowser() {
      driver.quit();
   }
}

Step 2- Le paramètre Browser sera transmis en utilisant XML. Créez un XML sous le dossier du projet.

Step 3 - Sélectionnez «Fichier» dans «Général» et cliquez sur «Suivant».

Step 4 - Entrez le nom du fichier et cliquez sur «Terminer».

Step 5 - TestNg.XML est créé dans le dossier du projet comme indiqué ci-dessous.

Step 6- Le contenu du fichier XML est indiqué ci-dessous. Nous créons 3 tests et les mettons dans une suite et mentionnons parallel = "tests" pour que tous les tests soient exécutés en parallèle.

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">

   <test name = "FirefoxTest">
   <parameter name = "browser" value = "firefox" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "ChromeTest">
   <parameter name = "browser" value = "chrome" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>

   <test name = "IETest">
   <parameter name = "browser" value = "ie" />
      <classes>
         <class name = "TestNG.TestNGClass" />
      </classes>
   </test>
   
</suite>

Exécution des tests

Step 1- Sélectionnez le XML créé; cliquez avec le bouton droit de la souris et choisissez «Exécuter en tant que» >> «TestNG Suite».

Step 2- Ouvrez maintenant le nœud, où nous avons lancé tous les nœuds du navigateur. Vous verrez les trois navigateurs en exécution simultanément.

Analyse des résultats

Step 1- Une fois l'exécution terminée, nous pouvons analyser le résultat comme toute autre exécution. Le résumé des résultats est imprimé dans la console comme indiqué dans l'instantané suivant.

Step 2 - Accédez à l'onglet «Résultats de la suite d'exécution» et TestNG affichera le résumé des résultats comme indiqué ci-dessous.

Step 3 - Lors de la génération du HTML, nous pourrons voir les résultats des tests au format HTML.