Selenium Raamistik: andmete, märksõnade ja hübriidpõhine
Mis on Selenium Raamistik?
. Selenium automatiseerimise raamistik on koodistruktuur, mis muudab koodi hooldamise lihtsaks ja tõhusaks. Ilma raamistiketa võivad kasutajad paigutada "koodi" ja "andmed" samasse kohta, mis ei ole korduvkasutatav ega loetav. Raamistikud annavad kasulikke tulemusi, nagu suurem koodi korduvkasutatavus, suurem kaasaskantavus, väiksemad skripti hoolduskulud, parem koodi loetavus jne.
Tüübid Selenium Raamistik
Neid on peamiselt kolm raamistike tüüp loodud Selenium WebDriver käsitsi testjuhtumite automatiseerimiseks
- Andmepõhine raamistik
- Märksõnapõhine raamistik
- Hübriidajamiga raamistik
Andmepõhine raamistik sisse Selenium
Andmepõhine raamistik sisse Selenium on meetod andmekogumite testjuhtumist eraldamiseks. Kui andmekogumid on testjuhtumist eraldatud, saab seda hõlpsasti konkreetse funktsiooni jaoks muuta ilma koodi muutmata. Seda kasutatakse testjuhtumite ja komplektide toomiseks välistest failidest, näiteks Excel, .csv, .xml või mõned andmebaasi tabelid.
Exceli lugemiseks või kirjutamiseks pakub Apache väga kuulsat raamatukogu POI-d. See raamatukogu on piisavalt võimeline nii lugemiseks kui ka kirjutamiseks XLS ja XLSX Exceli failivormingus.
Lugema XLS failid, an HSSF teostuse pakub POI raamatukogu.
Lugema XLSX, XSSF rakendamine POI raamatukogu saab olema valik. Uurime neid rakendusi üksikasjalikult.
Andmepõhise testimise kohta õppisime juba oma eelmine juhendaja
Märksõnapõhine raamistik sisse Selenium
Märksõnapõhine raamistik sisse Selenium on meetod, mida kasutatakse automatiseeritud testimise kiirendamiseks, eraldades märksõnad tavaliste funktsioonide ja juhiste jaoks. Kõik tehtavad toimingud ja juhised on kirjutatud mõnda välisesse faili, näiteks Exceli lehele. Kasutajad saavad hõlpsasti kontrollida ja määrata funktsioone, mida nad soovivad testida.
Siin on, kuidas kogu raamistik välja näeb
Nagu näete, on see 5-astmeline raamistik. Uurime seda samm-sammult üksikasjalikult
Step 1)
- Draiveri skript Execute.java kutsub esile ReadGuru99ExcelFile.java
- ReadGuru99ExcelFile.java sisaldab POI-skripti andmete lugemiseks Excelist
Step 2)
- ReadGuru99ExcelFile.java loeb andmeid failist TestCase.xlsx
- Siin näeb leht välja -
- Vastavalt Exceli faili kirjutatud märksõnadele teostab raamistik toimingu kasutajaliideses.
- Näiteks peame klõpsama nuppu "Logi sisse". Vastavalt sellele on meie Excelis märksõna "Kliki". Nüüd võib AUT-l olla lehel sadu nuppe, sisselogimisnupu tuvastamiseks sisestame Excelis sisselogimisnupuks Objekti nime ja nimena objekti tüübi (vt ülaltoodud pildil esiletõstetud rida). Objekti tüüp võib olla Xpath, nimi CSS või mõni muu väärtus
Step 3) ReadGuru99ExcelFile.java edastab need andmed draiveri skriptile Execute.java
Step 4)
- Kõigi meie kasutajaliidese veebielementide jaoks peame looma objektihoidla, kuhu paigutame nende elementide asukoha (nt Xpath, nimi, CSS-i tee, klassi nimi jne).
- Execute.java (meie draiveri skript) loeb kogu objektihoidla ja salvestab selle muutujas
- Selle objektihoidla lugemiseks vajame klassi ReadObject, millel on selle lugemiseks meetod getObjectRepository.
MÄRKUS: Võite mõelda, miks me peame looma objektihoidla. Vastus aitab koodi hooldamisel. Näiteks kasutame nuppu nimi = btnlogin 10 erineval testjuhul. Edaspidi otsustab arendaja muuta nime btnlogin asemel esitajaks. Peate muutma kõigis 10 testjuhtumis. Objektihoidla puhul teete muudatuse hoidlas vaid üks kord.
Step 5)
- Draiver edastab andmed Exceli ja objektihoidlast kasutajaliideseleOperaklassi
- UIOperation klassil on funktsioonid toimingute tegemiseks, mis vastavad Excelis mainitud märksõnadele nagu KLIKK, SETTEXT jne.
- UIOperaklass on a Java klass, millel on veebielementidega toimingute tegemiseks koodi tegelik rakendamine
Kogu projekt näeb välja selline -
Vaatame näidet:
Testi stsenaarium: Teostame 2 testjuhtumit
- Testjuhtum 1:
- Minema
https://demo.guru99.com/V4/
- Sisesta kasutaja ID
- Sisestage parool
- Klõpsake nuppu Lähtesta
- Testjuhtum 2:
- Minema
https://demo.guru99.com/V4/
- Sisesta kasutaja ID
- Sisestage parool
- Klõpsake nuppu Logi sisse
objekt.omadused
url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset
Loe 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"); } } } }
Pärast täitmist näeb väljund välja selline -
Lae alla Selenium Selle õpetuse demo projektifailid
Hübriidajamiga raamistik
Hübriidajamiga raamistik in Selenium on kontseptsioon, mille puhul kasutame nii märksõnapõhise raamistiku kui ka andmepõhise raamistiku eeliseid. See on hõlpsasti kasutatav raamistik, mis võimaldab käsitsi testijatel luua testjuhtumeid, vaadates lihtsalt märksõnu, testandmeid ja objektide hoidlat ilma raamistikus kodeerimata.
Siin märksõnade jaoks kasutame testjuhtumite haldamiseks Exceli faile ja testandmete jaoks saame kasutada pakkuja andmeid Testng raamistik.
Meie hübriidraamistikus ei pea me märksõnapõhises raamistikus midagi muutma, siin peame lihtsalt asendama faili ExecuteTest.java failiga HybridExecuteTest.java.
Sellel HybridExecuteTesti failil on kogu märksõna kood, mis põhineb andmepakkuja kontseptsioonil.
Hübriidraamistiku täielik pildiline esitus näeb välja selline
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; } }
kokkuvõte
- Kasutades saame luua kolme tüüpi testraamistikku Selenium Veebidraiver.
- A Selenium automatiseerimisraamistik, mida saab liigitada andmepõhiseks, märksõnapõhiseks ja hübriidraamistikuks.
- Saame saavutada andmepõhise raamistiku kasutades TestNGandmepakkuja.
- Märksõnapõhises raamistikus kirjutatakse märksõnad mõnesse välisesse faili, näiteks Exceli faili, ja Java-kood kutsub seda faili ja käivitab testjuhtumid.
- Hübriidraamistik on segu märksõnapõhisest ja andmepõhisest raamistikust.
Lae alla Selenium Selle õpetuse demo projektifailid