Selenium Framework: Data, Keyword & Hybrid Driven

Co je to Selenium Rámec?

Jedno Selenium automatizační rámec je struktura kódu, která usnadňuje a zefektivňuje údržbu kódu. Bez rámců mohou uživatelé umístit „kód“ a „data“ na stejné místo, které není znovu použitelné ani čitelné. Frameworky přinášejí příznivé výsledky, jako je zvýšená znovupoužitelnost kódu, vyšší přenositelnost, nižší náklady na údržbu skriptů, lepší čitelnost kódu atd.

Druhy Selenium Rámec

Jsou především tři typ rámců vytvořil Selenium WebDriver pro automatizaci manuálních testovacích případů

  • Data Driven Framework
  • Framework řízený klíčovými slovy
  • Hybrid Driven Framework

Druhy Selenium Rámec

Data Driven Framework v Selenium

Data Driven Framework v Selenium je metoda oddělení datových sad od testovacího případu. Jakmile jsou datové sady odděleny od testovacího případu, lze je snadno upravit pro konkrétní funkce bez změny kódu. Používá se k načítání testovacích případů a sad z externích souborů jako vynikat, .csv, .xml nebo některé databázové tabulky.

Data Driven Framework v Selenium

Pro čtení nebo psaní Excelu poskytuje Apache velmi slavnou knihovnu POI. Tato knihovna je dostatečně schopná číst i zapisovat obojí XLS si XLSX formát souboru Excel.

Číst XLS soubory, an HSSF implementaci zajišťuje knihovna POI.

Číst XLSX, XSSF implementace POI knihovna bude volba. Pojďme si tyto implementace podrobně prostudovat.

O testování na základě dat jsme se již dozvěděli v našem předchozí tutoriál

Keyword Driven Framework in Selenium

Keyword Driven Framework in Selenium je metoda používaná pro urychlení automatizovaného testování oddělením klíčových slov pro běžnou sadu funkcí a instrukcí. Všechny operace a instrukce, které mají být provedeny, jsou zapsány v nějakém externím souboru, jako je list aplikace Excel. Uživatelé mohou snadno ovládat a specifikovat funkce, které chtějí testovat.

Takto vypadá kompletní framework

Keyword Driven Framework in Selenium

Jak můžete vidět, je to 5krokový rámec. Pojďme si to postupně prostudovat podrobně

Krok 1)

  • Skript ovladače Execute.java bude volat ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java má skript POI pro čtení dat z Excelu

Krok 2)

  • ReadGuru99ExcelFile.java načte data z TestCase.xlsx
  • Tady je list, jak vypadá-

Keyword Driven Framework in Selenium

  • Podle klíčových slov zapsaných v souboru aplikace Excel provede framework operaci na uživatelském rozhraní.
  • Potřebujeme například kliknout na tlačítko 'Přihlásit se'. V souladu s tím bude mít náš Excel klíčové slovo „Kliknout“. Nyní může mít AUT na stránce stovky tlačítek pro identifikaci tlačítka Login, v Excelu zadáme Object Name jako loginButton a typ objektu jako jméno (viz zvýrazněný řádek na obrázku výše). Typ objektu může být Xpath, název CSS nebo jakákoli jiná hodnota

Krok 3) ReadGuru99ExcelFile.java předá tato data skriptu ovladače Execute.java

Krok 4)

  • Pro všechny naše webové prvky uživatelského rozhraní musíme vytvořit úložiště objektů, kam umístíme jejich lokátor prvků (jako Xpath, název, cesta CSS, název třídy atd.)

Keyword Driven Framework in Selenium

  • Execute.java (náš skript ovladače) načte celý objekt Object Repository a uloží jej do proměnné
  • Ke čtení tohoto úložiště objektů potřebujeme třídu ReadObject, která má metodu getObjectRepository k jeho čtení.
  • Keyword Driven Framework in Selenium

POZNÁMKA: Možná si říkáte, proč potřebujeme vytvořit úložiště objektů. Odpověď pomáhá při údržbě kódu. Například používáme tlačítko s názvem = btnlogin v 10 různých testovacích případech. V budoucnu se vývojář rozhodne změnit název z btnlogin na předložení. Budete muset provést změnu ve všech 10 testovacích případech. V případě objektového úložiště provedete změnu pouze jednou v úložišti.

Krok 5)

  • Ovladač předá data z Excel & Object Repository do uživatelského rozhraníOperatřídy
  • UIOperaTřída tion má funkce pro provádění akcí odpovídajících klíčovým slovům jako CLICK, SETTEXT atd... zmíněným v excelu
  • UIOperatřída je a Java třída, která má skutečnou implementaci kódu pro provádění operací s prvky webu

Keyword Driven Framework in Selenium

Celý projekt bude vypadat např.

Keyword Driven Framework in Selenium

Podívejme se na příklad:

Scénář testu: Provádíme 2 testovací případy

objekt.vlastnosti

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

Přečtěte si Guru99ExcelFile.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");
            }
        }
    }
}

Po provedení bude výstup vypadat takto –

Keyword Driven Framework in Selenium

stáhněte Selenium Soubory projektu pro ukázku v tomto kurzu

Hybrid Driven Framework

Hybrid Driven Framework in Selenium je koncept, kde využíváme výhody rámce řízeného klíčovými slovy i rámce řízeného daty. Je to snadno použitelný rámec, který umožňuje ručním testerům vytvářet testovací případy pouhým pohledem na klíčová slova, testovací data a úložiště objektů bez kódování v rámci.

Zde pro klíčová slova použijeme soubory Excel k údržbě testovacích případů a pro testovací data můžeme použít data, poskytovatele Testng rámec.

Hybrid Driven Framework

Zde v našem hybridním frameworku nepotřebujeme nic měnit v rámci klíčových slov, zde stačí nahradit soubor ExecuteTest.java souborem HybridExecuteTest.java.

Hybrid Driven Framework

Tento soubor HybridExecuteTest obsahuje veškerý kód pro klíčová slova řízená konceptem poskytovatele dat.

Kompletní obrazové znázornění hybridního rámce bude vypadat takto

Hybrid Driven Framework

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

Shrnutí

  • Můžeme vytvořit tři typy testovacích rámců pomocí Selenium WebDriver.
  • A Selenium automatizační rámec, který lze rozdělit na datově řízené, klíčovými slovy a hybridní.
  • Můžeme dosáhnout datově řízeného rámce pomocí TestNGposkytovatel dat.
  • V rámci klíčových slov jsou klíčová slova zapsána v některých externích souborech, jako je soubor Excel a kód Java zavolá tento soubor a spustí testovací případy.
  • Hybridní rámec je kombinací rámce založeného na klíčových slovech a rámce založeného na datech.

stáhněte Selenium Soubory projektu pro ukázku v tomto kurzu