Selenium Marco: datos, palabras clave e híbridos
¿Qué es el Selenium ¿Estructura?
El Selenium marco de automatización es una estructura de código que hace que el mantenimiento del código sea 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, mayor portabilidad, menor costo de mantenimiento de scripts, mejor legibilidad del código, etc.
Tipos de Selenium Marco conceptual
Hay principalmente tres tipo de marcos creado por Selenium WebDriver para automatizar casos de prueba manuales
- Marco basado en datos
- Marco basado en palabras clave
- Marco impulsado por híbrido
Marco basado en datos en Selenium
Marco basado en datos 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 recuperar casos de prueba y suites de archivos externos como Excel, .csv, .xml o algunas tablas de bases de datos.
Para leer o escribir Excel, Apache proporciona una biblioteca de puntos de interés muy famosa. Esta biblioteca es lo suficientemente capaz de leer y escribir tanto XLS y XLSX formato de archivo de Excel.
Leer XLS archivos, un HSSF La implementación la proporciona la biblioteca de puntos de interés.
Leer XLSX, XSSF aplicación de POI bibliotecas será la elecció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
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 que se deben realizar se escriben en un 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, se trata de un marco de trabajo de 5 pasos. Vamos a estudiarlo paso a paso en detalle.
Paso 1)
- El script del controlador Execute.java llamará a ReadGuru99ExcelFile.java
- ReadGuru99ExcelFile.java tiene un script de puntos de interés para leer datos de Excel
Paso 2)
- ReadGuru99ExcelFile.java leerá datos de TestCase.xlsx
- Así es como se ve la hoja:
- Según las palabras clave escritas en el archivo Excel, el marco realizará la operación en la interfaz de usuario.
- Por ejemplo, necesitamos hacer clic en el botón "Iniciar sesión". En consecuencia, nuestro Excel tendrá la palabra clave "Hacer 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 tipo de objeto como nombre (consulte la fila resaltada en la imagen de arriba). El tipo de objeto podría 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á todo el repositorio de objetos y lo almacenará en una variable
- Para leer este repositorio de objetos, necesitamos una clase ReadObject que tenga un método getObjectRepository para leerlo.
NOTA: Quizás se pregunte 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 nombre = btnlogin en 10 casos de prueba diferentes. En el futuro, el desarrollador decide cambiar el nombre de btnlogin a enviar. Tendrá que realizar un cambio en los 10 casos de prueba. En el caso de un repositorio de objetos, realizará el cambio solo una vez en el repositorio.
Paso 5)
- El controlador pasará los datos de Excel y el repositorio de objetos a la interfaz de usuarioOperaclase de ción
- UIOperaLa clase tion tiene funciones para realizar acciones correspondientes a palabras clave como CLICK, SETTEXT, etc. mencionadas en Excel.
- UIOperaclase de ción es una Java Clase que tiene la implementación real del código para realizar operaciones en elementos web.
El proyecto completo se verá así-
Veamos un ejemplo:
Escenario de prueba: Estamos ejecutando 2 casos de prueba.
- Caso de prueba 1:
- Ir
http://demo.guru99.com/V4/
- Introduzca el ID de usuario
- Introducir la contraseña
- Haga clic en Restablecer.
- Caso de prueba 2:
- Ir
http://demo.guru99.com/V4/
- Introduzca el ID de usuario
- Introducir la contraseña
- Haga clic en Iniciar sesión
propiedades del objeto
url=http://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 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; } }
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 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": //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"); } } }
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 { // 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"); } } } }
Después de la ejecución, la salida se verá 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 es un concepto en el que utilizamos 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 evaluadores 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 casos de prueba, y para los datos de prueba, podemos usar datos, proveedor de Prueba marco de referencia.
Aquí, en nuestro marco híbrido, no necesitamos cambiar nada en el marco controlado 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 impulsado con el concepto de proveedor de datos.
La representación pictórica completa del marco híbrido se verá así
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; } }
Resum
- Podemos crear tres tipos de marco de prueba usando Selenium Controlador web.
- A Selenium marco de automatización que se puede clasificar en marcos basados en datos, basados en palabras clave y híbridos.
- Podemos lograr un marco basado en datos usando TestNGEl proveedor de datos.
- En el marco basado en palabras clave, las palabras clave se escriben en algunos archivos externos, como un 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 basado en palabras clave y basado en datos.
Descargue nuestra Selenium Archivos de proyecto para la demostración en este tutorial