Selenio - Griglia

Selenium Grid è uno strumento che distribuisce i test su più macchine fisiche o virtuali in modo da poter eseguire script in parallelo (simultaneamente). Accelera notevolmente il processo di test sui browser e sulle piattaforme, fornendoci feedback rapidi e accurati.

Selenium Grid ci consente di eseguire più istanze di test WebDriver o Selenium Remote Control in parallelo che utilizza la stessa base di codice, quindi il codice NON deve essere presente sul sistema che eseguono. Il pacchetto selenium-server-standalone include Hub, WebDriver e Selenium RC per eseguire gli script nella griglia.

Selenium Grid ha un Hub e un Nodo.

  • Hub- L'hub può anche essere inteso come un server che funge da punto centrale in cui sarebbero attivati ​​i test. Una griglia di selenio ha un solo hub e viene lanciata su una singola macchina una volta.

  • Node- I nodi sono le istanze di Selenium che sono collegate all'Hub che esegue i test. Possono esserci uno o più nodi in una griglia che può essere di qualsiasi sistema operativo e può contenere uno qualsiasi dei browser supportati da Selenium.

Architettura

Il diagramma seguente mostra l'architettura di Selenium Grid.

Lavorare con Grid

Per poter lavorare con Grid, dobbiamo seguire alcuni protocolli. Ascolta di seguito sono i passaggi principali coinvolti in questo processo:

  • Configurazione dell'hub
  • Configurazione dei nodi
  • Sviluppa lo script e prepara il file XML
  • Esecuzione del test
  • Analisi dei risultati

Discutiamo in dettaglio ciascuno di questi passaggi.

Configurazione dell'hub

Step 1 - Scarica l'ultimo file JAR autonomo di Selenium Server da http://docs.seleniumhq.org/download/. Scaricalo facendo clic sulla versione come mostrato di seguito.

Step 2- Avvia l'Hub avviando il Selenium Server utilizzando il seguente comando. Ora useremo la porta "4444" per avviare l'hub.

Note - Assicurati che non ci siano altre applicazioni in esecuzione sulla porta # 4444.

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

