Selênio - Grade
Selenium Grid é uma ferramenta que distribui os testes em várias máquinas físicas ou virtuais para que possamos executar scripts em paralelo (simultaneamente). Ele acelera drasticamente o processo de teste em navegadores e plataformas, fornecendo um feedback rápido e preciso.
O Selenium Grid nos permite executar várias instâncias dos testes WebDriver ou Selenium Remote Control em paralelo que usa a mesma base de código, portanto, o código NÃO precisa estar presente no sistema que executam. O pacote selenium-server-standalone inclui Hub, WebDriver e Selenium RC para executar os scripts na grade.
A grade de selênio tem um hub e um nó.
Hub- O hub também pode ser entendido como um servidor que atua como ponto central onde os testes seriam acionados. Uma grade de selênio tem apenas um hub e é iniciada em uma única máquina uma vez.
Node- Os nós são as instâncias do Selenium anexadas ao hub que executam os testes. Pode haver um ou mais nós em uma grade que pode ser de qualquer sistema operacional e pode conter qualquer um dos navegadores compatíveis com Selenium.
Arquitetura
O diagrama a seguir mostra a arquitetura do Selenium Grid.
Trabalhando com Grid
Para trabalhar com o Grid, precisamos seguir alguns protocolos. Ouça abaixo as principais etapas envolvidas neste processo -
- Configurando o Hub
- Configurando os nós
- Desenvolva o script e prepare o arquivo XML
- Execução de Teste
- Análise de Resultado
Vamos discutir cada uma dessas etapas em detalhes.
Configurando o Hub
Step 1 - Baixe o arquivo JAR autônomo do Selenium Server mais recente em http://docs.seleniumhq.org/download/. Faça o download clicando na versão conforme mostrado abaixo.
Step 2- Inicie o Hub iniciando o servidor Selenium usando o seguinte comando. Agora usaremos a porta '4444' para iniciar o hub.
Note - Certifique-se de que não haja outros aplicativos em execução na porta # 4444.
java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000
Step 3 - Agora abra o navegador e navegue até a URL http // localhost: 4444 do hub (o sistema em que você executou a Etapa 2).
Step 4- Agora clique no link 'console' e clique em 'visualizar configuração'. A configuração do hub seria exibida da seguinte maneira. No momento, não temos nenhum nó, portanto, não poderemos ver os detalhes.
Configurando os nós
Step 1- Faça logon no nó (onde você gostaria de executar os scripts) e coloque o 'selenium-server-standalone-2.42.2' em uma pasta. Precisamos apontar para o JAR autônomo do servidor de selênio ao iniciar os nós.
Step 2 - Inicie o FireFox Node usando o comando a seguir.
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
Onde,
D: \ JAR \ selenium-server-standalone-2.42.2.jar = Localização do arquivo Jar autônomo do servidor Selenium (na máquina do Node)
http://10.30.217.157:4444 = Endereço IP do Hub e 4444 é a porta do Hub
browserName = firefox (parâmetro para especificar o nome do navegador nos nós)
5555 = Porta na qual o Firefox Node estaria instalado e funcionando.
Step 3- Depois de executar o comando, volte ao Hub. Navegue até o URL - http://10.30.217.157:4444 e o hub agora exibirá o nó conectado a ele.
Step 4- Agora vamos lançar o nó do Internet Explorer. Para iniciar o nó IE, precisamos ter o driver do Internet Explorer baixado na máquina do nó.
Step 5 - Para baixar o driver do Internet Explorer, navegue até http://docs.seleniumhq.org/download/e baixe o arquivo apropriado com base na arquitetura do seu sistema operacional. Depois de fazer o download, descompacte o arquivo exe e coloque nele uma pasta que deve ser consultada ao iniciar os nós do IE.
Step 6 - Inicie o IE usando o seguinte 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
Onde,
D: \ IEDriverServer.exe = A localização do driver do IE baixado (na máquina do Node)
D: \ JAR \ selenium-server-standalone-2.42.2.jar = Localização do arquivo Jar autônomo do servidor Selenium (na máquina do Node)
http://10.30.217.157:4444 = Endereço IP do Hub e 4444 é a porta do Hub
browserName = ie (parâmetro para especificar o nome do navegador nos nós)
5558 = Porta na qual o IE Node estaria instalado e funcionando.
Step 7- Depois de executar o comando, volte ao Hub. Navegue até o URL - http://10.30.217.157:4444 e o hub agora exibirá o nó do IE anexado a ele.
Step 8- Vamos agora lançar o Chrome Node. Para iniciar o nó do Chrome, precisamos ter o driver do Chrome baixado na máquina do nó.
Step 9 - Para baixar o driver do Chrome, navegue até http://docs.seleniumhq.org/download/ e navegue até a área Drivers de navegador de terceiros e clique no número da versão '2.10', conforme mostrado abaixo.
Step 10- Baixe o driver com base no tipo de seu sistema operacional. Vamos executá-lo em ambiente Windows, portanto faremos o download do driver Windows Chrome. Depois de fazer o download, descompacte o arquivo exe e coloque-o em uma pasta que deve ser consultada ao iniciar os nós do Chrome.
Step 11 - Inicie o Chrome usando o seguinte 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
Onde,
D: \ chromedriver.exe = A localização do driver do Chrome baixado (na máquina do Node)
D: \ JAR \ selenium-server-standalone-2.42.2.jar = Localização do arquivo Jar autônomo do servidor Selenium (na máquina do Node)
http://10.30.217.157:4444 = Endereço IP do Hub e 4444 é a porta do Hub
browserName = chrome (parâmetro para especificar o nome do navegador nos nós)
5557 = Porta na qual o Nó de cromo estaria instalado e funcionando.
Step 12- Depois de executar o comando, volte ao Hub. Navegue até o URL - http://10.30.217.157:4444 e o hub agora exibirá o nó cromado anexado a ele.
Desenvolva o script e prepare o arquivo XML
Step 1- Vamos desenvolver um teste usando TestNG. No exemplo a seguir, iniciaremos cada um desses navegadores usando webDriver remoto. Ele pode repassar suas capacidades ao driver para que o driver tenha todas as informações para executar nos nós.
O parâmetro do navegador seria passado do arquivo "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- O parâmetro Browser será passado usando XML. Crie um XML na pasta do projeto.
Step 3 - Selecione 'Arquivo' em 'Geral' e clique em 'Avançar'.
Step 4 - Digite o nome do arquivo e clique em 'Concluir'.
Step 5 - TestNg.XML é criado na pasta do projeto conforme mostrado abaixo.
Step 6- O conteúdo do arquivo XML é mostrado abaixo. Nós criamos 3 testes e os colocamos em uma suíte e mencionamos parallel = "tests" para que todos os testes sejam executados em paralelo.
<?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>
Execução de Teste
Step 1- Selecione o XML criado; clique com o botão direito e escolha 'Executar como' >> 'TestNG Suite'.
Step 2- Agora abra o Node, onde lançamos todos os nós do navegador. Você verá todos os três navegadores em execução simultaneamente.
Análise de Resultado
Step 1- Ao concluir a execução, podemos analisar o resultado como qualquer outra execução. O resumo do resultado é impresso no console, conforme mostrado no instantâneo a seguir.
Step 2 - Navegue até a guia 'Results of Running Suite' e TestNG exibirá o resumo dos resultados conforme mostrado abaixo.
Step 3 - Ao gerar o HTML, poderemos ver os resultados do teste em formato HTML.