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 a 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

  • Testovacรญ pล™รญpad 1:
  • Jรญt https://demo.guru99.com/V4/
  • Zadejte ID uลพivatele
  • Zadejte heslo
  • Kliknฤ›te na Resetovat
  • Testovacรญ pล™รญpad 2:
  • Jรญt https://demo.guru99.com/V4/
  • Zadejte ID uลพivatele
  • Zadejte heslo
  • Kliknฤ›te na Pล™ihlรกsit

objekt.vlastnosti

url=https://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

Shrลˆte tento pล™รญspฤ›vek takto: