Hvad er Selen Framework?
Den Selen Framework er en kode struktur, der gør koden vedligeholdelse nem og effektiv. Uden rammer kan brugerne placere "koden" og "data" på samme sted, som hverken kan genbruges eller læses. Rammer producerer gavnlige resultater som øget genanvendelighed af kode, højere bærbarhed, reducerede omkostninger til scriptvedligeholdelse, bedre kodelæsbarhed osv.
Der er hovedsageligt tre typer rammer, der er oprettet af Selenium WebDriver til at automatisere manuelle testsager
- Datadrevet testramme
- Keyword Driven Test Framework
- Hybrid testramme
Datadrevet ramme i selen
Data Driven Framework in Selenium er en metode til at adskille datasæt fra testsagen. Når datasættene er adskilt fra testtilfælde, kan det let ændres til en bestemt funktionalitet uden at ændre koden. Det bruges til at hente testcases og suiter fra eksterne filer som Excel, .csv, .xml eller nogle databasetabeller.
For at læse eller skrive en Excel leverer Apache et meget berømt POI for biblioteker. Dette bibliotek er i stand til at læse og skrive både XLS- og XLSX -filformat i Excel.
For at læse XLS- filer leveres en HSSF- implementering af POI-biblioteket.
For at læse XLSX vil XSSF- implementering af POI- biblioteket være valget. Lad os studere disse implementeringer i detaljer.
Vi har allerede lært om datadrevet test i vores tidligere vejledning
Keyword Driven Framework in Selenium
Keyword Driven Framework in Selenium er en metode, der bruges til at fremskynde automatiseret test ved at adskille nøgleord til fælles sæt funktioner og instruktioner. Alle operationer og instruktioner, der skal udføres, er skrevet i en ekstern fil som et Excel-ark. Brugere kan nemt kontrollere og specificere de funktioner, de vil teste.
Sådan ser den komplette ramme ud
Som du kan se, er det en 5-trins ramme. Lad os studere det trinvist i detaljer
Trin 1)
- Driverscriptet Execute.java kalder ReadGuru99ExcelFile.java
- ReadGuru99ExcelFile.java har POI-script til at læse data fra en Excel
Trin 2)
- ReadGuru99ExcelFile.java læser data fra TestCase.xlsx
- Sådan ser arket ud -
- I henhold til nøgleordene skrevet i Excel-fil, vil rammen udføre handlingen på brugergrænsefladen.
- For eksempel skal vi klikke på knappen 'Login'. Tilsvarende vil vores Excel have nøgleordet 'Klik'. Nu kan AUT have hundreder af knapper på en side for at identificere en Login-knap.I Excel vil vi indtaste Objektnavn som loginButton & objekttype som et navn (se fremhævet række i ovenstående billede). Objektypen kan være Xpath, navn CSS eller en hvilken som helst anden værdi
Trin 3) ReadGuru99ExcelFile.java videregiver disse data til driver scriptet Execute.java
Trin 4)
- For alle vores UI-webelementer er vi nødt til at oprette et objektlager, hvor vi placerer deres elementlokator (som Xpath, navn, CSS-sti, klassenavn osv.)
- Execute.java (vores driver script) læser hele Object Repository og gemmer det i en variabel
- For at læse dette objektlager har vi brug for en ReadObject-klasse, der har en getObjectRepository-metode til at læse den.
BEMÆRK: Du tænker måske, hvorfor vi har brug for at oprette et objektlager. Svaret hjælper med vedligeholdelse af kode. For eksempel bruger vi knappen med navn = btnlogin i 10 forskellige testsager. I fremtiden beslutter udvikleren at ændre navnet fra btnlogin for at indsende. Du bliver nødt til at foretage en ændring i alle de 10 testsager. I tilfælde af et objektlager foretager du ændringen kun én gang i lageret.
Trin 5)
- Driveren videregiver dataene fra Excel & Object Repository til UIOperation-klassen
- UIOperation klasse har funktioner til at udføre handlinger svarende til nøgleord som CLICK, SETTEXT osv ... nævnt i excel
- UIOperation-klasse er en Java-klasse, der har den faktiske implementering af koden til at udføre operationer på webelementer
Det komplette projekt vil se ud som-
Lad os se på et eksempel:
Testscenarie
- Vi udfører to testsager
- Test sag 1:
- Gå til http://demo.guru99.com/V4/
- Indtast bruger-id
- Indtast adgangskode
- Klik på Nulstil
- Test sag 2:
- Gå til http://demo.guru99.com/V4/
- Indtast bruger-id
- Indtast adgangskode
- Klik på Login
objekt.egenskaber
url = http: //demo.guru99.com/V4/
brugernavn = uid
adgangskode = adgangskode
titel = barone
loginButton = btnLogin
resetButton = btnReset
ReadGuru99ExcelFile.java
pakke excelExportAndFileIO;import java.io.File;importere java.io.FileInputStream;importere java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;importer org.apache.poi.xssf.usermodel.XSSFWorkbook;offentlig klasse ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) kaster IOException {// Opret et objekt i filklassen for at åbne xlsx-filenFilfil = ny fil (filePath + "\\" + filnavn);// Opret et objekt i FileInputStream-klassen for at læse excel-filenFileInputStream inputStream = ny FileInputStream (fil);Arbejdsbog guru99Workbook = null;// Find filtypen ved at opdele filnavnet i substing og kun få navnet på udvidelsenString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Kontroller tilstanden, hvis filen er xlsx-filhvis (fileExtensionName.equals (". xlsx")) {// Hvis det er en xlsx-fil, skal du oprette objekt fra XSSFWorkbook-klassenguru99Workbook = ny XSSFWorkbook (inputStream);}// Kontroller tilstanden, hvis filen er xls-filellers hvis (fileExtensionName.equals (". xls")) {// Hvis det er xls-fil, skal du oprette objektet til XSSFWorkbook-klassenguru99Workbook = ny HSSFWorkbook (inputStream);}// Læs arket inde i projektmappen ved navnArk guru99Sheet = guru99Workbook.getSheet (arknavn);returnere guru99Sheet;}}
LæsObject.java
pakke operation;import java.io.File;importere java.io.FileInputStream;importere java.io.IOException;import java.io.InputStream;import java.util.Properties;offentlig klasse ReadObject {Egenskaber p = nye egenskaber ();public Properties getObjectRepository () kaster IOException {// Læs objektopbevaringsfilInputStream-strøm = ny FileInputStream (ny fil (System.getProperty ("bruger.dir") + "\\ src \\ objekter \\ object.properties"));// indlæse alle objekterp.load (stream);returnere p;}}
UIOperation.java
pakke operation;import java.util.Properties;importer org.openqa.selenium.By;import org.openqa.selenium.WebDriver;offentlig klasse UIOperation {WebDriver driver;offentlig UIOperation (WebDriver-driver) {this.driver = driver;}offentlig ugyldighed udføre (Egenskaber p, strenghandling, strengobjektnavn, strengobjektype, strengværdi) kaster undtagelse {System.out.println ("");switch (operation.toUpperCase ()) {sag "KLIK":// Udfør klikdriver.findElement (this.getObject (p, objectName, objectType)). klik ();pause;sag "SETTEXT":// Indstil tekst til kontroldriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (værdi);pause;sag "GOTOURL":// Hent url for ansøgningdriver.get (p.getProperty (værdi));pause;sag "GETTEXT":// Få tekst af et elementdriver.findElement (this.getObject (p, objectName, objectType)). getText ();pause;Standard:pause;}}/ *** Find element BY ved hjælp af objekttype og værdi* @param s* @param objektnavn* @param objectType* @Vend tilbage* @kaster undtagelse* /privat Ved getObject (Egenskaber p, String objektnavn, String objectType) kaster Undtagelse {// Find ved xpathhvis (objectType.equalsIgnoreCase ("XPATH")) {returnere By.xpath (p.getProperty (objectName));}// find efter klasseellers hvis (objectType.equalsIgnoreCase ("CLASSNAME")) {returnere By.className (p.getProperty (objectName));}// find ved navnellers hvis (objectType.equalsIgnoreCase ("NAME")) {returnere By.name (p.getProperty (objectName));}// Find ved cssellers hvis (objectType.equalsIgnoreCase ("CSS")) {returnere By.cssSelector (p.getProperty (objectName));}// find via linkellers hvis (objectType.equalsIgnoreCase ("LINK")) {returnere By.linkText (p.getProperty (objectName));}// find ved delvis linkellers hvis (objectType.equalsIgnoreCase ("PARTIALLINK")) {returnere By.partialLinkText (p.getProperty (objectName));}andet{smid ny undtagelse ("Forkert objekttype");}}}
ExecuteTest.java
pakke testkasser;import java.util.Properties;import operation.ReadObject;import operation.UIOdrift;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;offentlig klasse ExecuteTest {@Prøvepublic void testLogin () kaster undtagelse {// TODO Auto-genereret metodestubWebDriver webdriver = ny FirefoxDriver ();ReadGuru99ExcelFile-fil = ny ReadGuru99ExcelFile ();ReadObject-objekt = nyt ReadObject ();Egenskaber allObjects = object.getObjectRepository ();UIOperation operation = ny UIOperation (webdriver);// Læs søgeordsarkArk guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Find antallet af rækker i excel-filenint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Opret en sløjfe over alle rækkerne i Excel-filen for at læse denfor (int i = 1; i" + række.getCell (0) .toString () + "Startet");}}}}
Efter udførelse vil output se ud som -
Download Selenium-projektfiler til demo i denne vejledning
Hybrid ramme
Hybrid Framework i Selen er et koncept, hvor vi bruger fordelen ved både Keyword driven framework såvel som Data driven framework. Det er en brugervenlig ramme, der giver manuelle testere mulighed for at oprette testtilfælde ved blot at se på nøgleordene, testdata og objektopbevaring uden kodning i rammen.
Her til nøgleord bruger vi Excel-filer til at vedligeholde testcases, og til testdata kan vi bruge data, udbyder af Testng framework.
Her i vores hybrid ramme behøver vi ikke ændre noget i Keyword driven framework, her skal vi bare erstatte ExecuteTest.java-filen med HybridExecuteTest.java-filen.
Denne HybridExecuteTest-fil har al kode til nøgleordsdrevet med dataudbyder-koncept.
Den komplette billedlige gengivelse af hybridrammer vil se ud
HybridExecuteTest.java
pakke testkasser;importere java.io.IOException;import java.util.Properties;import operation.ReadObject;import operation.UIOdrift;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;offentlig klasse HybridExecuteTest {WebDriver webdriver = null;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String keyword, String objectName, String objectType, String value) throw Exception {// TODO Auto-genereret metodestubhvis (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = ny FirefoxDriver ();}ReadObject-objekt = nyt ReadObject ();Egenskaber allObjects = object.getObjectRepository ();UIOperation operation = ny UIOperation (webdriver);// Funktion for opkaldsudførelse for at udføre operation på UIoperation.perform (allObjects, keyword, objectName,objectType, værdi);}@DataProvider (navn = "hybridData")offentlig Objekt [] [] getDataFromDataprovider () kaster IOException {Objekt [] [] objekt = null;ReadGuru99ExcelFile-fil = ny ReadGuru99ExcelFile ();// Læs søgeordsarkArk guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Find antallet af rækker i excel-filenint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();objekt = nyt objekt [række] [5];for (int i = 0; iResumé:
- Vi kan oprette tre typer testrammer ved hjælp af Selenium WebDriver.
- Disse er Data Driven, Keyword Driven og Hybrid test framework.
- Vi kan opnå datadrevet ramme ved hjælp af TestNGs dataudbyder.
- I nøgleordsdrevet ramme skrives nøgleord i nogle eksterne filer som excel-fil, og javakode kalder denne fil og udfører testsager.
- Hybrid-rammen er en blanding af nøgleordsdrevet og datadrevet ramme.
Download Selenium-projektfiler til demo i denne vejledning