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

⚡ Resumo Inteligente

Selenium Frameworks: As abordagens orientadas a dados, palavras-chave e híbridas definem como os testadores organizam o código de automação, separam os dados de teste e reutilizam a lógica. Este artigo explica cada tipo de framework, sua arquitetura, vantagens e como implementá-los passo a passo com exemplos práticos. Selenium Exemplos de código WebDriver.

  • Definição Essencial: A Selenium Um framework é uma arquitetura de código estruturada que melhora a reutilização, a portabilidade e a manutenção de scripts de teste automatizados.
  • 📊 Implementação orientada por dados: Separe os dados de teste da lógica usando Excel, CSV ou XML e leia as entradas através do Apache POI (HSSF para XLS, XSSF para XLSX).
  • 🔑 Design orientado por palavras-chave: Controle as ações da interface do usuário por meio de planilhas de palavras-chave e repositórios de objetos para que os testadores manuais possam criar casos de uso sem precisar escrever código. Java código.
  • ⚙️ Otimização híbrida: Combinar TestNG Os provedores de dados com execução de palavras-chave ganham flexibilidade, escalabilidade e reduzem a sobrecarga de manutenção de scripts.
  • 🧩 Benefícios do Repositório de Objetos: Centralize os localizadores em um arquivo de propriedades para que as alterações nos elementos exijam a atualização de apenas um local em todos os casos de teste.

Selenium Quadro

O que é a Selenium Estrutura?

O Selenium estrutura de automação Uma estrutura de código estruturada simplifica, escala e torna eficiente a manutenção de testes. Sem uma estrutura, os testadores frequentemente colocam código e dados no mesmo local, o que não é reutilizável nem legível. Adotar uma estrutura proporciona benefícios mensuráveis, como maior reutilização de código, melhor portabilidade, custo reduzido de manutenção de scripts, legibilidade aprimorada e separação mais clara de responsabilidades entre a lógica de teste e os dados de entrada.

Por que usar um Selenium Estrutura de automação?

Um bem projetado Selenium A estrutura resolve três problemas persistentes na automação de testes: duplicação de código, localizadores frágeis e dados de teste incontroláveis. Ao impor uma estrutura clara, as equipes podem escalar seus conjuntos de testes de alguns scripts para centenas sem perder o controle.

  • Capacidade de manutenção: Localizadores centralizados e métodos auxiliares significam que uma única alteração atualiza todos os testes que usam esse elemento.
  • Reutilização: Operações comuns, como login, navegação ou preenchimento de formulários, são escritas uma única vez e invocadas em diversos casos de teste.
  • Escalabilidade: Adicionar novos casos de teste passa a ser uma atualização de dados em vez de uma tarefa de codificação, o que permite que pessoas sem conhecimento de programação contribuam com cenários.
  • Relatórios e Colaboração: A estrutura padronizada facilita a integração com ferramentas de geração de relatórios, pipelines de CI/CD e controle de versão.

Tipos de Selenium Quadro

Existem três principais tipos de estruturas construído em Selenium WebDriver para automatizar casos de teste manuais. Cada estilo visa um equilíbrio diferente entre o esforço do desenvolvedor, o envolvimento do testador e a flexibilidade dos dados.

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

Tipos de Selenium Quadro

As próximas seções explicam cada estrutura em detalhes, começando com a abordagem mais simples, baseada em dados, e progredindo até o modelo híbrido mais flexível.

Estrutura baseada em dados em Selenium

Estrutura baseada em dados em Selenium é um método para separar os conjuntos de dados de teste da lógica dos casos de teste. Uma vez que os dados estejam desacoplados, você pode modificar as entradas de uma funcionalidade específica sem alterar o código de teste. É comumente usado para buscar casos de teste e suítes de teste de fontes externas, como Excel, .csv, .xml ou tabelas de banco de dados.

Estrutura baseada em dados em Selenium

Para ler ou gravar arquivos Excel, o Apache fornece a conhecida biblioteca POI. Essa biblioteca pode lidar com ambos os tipos de arquivos. XLS e XLSX formatos. o HSSF A implementação lê arquivos XLS legados, enquanto o XSSFGenericName A implementação lida com arquivos XLSX modernos.

Já abordamos os Testes Orientados a Dados em nosso tutorial anterior.

Estrutura baseada em palavras-chave em Selenium

Estrutura baseada em palavras-chave em Selenium é um método que acelera a automação ao separar palavras-chave para funções e instruções comuns. Todas as operações e instruções são escritas em um arquivo externo, geralmente uma planilha do Excel. Os testadores podem especificar as funcionalidades que desejam validar sem modificar o código. Java código, o que torna esse estilo ideal para equipes onde analistas de negócios ou profissionais de controle de qualidade manual contribuem com definições de teste.

Eis como a estrutura completa se apresenta:

Estrutura baseada em palavras-chave em Selenium

Como você pode ver, trata-se de uma estrutura de 5 etapas. Vamos estudá-la em detalhes, etapa por etapa.

Passo 1)

  • O script do driver Execute.java chama Read.Guru99ExcelFile.java.
  • LeiaGuruO arquivo 99ExcelFile.java contém o código POI que lê dados do Excel.

Passo 2)

  • LeiaGuruO arquivo 99ExcelFile.java lê dados do arquivo TestCase.xlsx.
  • Eis como a planilha se apresenta:

Planilha Excel de estrutura orientada por palavras-chave em Selenium

  • Com base nas palavras-chave escritas no arquivo Excel, a estrutura executa a ação correspondente na interface do usuário.
  • Por exemplo, para clicar em um botão com o rótulo “Login”, a planilha do Excel armazena a palavra-chave “Click”. Para identificar o botão Login entre vários outros em uma página, a linha do Excel define o Nome do Objeto como loginButton e o Tipo do Objeto como name (veja a linha destacada na imagem). O Tipo do Objeto também pode ser XPath, CSS, classe ou qualquer outra estratégia de localização.

Passo 3) LeiaGuruO arquivo 99ExcelFile.java passa os dados analisados ​​de volta para o script principal Execute.java.

Passo 4)

  • Para todos os elementos web da interface do usuário, você mantém um repositório de objetos que armazena localizadores de elementos, como XPath, nome, CSS ou nome da classe.

Repositório de objetos em estrutura orientada a palavras-chave

  • O arquivo Execute.java (o script principal) lê todo o repositório de objetos e o armazena em uma variável.
  • Uma classe auxiliar ReadObject expõe um método getObjectRepository que carrega o repositório em tempo de execução.

Classe auxiliar ReadObject para o Keyword Driven Framework

OBSERVAÇÃO: Você pode estar se perguntando por que um repositório de objetos é necessário. A resposta é: facilidade de manutenção. Se um botão com o nome "btnlogin" for usado em 10 casos de teste e o desenvolvedor renomeá-lo para "submit", você teria que editar 10 arquivos. Com um repositório de objetos, você altera o localizador em apenas um lugar.

Passo 5)

  • O driver transmite dados do Excel e do repositório de objetos para a interface do usuário.Operaclasse tion.
  • UIOperaA função `tion` contém funções que mapeiam cada palavra-chave, como `CLICK` e `SETTEXT`, para uma ação concreta do WebDriver.
  • UIOperação é uma Java Classe que contém a implementação real para interação com elementos da web.

UIOperaclasse tion em Keyword Driven Framework

A estrutura completa do projeto é a seguinte:

Estrutura completa do projeto Keyword Driven Framework

Vejamos um exemplo prático:

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

objeto.propriedades

url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

