O que é Selenium Framework?
O Selenium Framework é uma estrutura de código que torna a manutenção do código fácil e eficiente. Sem estruturas, os usuários podem colocar o “código” e “dados” no mesmo local que não é reutilizável nem legível. Frameworks produzem resultados benéficos como maior reutilização de código, maior portabilidade, custo reduzido de manutenção de script, melhor legibilidade de código, etc.
Existem basicamente três tipos de estruturas criadas pelo Selenium WebDriver para automatizar casos de teste manuais
- Estrutura de teste orientada a dados
- Estrutura de teste orientada por palavras-chave
- Estrutura de teste híbrido
Estrutura orientada a dados no Selenium
O Data Driven Framework no Selenium é um método de separação de conjuntos de dados do caso de teste. Uma vez que os conjuntos de dados são separados do caso de teste, eles podem ser facilmente modificados para uma funcionalidade específica sem alterar o código. É usado para buscar casos de teste e suítes de arquivos externos como Excel, .csv, .xml ou algumas tabelas de banco de dados.
Para ler ou escrever um Excel, o Apache oferece uma biblioteca de POI muito famosa. Esta biblioteca é capaz de ler e gravar os formatos de arquivo XLS e XLSX do Excel.
Para ler arquivos XLS , uma implementação HSSF é fornecida pela biblioteca POI.
Para ler o XLSX, a implementação XSSF da biblioteca POI será a escolha. Vamos estudar essas implementações em detalhes.
Já aprendemos sobre testes orientados a dados em nosso tutorial anterior
Estrutura baseada em palavras-chave no Selenium
O Keyword Driven Framework no Selenium é um método usado para acelerar o teste automatizado, separando palavras-chave para um conjunto comum de funções e instruções. Todas as operações e instruções a serem realizadas são escritas em algum arquivo externo como uma planilha do Excel. Os usuários podem controlar e especificar facilmente as funcionalidades que desejam testar.
Aqui está como a estrutura completa se parece
Como você pode ver, é uma estrutura de 5 etapas. Vamos estudá-lo passo a passo em detalhes
Passo 1)
- O script de driver Execute.java chamará ReadGuru99ExcelFile.java
- ReadGuru99ExcelFile.java tem script POI para ler dados de um Excel
Passo 2)
- ReadGuru99ExcelFile.java lerá dados de TestCase.xlsx
- Aqui está como a folha se parece -
- De acordo com as palavras-chave escritas no arquivo Excel, o framework realizará a operação na IU.
- Por exemplo, precisamos clicar em um botão 'Login'. Da mesma forma, nosso Excel terá uma palavra-chave 'Clique'. Agora o AUT pode ter centenas de botões em uma página, para identificar um botão Login, no Excel iremos inserir o Nome do Objeto como loginButton e o tipo de objeto como um nome (veja a linha em destaque na imagem acima). O tipo de objeto pode ser Xpath, nome CSS ou qualquer outro valor
Etapa 3) ReadGuru99ExcelFile.java irá passar esses dados para o script de driver Execute.java
Passo 4)
- Para todos os nossos elementos da web da IU, precisamos criar um repositório de objetos onde colocaremos seu localizador de elemento (como Xpath, nome, caminho CSS, nome de classe, etc.)
- Execute.java (nosso script de driver) irá ler todo o repositório de objetos e armazená-lo em uma variável
- Para ler este repositório de objetos, precisamos de uma classe ReadObject que possui um método getObjectRepository para lê-lo.
NOTA: Você pode pensar por que precisamos criar um repositório de objetos. A resposta ajuda na manutenção do código. Por exemplo, estamos usando o botão com nome = btnlogin em 10 casos de teste diferentes. No futuro, o desenvolvedor decide alterar o nome de btnlogin para enviar. Você terá que fazer uma alteração em todos os 10 casos de teste. No caso de um repositório de objetos, você fará a mudança apenas uma vez no repositório.
Etapa 5)
- O driver irá passar os dados do Excel e Repositório de Objetos para a classe UIOperation
- A classe UIOperation possui funções para realizar ações correspondentes a palavras-chave como CLICK, SETTEXT etc ... mencionadas no excel
- A classe UIOperation é uma classe Java que possui a implementação real do código para realizar operações em elementos da web
O projeto completo será semelhante a
Vejamos um exemplo:
Cenário de Teste
- Estamos executando 2 casos de teste
- Caso de teste 1:
- Vá para http://demo.guru99.com/V4/
- Insira o ID do usuário
- Digite a senha
- Clique em Redefinir
- Caso de teste 2:
- Vá para http://demo.guru99.com/V4/
- Insira o ID do usuário
- Digite a senha
- Clique em Login
object.properties
url = http: //demo.guru99.com/V4/
username = uid
senha = senha
title = barone
loginButton = btnLogin
resetButton = btnReset
ReadGuru99ExcelFile.java
package excelExportAndFileIO;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) throws IOException {// Cria um objeto da classe File para abrir o arquivo xlsxArquivo arquivo = novo arquivo (filePath + "\\" + fileName);// Cria um objeto da classe FileInputStream para ler o arquivo excelFileInputStream inputStream = new FileInputStream (arquivo);Workbook guru99Workbook = null;// Encontre a extensão do arquivo dividindo o nome do arquivo em substing e obtendo apenas o nome da extensãoString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Verifique a condição se o arquivo é um arquivo xlsxif (fileExtensionName.equals (". xlsx")) {// Se for um arquivo xlsx, crie o objeto da classe XSSFWorkbookguru99Workbook = novo XSSFWorkbook (inputStream);}// Verifique a condição se o arquivo é um arquivo xlselse if (fileExtensionName.equals (". xls")) {// Se for um arquivo xls, crie o objeto da classe XSSFWorkbookguru99Workbook = novo HSSFWorkbook (inputStream);}// Leia a planilha dentro da pasta de trabalho por seu nomeFolha guru99Sheet = guru99Workbook.getSheet (sheetName);return guru99Sheet;}}
ReadObject.java
operação de pacote;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ReadObject {Propriedades p = novas Propriedades ();public Properties getObjectRepository () throws IOException {// Lê o arquivo de repositório de objetosInputStream stream = new FileInputStream (new File (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// carrega todos os objetosp.load (stream);return p;}}
UIOperation.java
operação de pacote;import java.util.Properties;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class UIOperation {Driver WebDriver;public UIOperation (driver WebDriver) {this.driver = driver;}public void perform (Propriedades p, String operação, String objectName, String objectType, String value) throws Exception {System.out.println ("");switch (operation.toUpperCase ()) {case "CLICK":// Executar cliquedriver.findElement (this.getObject (p, objectName, objectType)). click ();intervalo;case "SETTEXT":// Definir texto no controledriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (value);intervalo;case "GOTOURL":// Obter url do aplicativodriver.get (p.getProperty (valor));intervalo;case "GETTEXT":// Pega o texto de um elementodriver.findElement (this.getObject (p, objectName, objectType)). getText ();intervalo;predefinição:intervalo;}}/ *** Encontre o elemento usando o tipo e valor do objeto* @param p* @param objectName* @param objectType* @Retorna* @throws Exception* /private Por getObject (Propriedades p, String objectName, String objectType) lança Exception {// Encontre por xpathif (objectType.equalsIgnoreCase ("XPATH")) {return By.xpath (p.getProperty (objectName));}// encontre por classeelse if (objectType.equalsIgnoreCase ("CLASSNAME")) {return By.className (p.getProperty (objectName));}// localizar por nomeelse if (objectType.equalsIgnoreCase ("NAME")) {return By.name (p.getProperty (objectName));}// Encontre por csselse if (objectType.equalsIgnoreCase ("CSS")) {return By.cssSelector (p.getProperty (objectName));}// localizar por linkelse if (objectType.equalsIgnoreCase ("LINK")) {return By.linkText (p.getProperty (objectName));}// localizar por link parcialelse if (objectType.equalsIgnoreCase ("PARTIALLINK")) {return By.partialLinkText (p.getProperty (objectName));}outro{lance uma nova exceção ("Tipo de objeto errado");}}}
ExecuteTest.java
package testCases;import java.util.Properties;operação de importação.ReadObject;operação de importação.UIOperation;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;import excelExportAndFileIO.ReadGuru99ExcelFile;public class ExecuteTest {@Testepublic void testLogin () throws Exception {// TODO stub do método gerado automaticamenteWebDriver webdriver = novo FirefoxDriver ();Arquivo ReadGuru99ExcelFile = novo ReadGuru99ExcelFile ();Objeto ReadObject = novo ReadObject ();Propriedades allObjects = object.getObjectRepository ();Operação UIOperation = nova UIOperation (webdriver);// Leia a folha de palavras-chavePlanilha guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Encontre o número de linhas no arquivo excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Crie um loop sobre todas as linhas do arquivo excel para lê-lopara (int i = 1; i" + row.getCell (0) .toString () + "Iniciado");}}}}
Após a execução, a saída será semelhante a -
Baixe os arquivos do projeto Selenium para a demonstração neste Tutorial
Estrutura Híbrida
Hybrid Framework no Selenium é um conceito em que usamos a vantagem tanto da estrutura orientada por palavras-chave quanto da estrutura orientada por dados. É uma estrutura fácil de usar que permite que os testadores manuais criem casos de teste apenas olhando as palavras-chave, os dados de teste e o repositório de objetos sem codificação na estrutura.
Aqui, para palavras-chave, usaremos arquivos Excel para manter casos de teste, e para dados de teste, podemos usar data, provedor do framework Testng.
Aqui em nossa estrutura híbrida, não precisamos alterar nada na estrutura orientada por palavras-chave, aqui apenas precisamos substituir o arquivo ExecuteTest.java pelo arquivo HybridExecuteTest.java.
Este arquivo HybridExecuteTest tem todo o código para palavras-chave orientado com o conceito de provedor de dados.
A representação pictórica completa da estrutura híbrida será semelhante a
HybridExecuteTest.java
package testCases;import java.io.IOException;import java.util.Properties;operação de importação.ReadObject;operação de importação.UIOperation;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;import excelExportAndFileIO.ReadGuru99ExcelFile;public class HybridExecuteTest {WebDriver webdriver = null;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String palavra-chave, String objectName, String objectType, String value) lança Exception {// TODO stub do método gerado automaticamenteif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = novo FirefoxDriver ();}Objeto ReadObject = novo ReadObject ();Propriedades allObjects = object.getObjectRepository ();Operação UIOperation = nova UIOperation (webdriver);// Chame a função de execução para realizar a operação na IUoperation.perform (allObjects, palavra-chave, objectName,objectType, value);}@DataProvider (name = "hybridData")public Object [] [] getDataFromDataprovider () throws IOException {Object [] [] object = null;Arquivo ReadGuru99ExcelFile = novo ReadGuru99ExcelFile ();// Leia a folha de palavras-chavePlanilha guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Encontre o número de linhas no arquivo excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();objeto = novo objeto [rowCount] [5];para (int i = 0; iResumo:
- Podemos criar três tipos de estrutura de teste usando Selenium WebDriver.
- São estruturas de teste baseadas em dados, baseadas em palavras-chave e híbridas.
- Podemos obter uma estrutura baseada em dados usando o provedor de dados TestNG.
- Na estrutura orientada por palavras-chave, as palavras-chave são escritas em alguns arquivos externos, como o arquivo excel e o código java irá chamar esse arquivo e executar casos de teste.
- A estrutura híbrida é uma mistura de estrutura baseada em palavras-chave e baseada em dados.
Baixe os arquivos do projeto Selenium para a demonstração neste Tutorial