Selenium Marco: datos, palabras clave e híbridos

Que es Selenium ¿Estructura?

The 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 readable. Los marcos producen resultados beneficiosos como una mayor reutilización del código, mayor portabilidad, reducción del 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

Tipos de Selenium Marco conceptual

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.

Marco basado en datos en Selenium

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 and 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 separando palabras clave para un conjunto común de funciones e instrucciones. Todos operaLas 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

Marco basado en palabras clave en Selenium

Como puede ver, es un marco de 5 pasos. Estudiémoslo pasowise 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:

Marco basado en palabras clave en Selenium

  • De acuerdo con 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.)

Marco basado en palabras clave en Selenium

  • 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.
  • Marco basado en palabras clave en Selenium

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 a realizar operaciones sobre elementos web

Marco basado en palabras clave en Selenium

El proyecto completo se verá así-

Marco basado en palabras clave en Selenium

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í:

Marco basado en palabras clave en Selenium

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 Testng marco de referencia.

Marco impulsado por híbrido

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.

Marco impulsado por híbrido

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í

Marco impulsado por 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 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