Selenium Estrutura: baseada em dados, palavras-chave e híbridos

O que é o Selenium Estrutura?

A Selenium estrutura de automação é 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 os “dados” no mesmo local, o que não é reutilizável nem legível. As estruturas 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.

Tipos de Selenium Quadro

Existem principalmente três tipo de estruturas criado por Selenium WebDriver para automatizar casos de teste manuais

  • Estrutura orientada a dados
  • Estrutura baseada em palavras-chave
  • Estrutura orientada para híbrido

Tipos de Selenium Quadro

Estrutura baseada em dados em Selenium

Estrutura baseada em dados em Selenium é um método de separar conjuntos de dados do caso de teste. Depois 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.

Estrutura baseada em dados em Selenium

Para ler ou escrever um Excel, o Apache fornece uma biblioteca POI muito famosa. Esta biblioteca é capaz o suficiente para ler e escrever ambos XLS e XLSX formato de arquivo do Excel.

Ler XLS arquivos, um HSSF a implementação é fornecida pela biblioteca POI.

Ler XLSX, XSSFGenericName implementação de POI biblioteca será a escolha. Vamos estudar essas implementações em detalhes.

Já aprendemos sobre Data Driven Testing em nosso tutorial anterior

Estrutura baseada em palavras-chave em Selenium

Estrutura baseada em palavras-chave em Selenium é um método usado para acelerar testes automatizados, separando palavras-chave para conjuntos comuns de funções e instruções. Todas as operações e instruções a serem executadas são escritas em algum arquivo externo como uma planilha Excel. Os usuários podem controlar e especificar facilmente as funcionalidades que desejam testar.

Esta é a aparência da estrutura completa

Estrutura baseada em palavras-chave em Selenium

Como você pode ver, é uma estrutura de 5 etapas. Vamos estudá-lo passo a passo em detalhes

Passo 1)

  • O script do driver Execute.java chamará ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java possui script POI para ler dados de um Excel

Passo 2)

  • ReadGuru99ExcelFile.java lerá dados de TestCase.xlsx
  • Esta é a aparência da folha-

Estrutura baseada em palavras-chave em Selenium

  • De acordo com as palavras-chave escritas no arquivo Excel, o framework realizará a operação na UI.
  • Por exemplo, precisamos clicar no botão ‘Login’. Da mesma forma, nosso Excel terá a palavra-chave ‘Clique’. Agora o AUT pode ter centenas de botões em uma página, para identificar um botão de Login, no Excel inseriremos o Nome do Objeto como loginButton e o tipo de objeto como um nome (veja a linha destacada na imagem acima). O tipo de objeto pode ser XPath, nome CSS ou qualquer outro valor

Passo 3) ReadGuru99ExcelFile.java passará esses dados para o script do driver Execute.java

Passo 4)

  • Para todos os nossos elementos web de UI, precisamos criar um repositório de objetos onde colocaremos seu localizador de elemento (como Xpath, nome, caminho CSS, nome de classe etc.)

Estrutura baseada em palavras-chave em Selenium

  • Execute.java (nosso script de driver) lerá todo o repositório de objetos e o armazenará em uma variável
  • Para ler este repositório de objetos, precisamos de uma classe ReadObject que possua um método getObjectRepository para lê-lo.
  • Estrutura baseada em palavras-chave em Selenium

OBSERVAÇÃO: 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 name = btnlogin em 10 casos de teste diferentes. No futuro, o desenvolvedor decidirá mudar o nome de btnlogin para submit. 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 alteração apenas uma vez no repositório.

Passo 5)

  • O driver passará os dados do Excel e do repositório de objetos para a interface do usuárioOperaaula de ção
  • UIOperaA classe tion possui funções para realizar ações correspondentes a palavras-chave como CLICK, SETTEXT etc… mencionadas no excel
  • UIOperaaula de ção é uma Java classe que possui a implementação real do código para realizar operações em elementos da web

Estrutura baseada em palavras-chave em Selenium

O projeto completo será parecido com-

Estrutura baseada em palavras-chave em Selenium

Vejamos um exemplo:

Cenário de teste: Estamos executando 2 casos de teste

objeto.propriedades

url=http://demo.guru99.com/V4/
username=uid
password=password
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{
    //Create a object of File class to open xlsx file
    File file =    new File(filePath+"\\"+fileName);
    //Create an object of FileInputStream class to read excel file
    FileInputStream inputStream = new FileInputStream(file);
    Workbook guru99Workbook = null;
    //Find the file extension by spliting file name in substing and getting only extension name
    String fileExtensionName = fileName.substring(fileName.indexOf("."));
    //Check condition if the file is xlsx file
    if(fileExtensionName.equals(".xlsx")){
    //If it is xlsx file then create object of XSSFWorkbook class
    guru99Workbook = new XSSFWorkbook(inputStream);
    }
    //Check condition if the file is xls file
    else if(fileExtensionName.equals(".xls")){
        //If it is xls file then create object of XSSFWorkbook class
        guru99Workbook = new HSSFWorkbook(inputStream);
    }
    //Read sheet inside the workbook by its name
    Sheet guru99Sheet = guru99Workbook.getSheet(sheetName);
     return guru99Sheet;    
    }
}

ReadObject.java

package operation;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ReadObject {
    Properties p = new Properties();
    public Properties getObjectRepository() throws IOException{
        //Read object repository file
        InputStream stream = new FileInputStream(new File(System.getProperty("user.dir")+"\\src\\objects\\object.properties"));
        //load all objects
        p.load(stream);
         return p;
    }
    
}

UIOperação.java

package operation;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class UIOperation {
    WebDriver driver;
    public UIOperation(WebDriver driver){
        this.driver = driver;
    }
    public void perform(Properties p,String operation,String objectName,String objectType,String value) throws Exception{
        System.out.println("");
        switch (operation.toUpperCase()) {
        case "CLICK":
            //Perform click
            driver.findElement(this.getObject(p,objectName,objectType)).click();
            break;
        case "SETTEXT":
            //Set text on control
            driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value);
            break;
            
        case "GOTOURL":
            //Get url of application
            driver.get(p.getProperty(value));
            break;
        case "GETTEXT":
            //Get text of an element
            driver.findElement(this.getObject(p,objectName,objectType)).getText();
            break;
        default:
            break;
        }
    }
    
    /**
     * Find element BY using object type and value
     * @param p
     * @param objectName
     * @param objectType
     * @return
     * @throws Exception
     */
    private By getObject(Properties p,String objectName,String objectType) throws Exception{
        //Find by xpath
        if(objectType.equalsIgnoreCase("XPATH")){
            
            return By.xpath(p.getProperty(objectName));
        }
        //find by class
        else if(objectType.equalsIgnoreCase("CLASSNAME")){
            
            return By.className(p.getProperty(objectName));
            
        }
        //find by name
        else if(objectType.equalsIgnoreCase("NAME")){
            
            return By.name(p.getProperty(objectName));
            
        }
        //Find by css
        else if(objectType.equalsIgnoreCase("CSS")){
            
            return By.cssSelector(p.getProperty(objectName));
            
        }
        //find by link
        else if(objectType.equalsIgnoreCase("LINK")){
            
            return By.linkText(p.getProperty(objectName));
            
        }
        //find by partial link
        else if(objectType.equalsIgnoreCase("PARTIALLINK")){
            
            return By.partialLinkText(p.getProperty(objectName));
            
        }else
        {
            throw new Exception("Wrong object type");
        }
    }
}

ExecuteTest.java

package testCases;
import java.util.Properties;
import operation.ReadObject;
import operation.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 {
@Test
    public void testLogin() throws Exception {
        // TODO Auto-generated method stub
WebDriver webdriver = new FirefoxDriver();
ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    //Create a loop over all the rows of excel file to read it
    for (int i = 1; i < rowCount+1; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i);
        //Check if the first cell contain a value, if yes, That means it is the new testcase name
        if(row.getCell(0).toString().length()==0){
        //Print testcase detail on console
            System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+
            row.getCell(3).toString()+"----"+ row.getCell(4).toString());
        //Call perform function to perform operation on UI
            operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                row.getCell(3).toString(), row.getCell(4).toString());
     }
        else{
            //Print the new testcase name when it started
                System.out.println("New Testcase->"+row.getCell(0).toString() +" Started");
            }
        }
    }
}

Após a execução, a saída será semelhante a –

Estrutura baseada em palavras-chave em Selenium

Faça o download do Selenium Arquivos de projeto para demonstração neste tutorial

Estrutura orientada para híbrido

Estrutura orientada para híbrido in 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 testadores manuais criem casos de teste apenas observando 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 dados, provedor de Teste estrutura.

Estrutura orientada para híbrido

Aqui em nossa estrutura híbrida, não precisamos alterar nada na estrutura orientada por palavras-chave, aqui só precisamos substituir o arquivo ExecuteTest.java pelo arquivo HybridExecuteTest.java.

Estrutura orientada para híbrido

Este arquivo HybridExecuteTest possui todo o código para palavras-chave orientadas com o conceito de provedor de dados.

A representação pictórica completa da estrutura híbrida será semelhante a

Estrutura orientada para híbrido

HybridExecuteTest.java

package testCases;
import java.io.IOException;
import java.util.Properties;
import operation.ReadObject;
import operation.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 keyword,String objectName,String objectType,String value) throws Exception {
        // TODO Auto-generated method stub
      
    if(testcaseName!=null&&testcaseName.length()!=0){
    webdriver=new FirefoxDriver();
    }
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
    //Call perform function to perform operation on UI
            operation.perform(allObjects, keyword, objectName,
                objectType, value);
    
    }
@DataProvider(name="hybridData")
    public Object[][] getDataFromDataprovider() throws IOException{
    Object[][] object = null;
    ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    object = new Object[rowCount][5];
    for (int i = 0; i < rowCount; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i+1);
        //Create a loop to print cell values in a row
        for (int j = 0; j < row.getLastCellNum(); j++) {
            //Print excel data in console
            object[i][j] = row.getCell(j).toString();
        }
    }
    System.out.println("");
     return object;    
    }
}

Resumo

  • Podemos criar três tipos de estrutura de teste usando Selenium WebDriver.
  • A Selenium estrutura de automação que pode ser classificada em estruturas orientadas a dados, orientadas por palavras-chave e híbridas.
  • Podemos alcançar uma estrutura baseada em dados usando TestNGprovedor de dados.
  • Na estrutura orientada por palavras-chave, as palavras-chave são escritas em alguns arquivos externos, como arquivo Excel, e o código Java chamará esse arquivo e executará casos de teste.
  • A estrutura híbrida é uma mistura de estrutura orientada por palavras-chave e orientada por dados.

Faça o download do Selenium Arquivos de projeto para demonstração neste tutorial