Saltar al contenido

Basado en datos, basado en palabras clave e híbrido

¿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

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *