Marco de automatización de selenio: basado en datos, basado en palabras clave y amp; Híbrido

Tabla de contenido:

Anonim

¿Qué es Selenium Framework?

El Marco de selenio es una estructura de código que hace que el mantenimiento del código fácil y eficiente. Sin marcos, los usuarios pueden colocar el "código" y los "datos" en la misma ubicación que no es reutilizable ni legible. Los marcos producen resultados beneficiosos como una mayor reutilización del código, una mayor portabilidad, un costo reducido de mantenimiento del script, una mejor legibilidad del código, etc.

Hay principalmente tres tipos de marcos creados por Selenium WebDriver para automatizar casos de prueba manuales

  • Marco de prueba basado en datos
  • Marco de prueba basado en palabras clave
  • Marco de prueba híbrido

Marco basado en datos en selenio

Data Driven Framework en Selenium es un método para separar conjuntos de datos del caso de prueba. Una vez que los conjuntos de datos se separan del caso de prueba, se pueden modificar fácilmente para una funcionalidad específica sin cambiar el código. Se utiliza para buscar casos de prueba y conjuntos de archivos externos como Excel, .csv, .xml o algunas tablas de bases de datos.

Para leer o escribir un Excel, Apache proporciona un PDI de biblioteca muy famoso. Esta biblioteca es lo suficientemente capaz de leer y escribir en formato de archivo XLS y XLSX de Excel.

Para leer archivos XLS , la biblioteca de puntos de interés proporciona una implementación HSSF .

Para leer XLSX, la implementación XSSF de la biblioteca de puntos de interés será la opción. Estudiemos estas implementaciones en detalle.

Ya aprendimos sobre las pruebas basadas en datos en nuestro tutorial anterior

Marco basado en palabras clave en Selenium

El marco basado en palabras clave en Selenium es un método utilizado para acelerar las pruebas automatizadas mediante la separación de palabras clave para un conjunto común de funciones e instrucciones. Todas las operaciones e instrucciones a realizar están escritas en algún archivo externo como una hoja de Excel. Los usuarios pueden controlar y especificar fácilmente las funcionalidades que desean probar.

Así es como se ve el marco completo

Como puede ver, es un marco de 5 pasos. Estudiémoslo paso a paso en detalle

Paso 1)

  • El script del controlador Execute.java llamará a ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java tiene un script de POI para leer datos de un Excel

Paso 2)

  • ReadGuru99ExcelFile.java leerá datos de TestCase.xlsx
  • Así es como se ve la hoja:
  • De acuerdo con las palabras clave escritas en el archivo de Excel, el marco realizará la operación en la interfaz de usuario.
  • Por ejemplo, debemos hacer clic en el botón 'Iniciar sesión'. En consecuencia, nuestro Excel tendrá una palabra clave "Haga clic". Ahora el AUT puede tener cientos de botones en una página, para identificar un botón de inicio de sesión, en Excel ingresaremos el nombre del objeto como botón de inicio de sesión y el tipo de objeto como nombre (vea la fila resaltada en la imagen de arriba). El tipo de objeto puede ser XPath, nombre CSS o cualquier otro valor

Paso 3) ReadGuru99ExcelFile.java pasará estos datos al script del controlador Execute.java

Paso 4)

  • Para todos nuestros elementos web de UI, necesitamos crear un repositorio de objetos donde colocaremos su localizador de elementos (como XPath, nombre, ruta CSS, nombre de clase, etc.)
  • Execute.java (nuestro script de controlador) leerá el repositorio de objetos completo y lo almacenará en una variable
  • Para leer este repositorio de objetos, necesitamos una clase ReadObject que tiene un método getObjectRepository para leerlo.

NOTA: Puede pensar por qué necesitamos crear un repositorio de objetos. La respuesta ayuda en el mantenimiento del código. Por ejemplo, estamos usando el botón con name = btnlogin en 10 casos de prueba diferentes. En el futuro, el desarrollador decide cambiar el nombre de btnlogin para enviar. Tendrá que hacer un cambio en los 10 casos de prueba. En el caso de un repositorio de objetos, realizarás el cambio solo una vez en el repositorio.

Paso 5)

  • El controlador pasará los datos de Excel & Object Repository a la clase UIOperation
  • La clase UIOperation tiene funciones para realizar acciones correspondientes a palabras clave como CLICK, SETTEXT, etc., mencionadas en Excel
  • La clase UIOperation es una clase Java que tiene la implementación real del código para realizar operaciones en elementos web

El proyecto completo se verá como-

Veamos un ejemplo:

Escenario de prueba

  • Estamos ejecutando 2 casos de prueba
  • Caso de prueba 1:
  • Ir a http://demo.guru99.com/V4/
  • Ingrese ID de usuario
  • Introducir la contraseña
  • Haga clic en Restablecer.
  • Caso de prueba 2:
  • Ir a http://demo.guru99.com/V4/
  • Ingrese ID de usuario
  • Introducir la contraseña
  • Haga clic en Iniciar sesión

propiedades del objeto

url = http: //demo.guru99.com/V4/

nombre de usuario = uid

contraseña = contraseña

title = barone

loginButton = btnLogin

resetButton = btnReset

ReadGuru99ExcelFile.java

paquete excelExportAndFileIO;import java.io.File;import java.io.FileInputStream;import java.io.IOException;importar org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Sheet;importar org.apache.poi.ss.usermodel.Workbook;importar org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) lanza IOException {// Crea un objeto de la clase File para abrir el archivo xlsxArchivo archivo = nuevo archivo (ruta de archivo + "\\" + nombre de archivo);// Crea un objeto de la clase FileInputStream para leer el archivo de ExcelFileInputStream inputStream = nuevo FileInputStream (archivo);Libro de trabajo guru99Workbook = null;// Busque la extensión del archivo dividiendo el nombre del archivo en sustitución y obteniendo solo el nombre de la extensiónString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Verifique la condición si el archivo es un archivo xlsxif (fileExtensionName.equals (". xlsx")) {// Si es un archivo xlsx, cree un objeto de la clase XSSFWorkbookguru99Workbook = nuevo XSSFWorkbook (inputStream);}// Verifique la condición si el archivo es un archivo xlselse if (fileExtensionName.equals (". xls")) {// Si es un archivo xls, crea un objeto de la clase XSSFWorkbookguru99Workbook = nuevo HSSFWorkbook (inputStream);}// Leer la hoja dentro del libro de trabajo por su nombreHoja guru99Sheet = guru99Workbook.getSheet (sheetName);return guru99Sheet;}}

ReadObject.java

operación de paquete;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;ReadObject de clase pública {Propiedades p = nuevas Propiedades ();getObjectRepository () de propiedades públicas lanza IOException {// Leer el archivo del repositorio de objetosFlujo de InputStream = nuevo FileInputStream (nuevo Archivo (System.getProperty ("user.dir") + "\\ src \\ objetos \\ object.properties"));// cargar todos los objetosp.load (flujo);return p;}}

UIOperation.java

operación de paquete;import java.util.Properties;import org.openqa.selenium.By;importar org.openqa.selenium.WebDriver;UIOperation de clase pública {Controlador WebDriver;UIOperation pública (controlador WebDriver) {this.driver = controlador;}public void perform (Propiedades p, operación String, String objectName, String objectType, String value) arroja Exception {System.out.println ("");switch (operation.toUpperCase ()) {caso "CLIC":// Realizar clicdriver.findElement (this.getObject (p, objectName, objectType)). click ();descanso;caso "SETTEXT":// Establecer texto en controldriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (valor);descanso;caso "GOTOURL":// Obtener la URL de la aplicacióndriver.get (p.getProperty (valor));descanso;caso "GETTEXT":// Obtener el texto de un elementodriver.findElement (this.getObject (p, objectName, objectType)). getText ();descanso;defecto:descanso;}}/ *** Buscar elemento mediante el uso de tipo de objeto y valor* @param p* @param objectName* @param objectType* @regreso* @throws Exception* /private Por getObject (Propiedades p, String objectName, String objectType) lanza Exception {// Encontrar por xpathif (objectType.equalsIgnoreCase ("XPATH")) {return By.xpath (p.getProperty (objectName));}// buscar por claseelse if (objectType.equalsIgnoreCase ("CLASSNAME")) {return By.className (p.getProperty (objectName));}// buscar por nombreelse if (objectType.equalsIgnoreCase ("NAME")) {return By.name (p.getProperty (objectName));}// Encontrar por csselse if (objectType.equalsIgnoreCase ("CSS")) {return By.cssSelector (p.getProperty (objectName));}// buscar por enlaceelse if (objectType.equalsIgnoreCase ("LINK")) {return By.linkText (p.getProperty (objectName));}// buscar por enlace parcialelse if (objectType.equalsIgnoreCase ("PARTIALLINK")) {return By.partialLinkText (p.getProperty (objectName));}demás{lanzar nueva Excepción ("Tipo de objeto incorrecto");}}}

ExecuteTest.java

package testCases;import java.util.Properties;operación de importación.ReadObject;operación de importación UIOperation;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;importar org.openqa.selenium.WebDriver;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.annotations.Test;import excelExportAndFileIO.ReadGuru99ExcelFile;public class ExecuteTest {@Pruebapublic void testLogin () lanza Exception {// TODO código auxiliar de método generado automáticamenteWebDriver webdriver = new FirefoxDriver ();ReadGuru99ExcelFile archivo = nuevo ReadGuru99ExcelFile ();Objeto ReadObject = new ReadObject ();Propiedades allObjects = object.getObjectRepository ();Operación UIOperation = nueva UIOperation (webdriver);// Leer hoja de palabras claveHoja guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Encuentra el número de filas en el archivo de Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Crea un bucle sobre todas las filas del archivo de Excel para leerlopara (int i = 1; i " + row.getCell (0) .toString () + "Iniciado");}}}}

Después de la ejecución, la salida se verá así:

Descargue los archivos de proyecto de Selenium para la demostración en este tutorial

Marco híbrido

El marco híbrido en Selenium es un concepto en el que estamos utilizando la ventaja tanto del marco basado en palabras clave como del marco basado en datos. Es un marco fácil de usar que permite a los probadores manuales crear casos de prueba con solo mirar las palabras clave, los datos de prueba y el repositorio de objetos sin codificar en el marco.

Aquí, para las palabras clave, usaremos archivos de Excel para mantener los casos de prueba, y para los datos de prueba, podemos usar los datos, proveedor del marco Testng.

Aquí, en nuestro marco híbrido, no necesitamos cambiar nada en el marco impulsado por palabras clave, aquí solo necesitamos reemplazar el archivo ExecuteTest.java con el archivo HybridExecuteTest.java.

Este archivo HybridExecuteTest tiene todo el código para palabras clave controladas con el concepto de proveedor de datos.

La representación pictórica completa del marco híbrido se verá como

HybridExecuteTest.java

package testCases;import java.io.IOException;import java.util.Properties;operación de importación.ReadObject;operación de importación UIOperation;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;importar org.openqa.selenium.WebDriver;importar 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 palabra clave, String objectName, String objectType, String value) arroja Exception {// TODO código auxiliar de método generado automáticamenteif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = new FirefoxDriver ();}Objeto ReadObject = new ReadObject ();Propiedades allObjects = object.getObjectRepository ();Operación UIOperation = nueva UIOperation (webdriver);// Llamar a la función de ejecución para realizar la operación en la interfaz de usuariooperation.perform (allObjects, palabra clave, objectName,objectType, valor);}@DataProvider (nombre = "hybridData")public Object [] [] getDataFromDataprovider () lanza IOException {Objeto [] [] objeto = nulo;ReadGuru99ExcelFile archivo = nuevo ReadGuru99ExcelFile ();// Leer hoja de palabras claveHoja guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Encuentra el número de filas en el archivo de Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();objeto = nuevo Objeto [rowCount] [5];para (int i = 0; i 

Resumen:

  • Podemos crear tres tipos de marco de prueba usando Selenium WebDriver.
  • Estos son marcos de prueba basados ​​en datos, basados ​​en palabras clave e híbridos.
  • Podemos lograr un marco basado en datos utilizando el proveedor de datos de TestNG.
  • En el marco impulsado por palabras clave, las palabras clave se escriben en algunos archivos externos como el archivo de Excel y el código Java llamará a este archivo y ejecutará casos de prueba.
  • El marco híbrido es una combinación de marco impulsado por palabras clave y basado en datos.

Descargue los archivos de proyecto de Selenium para la demostración en este tutorial