LeiaGuru99ExcelFile.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 File object to open the xlsx file
        File file = new File(filePath + "\\" + fileName);
        // Create a FileInputStream to read the Excel file
        FileInputStream inputStream = new FileInputStream(file);
        Workbook guru99Workbook = null;
        // Detect the file extension
        String fileExtensionName = fileName.substring(fileName.indexOf("."));
        if (fileExtensionName.equals(".xlsx")) {
            guru99Workbook = new XSSFWorkbook(inputStream);
        } else if (fileExtensionName.equals(".xls")) {
            guru99Workbook = new HSSFWorkbook(inputStream);
        }
        // Read the 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 the 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":
                driver.findElement(this.getObject(p, objectName, objectType)).click();
                break;
            case "SETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).sendKeys(value);
                break;
            case "GOTOURL":
                driver.get(p.getProperty(value));
                break;
            case "GETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).getText();
                break;
            default:
                break;
        }
    }

    private By getObject(Properties p, String objectName, String objectType) throws Exception {
        if (objectType.equalsIgnoreCase("XPATH")) {
            return By.xpath(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CLASSNAME")) {
            return By.className(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("NAME")) {
            return By.name(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CSS")) {
            return By.cssSelector(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("LINK")) {
            return By.linkText(p.getProperty(objectName));
        } 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 {
        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 the number of rows in the Excel file
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        for (int i = 1; i < rowCount + 1; i++) {
            Row row = guru99Sheet.getRow(i);
            if (row.getCell(0).toString().length() == 0) {
                System.out.println(row.getCell(1).toString() + "----" + row.getCell(2).toString() + "----" +
                        row.getCell(3).toString() + "----" + row.getCell(4).toString());
                operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                        row.getCell(3).toString(), row.getCell(4).toString());
            } else {
                System.out.println("New Testcase->" + row.getCell(0).toString() + " Started");
            }
        }
    }
}

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

Saída da execução do Keyword Driven Framework

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 Combina os pontos fortes das estruturas orientadas por palavras-chave e orientadas a dados. É um modelo fácil de usar que permite aos testadores manuais criar casos de teste simplesmente editando palavras-chave, dados de teste e o repositório de objetos, sem escrever nenhum código de framework.

Aqui, os arquivos do Excel mantêm as palavras-chave para cada etapa, e TestNG'S provedor de dados fornece os dados de teste. Essa divisão permite dimensionar tanto o vocabulário de ações quanto as variações de entrada de forma independente.

Arquitetura de Framework Híbrido Orientado a Dados

Para nossa estrutura híbrida, nada muda na estrutura orientada por palavras-chave: simplesmente substituímos ExecuteTest.java por HybridExecuteTest.java.

Substituição de componentes do Hybrid Driven Framework

Este arquivo HybridExecuteTest contém a lógica completa orientada por palavras-chave combinada com TestNGmecanismo de provedor de dados.

A representação pictórica completa da estrutura híbrida é a seguinte:

Representação completa do Hybrid Driven Framework

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 {
        if (testcaseName != null && testcaseName.length() != 0) {
            webdriver = new FirefoxDriver();
        }
        ReadObject object = new ReadObject();
        Properties allObjects = object.getObjectRepository();
        UIOperation operation = new UIOperation(webdriver);
        operation.perform(allObjects, keyword, objectName, objectType, value);
    }

    @DataProvider(name = "hybridData")
    public Object[][] getDataFromDataprovider() throws IOException {
        Object[][] object = null;
        ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
        Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        object = new Object[rowCount][5];
        for (int i = 0; i < rowCount; i++) {
            Row row = guru99Sheet.getRow(i + 1);
            for (int j = 0; j < row.getLastCellNum(); j++) {
                object[i][j] = row.getCell(j).toString();
            }
        }
        System.out.println("");
        return object;
    }
}

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

Perguntas Frequentes

Escolha a opção Orientada por Palavras-chave quando os testadores manuais precisarem criar casos de teste sem escrever código. Escolha a opção Orientada por Dados quando o mesmo script precisar ser executado com várias variações de entrada. Use a opção Híbrida quando você precisar de flexibilidade de dados e criação de testes em nível de palavra-chave simultaneamente.

O Apache POI lê e grava arquivos Excel usados ​​como fonte de dados. O HSSF lida com arquivos .xls legados, enquanto o XSSF processa arquivos .xlsx modernos. Juntos, eles permitem que seus scripts de teste extraiam entradas dinâmicas de planilhas sem a necessidade de dados fixos no código.

Um repositório de objetos centraliza localizadores de elementos, como XPath, CSS ou nome. Se um desenvolvedor renomear um controle de interface do usuário, você atualiza apenas uma entrada em vez de cada caso de teste, o que reduz drasticamente o tempo de manutenção e o risco de scripts quebrados.

IA melhora Selenium frameworks através de localizadores com autorrecuperação, priorização inteligente de testes e validação visual. Mecanismos de IA detectam desvios nos localizadores, recomendam seletores estáveis ​​e analisam padrões de falha, o que mantém os conjuntos de testes híbridos confiáveis ​​à medida que a aplicação em teste evolui.

Sim. Os assistentes de IA modernos analisam a aplicação em teste e sugerem bibliotecas de palavras-chave, exemplos de entradas e casos extremos. Os testadores revisam e refinam as sugestões, o que acelera a configuração da estrutura e mantém a funcionalidade.ping Supervisão humana na lógica de validação crítica.

Resuma esta postagem com: