Selenium Framework: dati, parole chiave e guida ibrida

Cosa è Selenium Struttura?

Selenium quadro di automazione è una struttura di codice che rende la manutenzione del codice semplice ed efficiente. Senza framework, gli utenti potrebbero posizionare il “codice” e i “dati” nella stessa posizione che non è né riutilizzabile né leggibile. I framework producono risultati vantaggiosi come maggiore riusabilità del codice, maggiore portabilità, costi ridotti di manutenzione degli script, migliore leggibilità del codice, ecc.

Tipi di Selenium Contesto

Sono principalmente tre tipo di quadri creato da Selenium WebDriver per automatizzare i casi di test manuali

  • Quadro basato sui dati
  • Framework guidato da parole chiave
  • Quadro guidato ibrido

Tipi di Selenium Contesto

Framework basato sui dati in Selenium

Framework basato sui dati in Selenium è un metodo per separare i set di dati dal caso di test. Una volta separati i set di dati dal test case, è possibile modificarli facilmente per una funzionalità specifica senza modificare il codice. Viene utilizzato per recuperare casi di test e suite da file esterni come Excel, .csv, .xml o alcune tabelle del database.

Framework basato sui dati in Selenium

Per leggere o scrivere un Excel, Apache mette a disposizione una famosissima libreria POI. Questa libreria è sufficientemente in grado di leggere e scrivere entrambi XLS e XLSX formato file di Excel.

Leggere XLS file, un HSSF l'implementazione è fornita dalla libreria POI.

Leggere XLSX, XSSF implementazione di POI biblioteca sarà la scelta. Studiamo queste implementazioni in dettaglio.

Abbiamo già appreso del Data Driven Testing nel nostro tutorial precedente

Framework basato su parole chiave in Selenium

Framework basato su parole chiave in Selenium è un metodo utilizzato per accelerare i test automatizzati separando le parole chiave per un insieme comune di funzioni e istruzioni. Tutte le operazioni e le istruzioni da eseguire sono scritte in qualche file esterno come un foglio Excel. Gli utenti possono facilmente controllare e specificare le funzionalità che desiderano testare.

Ecco come appare il quadro completo

Framework basato su parole chiave in Selenium

Come puoi vedere è un framework in 5 step. Studiamolo passo dopo passo in dettaglio

Passo 1)

  • Lo script del driver Execute.java chiamerà ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java ha uno script POI per leggere i dati da un Excel

Passo 2)

  • ReadGuru99ExcelFile.java leggerà i dati da TestCase.xlsx
  • Ecco come appare il foglio:

Framework basato su parole chiave in Selenium

  • In base alle parole chiave scritte nel file Excel, il framework eseguirà l'operazione sull'interfaccia utente.
  • Ad esempio, dobbiamo fare clic sul pulsante "Accedi". Di conseguenza, il nostro Excel avrà una parola chiave "Clic". Ora l'AUT può avere centinaia di pulsanti su una pagina, per identificare un pulsante di accesso, in Excel inseriremo il nome dell'oggetto come loginButton e il tipo di oggetto come nome (vedi evidenziata la riga nell'immagine sopra). Il tipo di oggetto potrebbe essere XPath, nome CSS o qualsiasi altro valore

Passo 3) ReadGuru99ExcelFile.java passerà questi dati allo script del driver Execute.java

Passo 4)

  • Per tutti i nostri elementi web dell'interfaccia utente, dobbiamo creare un repository di oggetti in cui posizioneremo il localizzatore di elementi (come Xpath, nome, percorso CSS, nome classe ecc.)

Framework basato su parole chiave in Selenium

  • Execute.java (il nostro script del driver) leggerà l'intero repository di oggetti e lo memorizzerà in una variabile
  • Per leggere questo repository di oggetti, abbiamo bisogno di una classe ReadObject che abbia un metodo getObjectRepository per leggerlo.
  • Framework basato su parole chiave in Selenium

NOTA: Potresti pensare perché dobbiamo creare un repository di oggetti. La risposta aiuta nella manutenzione del codice. Ad esempio, stiamo utilizzando il pulsante con name = btnlogin in 10 diversi casi di test. In futuro, lo sviluppatore decide di cambiare il nome da btnlogin a submission. Dovrai apportare una modifica in tutti e 10 i casi di test. Nel caso di un repository di oggetti, apporterai la modifica solo una volta nel repository.

Passo 5)

  • Il driver passerà i dati da Excel e Object Repository all'interfaccia utenteOperaclasse di zione
  • UIOperation ha funzioni per eseguire azioni corrispondenti a parole chiave come CLICK, SETTEXT ecc… menzionate in Excel
  • UIOperala classe di zione è a Java classe che ha l'effettiva implementazione del codice per eseguire operazioni sugli elementi web

Framework basato su parole chiave in Selenium

Il progetto completo sarà simile a:

Framework basato su parole chiave in Selenium

Esaminiamo un esempio:

Scenario di prova: Stiamo eseguendo 2 casi di test

oggetto.proprietà

url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

LeggiGuru99ExcelFile.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");
        }
    }
}

EseguiTest.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");
            }
        }
    }
}

Dopo l'esecuzione, l'output sarà simile a:

Framework basato su parole chiave in Selenium

Scarica la Selenium File di progetto per la demo in questo tutorial

Quadro guidato ibrido

Quadro guidato ibrido in Selenium è un concetto in cui utilizziamo il vantaggio sia del framework basato sulle parole chiave che del framework basato sui dati. È un framework facile da usare che consente ai tester manuali di creare casi di test semplicemente osservando le parole chiave, i dati di test e il repository di oggetti senza scrivere codice nel framework.

Qui per le parole chiave utilizzeremo i file Excel per gestire i casi di test e per i dati di test possiamo utilizzare data, provider of Test struttura.

Quadro guidato ibrido

Qui nel nostro framework ibrido, non abbiamo bisogno di cambiare nulla nel framework basato su parole chiave, qui dobbiamo solo sostituire il file ExecuteTest.java con il file HybridExecuteTest.java.

Quadro guidato ibrido

Questo file HybridExecuteTest contiene tutto il codice per le parole chiave guidate dal concetto di provider di dati.

Apparirà la rappresentazione pittorica completa della struttura ibrida

Quadro guidato ibrido

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;    
    }
}

Sintesi

  • Possiamo creare tre tipi di framework di test utilizzando Selenium WebDriver.
  • A Selenium framework di automazione che può essere classificato in framework Data Driven, Keyword Driven e Hybrid.
  • Possiamo ottenere un framework basato sui dati utilizzando TestNGil fornitore di dati di.
  • Nel framework basato su parole chiave, le parole chiave vengono scritte in alcuni file esterni come il file Excel e il codice Java chiamerà questo file ed eseguirà casi di test.
  • Il framework ibrido è un mix di framework basato su parole chiave e framework basato sui dati.

Scarica la Selenium File di progetto per la demo in questo tutorial