Step 3 - Ora apri il browser e vai all'URL http // localhost: 4444 dall'Hub (il sistema in cui hai eseguito il passaggio # 2).

Step 4- Ora fai clic sul link "console" e fai clic su "visualizza configurazione". La configurazione dell'hub verrebbe visualizzata come segue. Al momento, non abbiamo alcun nodo, quindi non saremo in grado di vedere i dettagli.

Configurazione dei nodi

Step 1- Accedi al nodo (dove desideri eseguire gli script) e inserisci "selenium-server-standalone-2.42.2" in una cartella. Dobbiamo puntare al JAR selenio-server-standalone durante l'avvio dei nodi.

Step 2 - Avvia FireFox Node utilizzando il seguente comando.

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

Dove,

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Posizione del file Jar Standalone Selenium Server (sulla macchina del nodo)

http://10.30.217.157:4444 = Indirizzo IP dell'Hub e 4444 è la porta dell'Hub

browserName = firefox (parametro per specificare il nome del browser sui nodi)

5555 = Porta su cui Firefox Node sarebbe attivo e funzionante.

Step 3- Dopo aver eseguito il comando, torna all'Hub. Vai all'URL - http://10.30.217.157:4444 e l'hub ora visualizzerà il nodo ad esso collegato.

Step 4- Ora lanciamo il nodo Internet Explorer. Per avviare IE Node, è necessario che il driver di Internet Explorer sia scaricato sulla macchina del nodo.

Step 5 - Per scaricare il driver di Internet Explorer, accedere a http://docs.seleniumhq.org/download/e scarica il file appropriato in base all'architettura del tuo sistema operativo. Dopo aver scaricato, decomprimere il file exe e inserire in esso una cartella a cui fare riferimento durante l'avvio dei nodi IE.

Step 6 - Avvia IE utilizzando il seguente comando.

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

Dove,

D: \ IEDriverServer.exe = La posizione del driver IE scaricato (sulla macchina del nodo)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Posizione del file Jar Standalone Selenium Server (sulla macchina del nodo)

http://10.30.217.157:4444 = Indirizzo IP dell'Hub e 4444 è la porta dell'Hub

browserName = ie (parametro per specificare il nome del browser sui nodi)

5558 = Porta su cui IE Node sarebbe attivo e funzionante.

Step 7- Dopo aver eseguito il comando, torna all'Hub. Vai all'URL - http://10.30.217.157:4444 e l'hub ora visualizzerà il nodo IE ad esso collegato.

Step 8- Ora lanciamo Chrome Node. Per avviare il nodo Chrome, è necessario che il driver Chrome venga scaricato sul computer del nodo.

Step 9 - Per scaricare il driver Chrome, vai a http://docs.seleniumhq.org/download/ quindi accedere all'area Driver del browser di terze parti e fare clic sul numero di versione "2.10" come mostrato di seguito.

Step 10- Scarica il driver in base al tipo di sistema operativo. Lo eseguiremo su ambiente Windows, quindi scaricheremo il driver di Windows Chrome. Dopo averlo scaricato, decomprimere il file exe e inserirlo in una cartella a cui fare riferimento durante l'avvio dei nodi Chrome.

Step 11 - Avvia Chrome utilizzando il seguente comando.

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

Dove,

D: \ chromedriver.exe = La posizione del driver chrome scaricato (sulla macchina del nodo)

D: \ JAR \ selenium-server-standalone-2.42.2.jar = Posizione del file Jar Standalone Selenium Server (sulla macchina del nodo)

http://10.30.217.157:4444 = Indirizzo IP dell'Hub e 4444 è la porta dell'Hub

browserName = chrome (parametro per specificare il nome del browser sui nodi)

5557 = Porta su cui Chrome Node sarebbe attivo e funzionante.

Step 12- Dopo aver eseguito il comando, torna all'Hub. Vai all'URL - http://10.30.217.157:4444 e l'Hub ora visualizzerà il nodo chrome ad esso collegato.

Sviluppa lo script e prepara il file XML

Step 1- Svilupperemo un test utilizzando TestNG. Nel seguente esempio, avvieremo ciascuno di questi browser utilizzando webDriver remoto. Può trasmettere le loro capacità al driver in modo che il driver abbia tutte le informazioni da eseguire sui nodi.

Il parametro del browser verrebbe passato dal file "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- Il parametro Browser verrà passato utilizzando XML. Crea un XML nella cartella del progetto.

Step 3 - Seleziona "File" da "Generale" e fai clic su "Avanti".

Step 4 - Immettere il nome del file e fare clic su "Fine".

Step 5 - TestNg.XML viene creato nella cartella del progetto come mostrato di seguito.

Step 6- Il contenuto del file XML è mostrato di seguito. Creiamo 3 test e li mettiamo in una suite e menzioniamo parallel = "test" in modo che tutti i test vengano eseguiti in parallelo.

<?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>

Esecuzione del test

Step 1- Seleziona l'XML creato; fare clic con il tasto destro e scegliere "Esegui come" >> "TestNG Suite".

Step 2- Ora apri il nodo, dove abbiamo avviato tutti i nodi del browser. Vedrai tutti e tre i browser in esecuzione contemporaneamente.

Analisi dei risultati

Step 1- Al termine dell'esecuzione, possiamo analizzare il risultato come qualsiasi altra esecuzione. Il riepilogo dei risultati viene stampato nella console come mostrato nella seguente istantanea.

Step 2 - Vai alla scheda "Risultati della suite in esecuzione" e TestNG visualizzerà il riepilogo dei risultati come mostrato di seguito.

Step 3 - Dopo aver generato l'HTML, saremo in grado di vedere i risultati del test in formato HTML.