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
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.
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
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á-
- 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.)
- 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í.
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
Celý projekt bude vypadat např.
Podívejme se na příklad:
Scénář testu: Provádíme 2 testovací případy
- Testovací případ 1:
- Jít
http://demo.guru99.com/V4/
- Zadejte ID uživatele
- Zadejte heslo
- Klikněte na Resetovat
- Testovací případ 2:
- Jít
http://demo.guru99.com/V4/
- Zadejte ID uživatele
- Zadejte heslo
- Klikněte na Přihlásit
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 –
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.
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.
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
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