Selenium Marco: datos, palabras clave e híbridos

⚡ Resumen inteligente

Selenium Marco de trabajo: Los enfoques basados ​​en datos, palabras clave e híbridos definen cómo los evaluadores organizan el código de automatización, separan los datos de prueba y reutilizan la lógica. Este artículo explica cada tipo de marco de trabajo, su arquitectura, ventajas y cómo implementarlos paso a paso con ejemplos prácticos. Selenium Ejemplos de código de WebDriver.

  • Definición básica: A Selenium Un framework es una arquitectura de código estructurada que mejora la reutilización, la portabilidad y el mantenimiento de los scripts de prueba automatizados.
  • 📊 Implementación basada en datos: Separe los datos de prueba de la lógica utilizando Excel, CSV o XML, y lea las entradas a través de Apache POI (HSSF para XLS, XSSF para XLSX).
  • 🔑 Diseño basado en palabras clave: Impulsa las acciones de la interfaz de usuario a través de hojas de palabras clave y repositorios de objetos para que los evaluadores manuales puedan crear casos sin escribir código. Java código.
  • ⚙️ Optimización híbrida: Combinar TestNG Proveedores de datos con ejecución mediante palabras clave para obtener flexibilidad, escalabilidad y reducir los costes de mantenimiento de los scripts.
  • 🧩 Beneficio del repositorio de objetos: Centralice los localizadores en un archivo de propiedades para que los cambios en los elementos requieran actualizar solo una ubicación en todos los casos de prueba.

Selenium Marco conceptual

¿Qué es Selenium ¿Estructura?

El Selenium marco de automatización Se trata de una arquitectura de código estructurada que simplifica, escala y optimiza el mantenimiento de las pruebas. Sin un framework, los evaluadores suelen colocar el código y los datos en el mismo lugar, lo que dificulta su reutilización y legibilidad. La adopción de un framework ofrece beneficios tangibles, como una mayor reutilización del código, mejor portabilidad, menor coste de mantenimiento de los scripts, mayor legibilidad y una separación más clara entre la lógica de las pruebas y los datos de entrada.

¿Por qué utilizar un Selenium ¿Marco de automatización?

Un Selenium Este marco de trabajo resuelve tres problemas persistentes en la automatización de pruebas: la duplicación de código, los localizadores poco fiables y los datos de prueba difíciles de gestionar. Al imponer una estructura clara, los equipos pueden escalar sus conjuntos de pruebas desde unos pocos scripts hasta cientos sin perder el control.

  • Mantenibilidad: Los localizadores centralizados y los métodos auxiliares implican que un solo cambio actualiza todas las pruebas que utilizan ese elemento.
  • Reutilización: Las operaciones comunes, como el inicio de sesión, la navegación o la introducción de formularios, se escriben una sola vez y se invocan en muchos casos de prueba.
  • Escalabilidad: Agregar nuevos casos de prueba se convierte en una actualización de datos en lugar de una tarea de codificación, lo que permite que personas que no son desarrolladores contribuyan con escenarios.
  • Informes y colaboración: La estructura estandarizada facilita la integración con herramientas de generación de informes, pipelines de CI/CD y control de versiones.

Tipos de Selenium Marco conceptual

Hay tres primarios tipos de marcos construida sobre Selenium WebDriver para automatizar casos de prueba manuales. Cada estilo busca un equilibrio diferente entre el esfuerzo del desarrollador, la participación del probador y la flexibilidad de los datos.

  • Marco basado en datos
  • Marco basado en palabras clave
  • Marco impulsado por híbrido

Tipos de Selenium Marco conceptual

Las siguientes secciones explican cada marco de trabajo en detalle, comenzando con el enfoque más sencillo basado en datos y avanzando hasta el modelo híbrido más flexible.

Marco basado en datos en Selenium

Marco basado en datos en Selenium es un método para separar los conjuntos de datos de prueba de la lógica del caso de prueba. Una vez que los datos están desacoplados, puede modificar las entradas para una funcionalidad particular sin tocar el código de prueba. Se usa comúnmente para obtener casos y conjuntos de prueba de fuentes externas como Excel, .csv, .xml o tablas de bases de datos.

Marco basado en datos en Selenium

Para leer o escribir archivos de Excel, Apache proporciona la conocida biblioteca POI. Esta biblioteca puede manejar ambos XLS y XLSX formatos. los HSSF La implementación lee archivos XLS heredados, mientras que la XSSF La implementación admite archivos XLSX modernos.

Ya hemos cubierto las pruebas basadas en datos en nuestro tutorial anterior.

Marco basado en palabras clave en Selenium

Marco basado en palabras clave en Selenium es un método que acelera la automatización al separar las palabras clave para funciones e instrucciones comunes. Todas las operaciones e instrucciones se escriben en un archivo externo, normalmente una hoja de Excel. Los evaluadores pueden especificar las funcionalidades que desean validar sin modificar Java código, lo que hace que este estilo sea ideal para equipos donde los analistas de negocio o el control de calidad manual contribuyen con definiciones de pruebas.

Así es como se ve el marco completo:

Marco basado en palabras clave en Selenium

Como pueden ver, se trata de un marco de trabajo de 5 pasos. Estudiémoslo paso a paso en detalle.

Paso 1)

  • El script del controlador Execute.java llama a ReadGuru99ExcelFile.java.
  • LeerGuruEl archivo 99ExcelFile.java contiene código POI que lee datos de Excel.

Paso 2)

  • LeerGuru99ExcelFile.java lee datos del archivo TestCase.xlsx.
  • Así es como se ve la hoja:

Hoja de Excel del marco impulsado por palabras clave Selenium

  • En función de las palabras clave escritas en el archivo de Excel, el sistema realiza la acción correspondiente en la interfaz de usuario.
  • Por ejemplo, para hacer clic en un botón con la etiqueta "Iniciar sesión", la hoja de Excel almacena la palabra clave "Clic". Para identificar el botón de inicio de sesión entre varios en una página, la fila de Excel define el nombre del objeto como loginButton y el tipo de objeto como name (vea la fila resaltada en la imagen). El tipo de objeto también puede ser XPath, CSS, clase o cualquier otra estrategia de localización.

Paso 3) LeerGuru99ExcelFile.java pasa los datos analizados de vuelta al script principal Execute.java.

Paso 4)

  • Para todos los elementos web de la interfaz de usuario, se mantiene un repositorio de objetos que almacena localizadores de elementos como XPath, nombre, CSS o nombre de clase.

Repositorio de objetos en un marco de trabajo basado en palabras clave

  • El script Execute.java (el script principal) lee todo el repositorio de objetos y lo almacena en una variable.
  • Una clase auxiliar ReadObject expone un método getObjectRepository que carga el repositorio en tiempo de ejecución.

Clase auxiliar ReadObject para el marco de trabajo basado en palabras clave.

NOTA: Quizás te preguntes por qué se necesita un repositorio de objetos. La respuesta es la facilidad de mantenimiento. Si un botón con el nombre "btnlogin" se usa en 10 casos de prueba y el desarrollador lo renombra a "submit", tendrías que editar 10 archivos. Con un repositorio de objetos, solo tienes que cambiar la ubicación en un único lugar.

Paso 5)

  • El controlador transfiere datos de Excel y del repositorio de objetos a la interfaz de usuario.Operaclase de ción.
  • UIOperaLa función contiene funciones que asignan cada palabra clave, como CLICK y SETTEXT, a una acción concreta de WebDriver.
  • UIOperación es una Java Clase que contiene la implementación real para interactuar con los elementos web.

UIOperaclase ción en el marco de trabajo impulsado por palabras clave

La estructura completa del proyecto es la siguiente:

Estructura completa del proyecto del marco de trabajo basado en palabras clave

Veamos un ejemplo práctico:

Escenario de prueba: Estamos ejecutando 2 casos de prueba.

propiedades del objeto

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

LeerGuru99ExcelFile.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;
    }
}

LeerObjeto.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;
    }
}

UIOperación.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");
        }
    }
}

EjecutarTest.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");
            }
        }
    }
}

Tras la ejecución, el resultado se ve así:

Salida de ejecución del marco de trabajo basado en palabras clave

Descargue nuestra Selenium Archivos de proyecto para la demostración en este tutorial

Marco impulsado por híbrido

Marco impulsado por híbrido in Selenium Combina las ventajas de los marcos de trabajo basados ​​en palabras clave y en datos. Es un modelo fácil de usar que permite a los evaluadores manuales crear casos de prueba simplemente editando palabras clave, datos de prueba y el repositorio de objetos, sin necesidad de escribir código del marco de trabajo.

Aquí, los archivos de Excel mantienen las palabras clave para cada paso y TestNG, proveedor de datos Proporciona los datos de prueba. Esta división permite escalar tanto el vocabulario de acciones como las variaciones de entrada de forma independiente.

Arquitectura de marco de trabajo híbrido impulsado

En nuestro marco híbrido, no hay cambios en la estructura basada en palabras clave: simplemente reemplazamos ExecuteTest.java por HybridExecuteTest.java.

Reemplazo de componentes del marco de trabajo híbrido impulsado

Este archivo HybridExecuteTest contiene la lógica completa basada en palabras clave combinada con TestNGmecanismo del proveedor de datos.

La representación gráfica completa del marco híbrido tiene este aspecto:

Representación completa del marco de trabajo híbrido impulsado

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;
    }
}

Descargue nuestra Selenium Archivos de proyecto para la demostración en este tutorial

Preguntas Frecuentes

Seleccione la opción "Basada en palabras clave" cuando los evaluadores manuales necesiten crear casos sin programar. Seleccione la opción "Basada en datos" cuando el mismo script deba ejecutarse con múltiples variaciones de entrada. Utilice la opción "Híbrida" cuando requiera flexibilidad de datos y la creación de pruebas a nivel de palabras clave simultáneamente.

Apache POI lee y escribe archivos de Excel que se utilizan como fuente de datos. HSSF gestiona los archivos .xls antiguos, mientras que XSSF procesa los archivos .xlsx modernos. Juntos, permiten que tus scripts de prueba extraigan datos dinámicos de hojas de cálculo sin necesidad de codificarlos directamente.

Un repositorio de objetos centraliza los localizadores de elementos, como XPath, CSS o nombres. Si un desarrollador cambia el nombre de un control de interfaz de usuario, se actualiza una sola entrada en lugar de cada caso de prueba, lo que reduce drásticamente el tiempo de mantenimiento y el riesgo de que los scripts fallen.

La IA mejora Selenium Los marcos de trabajo se optimizan mediante localizadores autorreparables, priorización inteligente de pruebas y validación visual. Los motores de IA detectan la desviación de los localizadores, recomiendan selectores estables y analizan los patrones de fallos, lo que garantiza la fiabilidad de los conjuntos de pruebas híbridos a medida que evoluciona la aplicación bajo prueba.

Sí. Los asistentes de IA modernos analizan la aplicación que se está probando y proponen bibliotecas de palabras clave, entradas de ejemplo y casos límite. Los evaluadores revisan y refinan las sugerencias, lo que acelera la configuración del marco mientras se mantieneping Supervisión humana de la lógica de validación crítica.

Resumir este post con: