Vad är Selen Framework?
Den Selenium Framework är en kod struktur som gör kodunderhåll enkel och effektiv. Utan ramar kan användarna placera "koden" och "data" på samma plats som varken är återanvändbar eller läsbar. Ramar ger fördelaktiga resultat som ökad återanvändbar kod, högre bärbarhet, lägre kostnad för skriptunderhåll, bättre kodläsbarhet etc.
Det finns huvudsakligen tre typer av ramar skapade av Selenium WebDriver för att automatisera manuella testfall
- Datadriven testramverk
- Keyword Driven Test Framework
- Hybrid Test Framework
Datadriven ram i selen
Data Driven Framework in Selenium är en metod för att separera datamängder från testfallet. När datauppsättningarna är separerade från testfallet kan det enkelt modifieras för en specifik funktion utan att ändra koden. Den används för att hämta testfall och sviter från externa filer som Excel, .csv, .xml eller några databastabeller.
För att läsa eller skriva ett Excel tillhandahåller Apache ett mycket känt intressepunkt för biblioteket. Detta bibliotek kan tillräckligt för att läsa och skriva både XLS- och XLSX- filformat i Excel.
För att läsa XLS- filer tillhandahålls en HSSF- implementering av POI-biblioteket.
För att läsa XLSX kommer XSSF- implementering av POI- biblioteket att vara valet. Låt oss studera dessa implementeringar i detalj.
Vi lärde oss redan om datadriven testning i vår tidigare handledning
Keyword Driven Framework in Selenium
Keyword Driven Framework in Selenium är en metod som används för att påskynda automatiserad testning genom att separera nyckelord för vanliga uppsättningar funktioner och instruktioner. Alla åtgärder och instruktioner som ska utföras är skrivna i någon extern fil som ett Excel-ark. Användare kan enkelt kontrollera och specificera de funktioner de vill testa.
Så här ser hela ramverket ut
Som du kan se är det ett 5-stegs ramverk. Låt oss studera det steg för steg i detalj
Steg 1)
- Drivrutinsskriptet Execute.java kommer att ringa ReadGuru99ExcelFile.java
- ReadGuru99ExcelFile.java har POI-skript för att läsa data från en Excel
Steg 2)
- ReadGuru99ExcelFile.java läser data från TestCase.xlsx
- Så här ser arket ut-
- Enligt nyckelorden skrivna i Excel-fil kommer ramverket att utföra operationen på användargränssnittet.
- Vi måste till exempel klicka på knappen "Logga in". På motsvarande sätt kommer vårt Excel att ha ett nyckelord "Klicka". Nu kan AUT ha hundratals knappar på en sida, för att identifiera en inloggningsknapp, i Excel kommer vi att ange Objektnamn som inloggningKnapp & objekttyp som ett namn (se markerad raden i bilden ovan). Objekttypen kan vara Xpath, namn CSS eller något annat värde
Steg 3) ReadGuru99ExcelFile.java skickar dessa data till drivrutinsskriptet Execute.java
Steg 4)
- För alla våra UI-webbelement måste vi skapa ett objektförvar där vi placerar deras elementlokaliserare (som Xpath, namn, CSS-sökväg, klassnamn etc.)
- Execute.java (vårt drivrutinsskript) läser hela Objektförvaret och lagrar det i en variabel
- För att läsa detta objektförvar behöver vi en ReadObject-klass som har en getObjectRepository-metod för att läsa den.
OBS: Du kanske tänker varför behöver vi skapa ett objektförvar. Svaret hjälper till att underhålla koden. Till exempel använder vi knappen med namn = btnlogin i 10 olika testfall. I framtiden bestämmer utvecklaren att ändra namnet från btnlogin för att skicka. Du måste göra en förändring i alla tio testfall. När det gäller ett objektförvar kommer du att göra ändringen bara en gång i förvaret.
Steg 5)
- Drivrutinen skickar data från Excel & Object Repository till UIOperation-klassen
- UIOperation-klassen har funktioner för att utföra åtgärder som motsvarar nyckelord som CLICK, SETTEXT etc ... som nämns i excel
- UIOperation-klassen är en Java-klass som har den faktiska implementeringen av koden för att utföra operationer på webbelement
Hela projektet kommer att se ut-
Låt oss titta på ett exempel:
Testscenario
- Vi utför två testfall
- Testfall 1:
- Gå till http://demo.guru99.com/V4/
- Ange användar-ID
- Skriv in lösenord
- Klicka på Återställ
- Testfall 2:
- Gå till http://demo.guru99.com/V4/
- Ange användar-ID
- Skriv in lösenord
- Klicka på Logga in
objekt.egenskaper
url = http: //demo.guru99.com/V4/
användarnamn = uid
lösenord = lösenord
titel = baron
loginButton = btnLogin
resetButton = btnReset
ReadGuru99ExcelFile.java
paket excelExportAndFileIO;importera java.io.File;importera java.io.FileInputStream;importera java.io.IOException;importera org.apache.poi.hssf.usermodel.HSSFWorkbook;importera org.apache.poi.ss.usermodel.Sheet;importera org.apache.poi.ss.usermodel.Workbook;importera org.apache.poi.xssf.usermodel.XSSFWorkbook;offentlig klass ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) kastar IOException {// Skapa ett objekt av filklass för att öppna xlsx-filenFilfil = ny fil (filePath + "\\" + filnamn);// Skapa ett objekt av FileInputStream-klassen för att läsa Excel-filenFileInputStream inputStream = ny FileInputStream (fil);Arbetsbok guru99Workbook = null;// Hitta filtillägget genom att dela upp filnamnet i substing och få endast tilläggsnamnSträng fileExtensionName = fileName.substring (fileName.indexOf ("."));// Kontrollera tillståndet om filen är xlsx-filom (fileExtensionName.equals (". xlsx")) {// Om det är xlsx-fil skapar du objekt för XSSFWorkbook-klassenguru99Workbook = ny XSSFWorkbook (inputStream);}// Kontrollera tillståndet om filen är xls-filannars om (fileExtensionName.equals (". xls")) {// Om det är xls-fil skapar du objekt för XSSFWorkbook-klassenguru99Workbook = ny HSSFWorkbook (inputStream);}// Läs arket i arbetsboken med dess namnSheet guru99Sheet = guru99Workbook.getSheet (sheetName);returnera guru99Sheet;}}
ReadObject.java
paketdrift;importera java.io.File;importera java.io.FileInputStream;importera java.io.IOException;importera java.io.InputStream;importera java.util.Properties;offentlig klass ReadObject {Egenskaper p = nya egenskaper ();public Properties getObjectRepository () kastar IOException {// Läs objektförvarets filInputStream-ström = ny FileInputStream (ny fil (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// ladda alla objektp.load (ström);returnera p;}}
UIOperation.java
paketdrift;importera java.util.Properties;importera org.openqa.selenium.By;importera org.openqa.selenium.WebDriver;offentlig klass UIOperation {WebDriver-drivrutin;public UIOperation (WebDriver driver) {this.driver = driver;}public void perform (Properties p, String operation, String objectName, String objectType, String value) kast Exception {System.out.println ("");switch (operation.toUpperCase ()) {fall "KLICKA":// Utför klickdriver.findElement (this.getObject (p, objectName, objectType)). klicka ();ha sönder;fall "SETTEXT":// Ställ in text på kontrolldriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (värde);ha sönder;fall "GOTOURL":// Hämta url för ansökandriver.get (p.getProperty (värde));ha sönder;fall "GETTEXT":// Hämta text till ett elementdriver.findElement (this.getObject (p, objectName, objectType)). getText ();ha sönder;standard:ha sönder;}}/ *** Hitta element BY med hjälp av objekttyp och värde* @param s* @param objektnamn* @param objectType* @lämna tillbaka* @ kastar undantag* /privat Genom getObject (Egenskaper p, String objectName, String objectType) kastar Undantag {// Hitta med xpathif (objectType.equalsIgnoreCase ("XPATH")) {returnera By.xpath (p.getProperty (objectName));}// hitta efter klassannars om (objectType.equalsIgnoreCase ("CLASSNAME")) {returnera By.className (p.getProperty (objectName));}// hitta efter namnannars om (objectType.equalsIgnoreCase ("NAME")) {returnera By.name (p.getProperty (objectName));}// Hitta med cssannars om (objectType.equalsIgnoreCase ("CSS")) {returnera By.cssSelector (p.getProperty (objectName));}// hitta med länkannars om (objectType.equalsIgnoreCase ("LINK")) {returnera By.linkText (p.getProperty (objectName));}// hitta med partiell länkannars om (objectType.equalsIgnoreCase ("PARTIALLINK")) {returnera By.partialLinkText (p.getProperty (objectName));}annan{kasta nytt undantag ("Fel objekttyp");}}}
ExecuteTest.java
paket testcases;importera java.util.Properties;importoperation.ReadObject;importoperation.UIOoperation;importera org.apache.poi.ss.usermodel.Row;importera org.apache.poi.ss.usermodel.Sheet;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.annotations.Test;importera excelExportAndFileIO.ReadGuru99ExcelFile;offentlig klass ExecuteTest {@Testapublic void testLogin () kastar undantag {// TODO Auto-genererad metodstubWebDriver webdriver = ny FirefoxDriver ();ReadGuru99ExcelFile-fil = ny ReadGuru99ExcelFile ();ReadObject-objekt = nytt ReadObject ();Egenskaper allObjects = object.getObjectRepository ();UIOperation operation = ny UIOperation (webdriver);// Läs nyckelordsarkSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Hitta antal rader i Excel-filenint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Skapa en slinga över alla raderna i Excel-filen för att läsa denför (int i = 1; i" + row.getCell (0) .toString () + "Started");}}}}
Efter körning ser utdata ut som -
Ladda ner Selenium-projektfilerna för demo i den här självstudien
Hybridramverk
Hybrid Framework in Selenium är ett koncept där vi använder fördelen med både nyckelorddrivet ramverk och datadrivet ramverk. Det är ett lättanvänt ramverk som gör att manuella testare kan skapa testfall genom att bara titta på nyckelorden, testdata och objektförvar utan kodning i ramverket.
Här för nyckelord använder vi Excel-filer för att underhålla testfall, och för testdata kan vi använda data, leverantör av Testng-ramverket.
Här i vårt hybridramverk behöver vi inte ändra någonting i nyckelorddrivet ramverk, här behöver vi bara ersätta ExecuteTest.java-filen med HybridExecuteTest.java-filen.
Denna HybridExecuteTest-fil har all kod för nyckelord som drivs med dataleverantörskoncept.
Den fullständiga bildrepresentationen av hybridramverk kommer att se ut
HybridExecuteTest.java
paket testcases;importera java.io.IOException;importera java.util.Properties;importoperation.ReadObject;importoperation.UIOoperation;importera org.apache.poi.ss.usermodel.Row;importera org.apache.poi.ss.usermodel.Sheet;importera org.openqa.selenium.WebDriver;importera org.openqa.selenium.firefox.FirefoxDriver;importera org.testng.annotations.DataProvider;importera org.testng.annotations.Test;importera excelExportAndFileIO.ReadGuru99ExcelFile;offentlig klass HybridExecuteTest {WebDriver webdriver = null;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String keyword, String objectName, String objectType, String value) throw Exception {// TODO Auto-genererad metodstubom (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = ny FirefoxDriver ();}ReadObject-objekt = nytt ReadObject ();Egenskaper allObjects = object.getObjectRepository ();UIOperation operation = ny UIOperation (webdriver);// Funktion för samtalsutförande för att utföra operationer på UIoperation.perform (allObjects, keyword, objectName,objectType, värde);}@DataProvider (namn = "hybridData")offentligt objekt [] [] getDataFromDataprovider () kastar IOException {Objekt [] [] objekt = null;ReadGuru99ExcelFile-fil = ny ReadGuru99ExcelFile ();// Läs nyckelordsarkSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Hitta antal rader i Excel-filenint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();objekt = nytt objekt [rowCount] [5];för (int i = 0; iSammanfattning:
- Vi kan skapa tre typer av testramar med Selenium WebDriver.
- Dessa är Data Driven, Keyword Driven och Hybrid test framework.
- Vi kan uppnå datadrivet ramverk med TestNGs dataleverantör.
- I nyckelorddriven ram skrivs nyckelord i vissa externa filer som excel-fil och javakod kommer att ringa den här filen och köra testfall.
- Hybridramverket är en blandning av nyckelorddrivet och datadrivet ramverk.
Ladda ner Selenium-projektfilerna för demo i den här självstudien