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.

¿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
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.
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:
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:
- 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.
- 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.
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.
La estructura completa del proyecto es la siguiente:
Veamos un ejemplo práctico:
Escenario de prueba: Estamos ejecutando 2 casos de prueba.
- Caso de prueba 1:
- Ir
https://demo.guru99.com/V4/ - Introduzca el ID de usuario
- Introducir la contraseña
- Haga clic en Restablecer.
- Caso de prueba 2:
- Ir
https://demo.guru99.com/V4/ - Introduzca el ID de usuario
- Introducir la contraseña
- Haga clic en Iniciar sesión
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í:
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.
En nuestro marco híbrido, no hay cambios en la estructura basada en palabras clave: simplemente reemplazamos ExecuteTest.java por HybridExecuteTest.java.
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:
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












