¿Qué es un marco de selenio?
El es Marco de selenio es una estructura de código que hace que el mantenimiento del código sea fácil y eficiente. Sin marcos, los usuarios pueden poner «código» y «datos» en el mismo lugar que no es reutilizable o legible. Los marcos producen resultados beneficiosos, como una mayor reutilización del código, una mayor portabilidad, un menor costo de mantenimiento del script, una mejor legibilidad del código, etc.
Selenium WebDriver ha creado principalmente tres tipos de marcos para automatizar casos de prueba manuales
- Marco de prueba basado en datos
- Marco de prueba de impulso de palabras clave
- Marco de prueba híbrido
Marco de datos impulsado por selenio
Marco de datos impulsado por selenio 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 conjuntos de archivos externos como Sobresalir, .csv, .xml o algunas tablas de base de datos.
Para leer o escribir en Excel, Apache POI proporciona una biblioteca muy popular. Esta biblioteca puede leer y escribir tanto XLS y XLSX Formato de archivo de Excel.
Ser leído XLS archivos, el HSSF La implementación es proporcionada por una biblioteca de puntos de interés.
Ser leído XLSX, XSSF implementación PDI Biblioteca Habrá una elección. Estudiemos estas implementaciones en detalle.
Ya hemos aprendido 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 que se utiliza 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 se escriben en un archivo externo, como una hoja de cálculo de Excel. Los usuarios pueden controlar y especificar fácilmente las funcionalidades que desean probar.
Así es como se ve todo el marco
Como puede ver, es un marco de 5 pasos. Estudiémoslo en detalle
Paso 1)
- El script del controlador Execute.java se llamará 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-
- De acuerdo con las palabras clave escritas en un 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’. Por lo tanto, la palabra clave será «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 un nombre de objeto como nombre de botón de inicio de sesión y tipo de objeto (vea la fila resaltada en la imagen de arriba). XPath podría ser el tipo de objeto, el nombre CSS o cualquier otro valor
Paso 3) ReadGuru99ExcelFile.java enviará estos datos al script del controlador Execute.java
Paso 4)
- Para cada uno de nuestros elementos web de UI, necesitamos crear un repositorio de objetos en el que colocamos su buscador de elementos (como XPath, nombre, ruta CSS, nombre de clase, etc.).
NOTA: Quizás se pregunte por qué necesitamos crear un repositorio de objetos. La respuesta ayuda con 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 insertarlo. Deberá realizar un cambio en los 10 casos de prueba. Para un repositorio de objetos, realizará el cambio una vez en el repositorio.
Paso 5)
- El controlador enviará los datos desde Excel y repositorio de objetos a la clase UIOperation
- La clase UIOperation tiene funciones para realizar acciones que corresponden a palabras clave como CLICK, SETTEXT, etc.
- La clase UIOperation es una Java una clase que realmente ha aplicado el código para realizar operaciones en elementos web
Aparecerá todo el proyecto-
Veamos un ejemplo:
Caso de prueba
propiedades del objeto
url =http://demo.guru99.com/V4/
nombre de usuario = uid
contraseña = contraseña
título = barón
loginButton = btnLogin
resetButton = btnReset
ReadGuru99ExcelFile.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; } }
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 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; } }
UIOperation.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"); } } }
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 { // 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á:
Descargue los archivos de proyecto de Selenium para la demostración en este tutorial
Marco híbrido
Marco híbrido El selenio es un concepto en el que aprovechamos el marco de palabras clave, así como el marco basado en datos. Es un marco fácil de usar que permite a los probadores manuales crear casos de prueba mirando directamente las palabras clave, los datos de prueba y el repositorio de objetos no codificados 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 datos, proveedor Testng creat.
Aquí, en nuestro marco híbrido, no necesitamos cambiar nada en el marco de palabras clave, aquí solo necesitamos reemplazar el archivo HybridExecuteTest.java con el archivo ExecuteTest.java.
Todo el código de una palabra clave está impulsado por el concepto de proveedor de datos en este archivo HybridExecuteTest.
La representación de la imagen completa aparecerá en un marco híbrido
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; } }
Resumen:
- Podemos crear tres tipos de marco de prueba utilizando 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 un proveedor de datos TestNG.
- En un marco impulsado por palabras clave, las palabras clave se escriben en algunos archivos externos como el archivo de Excel y el código Java proporcionará este archivo y ejecutará casos de prueba.
- El marco híbrido es una combinación de un marco impulsado por claves y basado en datos.
Descargue los archivos de proyecto de Selenium para la demostración en este tutorial