Wat is Selenium Framework?
Het Selenium Framework is een codestructuur die het onderhoud van code eenvoudig en efficiënt maakt. Zonder frameworks kunnen gebruikers de “code” en “data” op dezelfde locatie plaatsen die noch herbruikbaar noch leesbaar is. Frameworks leveren gunstige resultaten op, zoals verhoogde herbruikbaarheid van code, hogere portabiliteit, lagere kosten voor scriptonderhoud, betere leesbaarheid van code, enz.
Er zijn hoofdzakelijk drie soorten frameworks gemaakt door Selenium WebDriver om handmatige testgevallen te automatiseren
- Data Driven Test Framework
- Sleutelwoordgestuurd testraamwerk
- Hybride testraamwerk
Data Driven Framework in Selenium
Data Driven Framework in Selenium is een methode om datasets te scheiden van de testcase. Zodra de datasets zijn gescheiden van de testcase, kunnen deze eenvoudig worden aangepast voor een specifieke functionaliteit zonder de code te wijzigen. Het wordt gebruikt om testcases en suites op te halen uit externe bestanden zoals Excel, .csv, .xml of enkele databasetabellen.
Om een Excel te lezen of te schrijven, biedt Apache een zeer beroemde bibliotheek-POI. Deze bibliotheek is capabel genoeg om zowel XLS- als XLSX- bestandsindelingen van Excel te lezen en te schrijven .
Om XLS- bestanden te lezen , wordt een HSSF- implementatie geleverd door de POI-bibliotheek.
Om XLSX te lezen , zal XSSF- implementatie van POI- bibliotheek de keuze zijn. Laten we deze implementaties in detail bestuderen.
We hebben al geleerd over Data Driven Testing in onze vorige tutorial
Sleutelwoordgestuurd raamwerk in selenium
Keyword Driven Framework in Selenium is een methode die wordt gebruikt om geautomatiseerde tests te versnellen door trefwoorden te scheiden voor gemeenschappelijke functies en instructies. Alle uit te voeren bewerkingen en instructies zijn geschreven in een extern bestand, zoals een Excel-blad. Gebruikers kunnen eenvoudig de functionaliteiten die ze willen testen beheren en specificeren.
Hier is hoe het complete raamwerk eruit ziet
Zoals u kunt zien, is het een raamwerk van vijf stappen. Laten we het stapsgewijs in detail bestuderen
Stap 1)
- Het stuurprogrammascript Execute.java zal ReadGuru99ExcelFile.java aanroepen
- ReadGuru99ExcelFile.java heeft POI-script om gegevens uit Excel te lezen
Stap 2)
- ReadGuru99ExcelFile.java leest gegevens uit TestCase.xlsx
- Hier is hoe het blad eruit ziet-
- Volgens de trefwoorden die in het Excel-bestand zijn geschreven, voert het framework de bewerking uit op de gebruikersinterface.
- We moeten bijvoorbeeld op een knop 'Inloggen' klikken. Dienovereenkomstig heeft onze Excel het trefwoord 'Klik'. Nu kan de AUT honderden knoppen op een pagina hebben om een inlogknop te identificeren, in Excel zullen we de objectnaam invoeren als loginButton & objecttype als een naam (zie de rij in bovenstaande afbeelding gemarkeerd). Het objecttype kan Xpath, naam CSS of een andere waarde zijn
Stap 3) ReadGuru99ExcelFile.java geeft deze gegevens door aan het stuurprogrammascript Execute.java
Stap 4)
- Voor al onze UI-webelementen moeten we een objectrepository maken waar we hun elementlocator plaatsen (zoals Xpath, naam, CSS-pad, klassenaam enz.)
- Execute.java (ons stuurprogrammascript) leest de volledige Object Repository en slaat deze op in een variabele
- Om deze objectrepository te lezen, hebben we een ReadObject-klasse nodig die een getObjectRepository-methode heeft om deze te lezen.
OPMERKING: u denkt misschien waarom we een objectrepository moeten maken. Het antwoord helpt bij het onderhoud van de code. Zo gebruiken we de knop met name = btnlogin in 10 verschillende testgevallen. In de toekomst besluit de ontwikkelaar om de naam van btnlogin te wijzigen in verzenden. U zult in alle 10 testgevallen een wijziging moeten doorvoeren. In het geval van een objectrepository, zult u de wijziging slechts één keer in de repository aanbrengen.
Stap 5)
- Het stuurprogramma geeft de gegevens van Excel & Object Repository door aan de UIOperation-klasse
- UIOperation-klasse heeft functies om acties uit te voeren die overeenkomen met sleutelwoorden zoals CLICK, SETTEXT enz ... die in Excel worden genoemd
- UIOperation-klasse is een Java-klasse die de daadwerkelijke implementatie van de code heeft om bewerkingen op webelementen uit te voeren
Het complete project ziet eruit als:
Laten we naar een voorbeeld kijken:
Testscenario
- We voeren 2 testcases uit
- Testgeval 1:
- Ga naar http://demo.guru99.com/V4/
- Voer gebruikers-ID in
- Voer wachtwoord in
- Klik op Opnieuw instellen
- Testgeval 2:
- Ga naar http://demo.guru99.com/V4/
- Voer gebruikers-ID in
- Voer wachtwoord in
- Klik op Inloggen
object.properties
url = http: //demo.guru99.com/V4/
gebruikersnaam = uid
password = wachtwoord
title = baron
loginButton = btnLogin
resetButton = btnReset
ReadGuru99ExcelFile.java
pakket excelExportAndFileIO;importeer java.io.File;importeer java.io.FileInputStream;importeer java.io.IOException;importeer org.apache.poi.hssf.usermodel.HSSFWorkbook;importeer org.apache.poi.ss.usermodel.Sheet;importeer org.apache.poi.ss.usermodel.Workbook;importeer org.apache.poi.xssf.usermodel.XSSFWorkbook;openbare klasse ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) genereert IOException {// Maak een object van de File-klasse om het xlsx-bestand te openenBestandsbestand = nieuw bestand (bestandspad + "\\" + bestandsnaam);// Maak een object van de FileInputStream-klasse om het Excel-bestand te lezenFileInputStream inputStream = nieuwe FileInputStream (bestand);Werkboek guru99Workbook = null;// Zoek de bestandsextensie door de bestandsnaam in substing te splitsen en alleen de extensienaam op te halenString fileExtensionName = bestandsnaam.substring (bestandsnaam.indexOf ("."));// Controleer de staat als het bestand een xlsx-bestand isif (fileExtensionName.equals (". xlsx")) {// Als het een xlsx-bestand is, maak dan een object van de XSSFWorkbook-klasseguru99Workbook = nieuw XSSFWorkbook (inputStream);// Controleer de staat als het bestand een xls-bestand iselse if (fileExtensionName.equals (". xls")) {// Als het een xls-bestand is, maak dan een object van de XSSFWorkbook-klasseguru99Workbook = nieuw HSSFWorkbook (inputStream);// Lees het blad in de werkmap op naamSheet guru99Sheet = guru99Workbook.getSheet (sheetName);retourneer guru99Sheet;
ReadObject.java
pakket operatie;importeer java.io.File;importeer java.io.FileInputStream;importeer java.io.IOException;importeer java.io.InputStream;importeer java.util.Properties;openbare klasse ReadObject {Eigenschappen p = nieuwe Eigenschappen ();openbare eigenschappen getObjectRepository () gooit IOException {// Lees objectrepositorybestandInputStream stream = nieuwe FileInputStream (nieuw bestand (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// laad alle objectenp.load (stream);terug p;
UIOperation.java
pakket operatie;importeer java.util.Properties;import org.openqa.selenium.By;importeer org.openqa.selenium.WebDriver;openbare klasse UIOperation {WebDriver-stuurprogramma;openbare UIOperation (WebDriver-stuurprogramma) {this.driver = bestuurder;public void perform (Eigenschappen p, String-bewerking, String-objectnaam, String-objecttype, String-waarde) genereert Uitzondering {System.out.println ("");schakelaar (operation.toUpperCase ()) {case "KLIK":// Voer een klik uitdriver.findElement (this.getObject (p, objectnaam, objecttype)). klik ();breken;case "SETTEXT":// Zet tekst op controledriver.findElement (this.getObject (p, objectnaam, objecttype)). sendKeys (waarde);breken;case "GOTOURL":// Haal de url van de applicatie opdriver.get (p.getProperty (waarde));breken;case "GETTEXT":// Haal de tekst van een element opdriver.findElement (this.getObject (p, objectnaam, objecttype)). getText ();breken;standaard:breken;* Zoek element door het objecttype en de waarde te gebruiken* @param p* @param objectnaam* @param objectType* @return* @throws Uitzonderingprivate By getObject (Properties p, String objectName, String objectType) genereert Uitzondering {// Zoek op xpathif (objectType.equalsIgnoreCase ("XPATH")) {retourneer By.xpath (p.getProperty (objectName));// zoek per klasseelse if (objectType.equalsIgnoreCase ("CLASSNAME")) {retourneer By.className (p.getProperty (objectName));// zoek op naamelse if (objectType.equalsIgnoreCase ("NAME")) {retourneer By.name (p.getProperty (objectName));// Zoek op csselse if (objectType.equalsIgnoreCase ("CSS")) {retourneer By.cssSelector (p.getProperty (objectName));// vind via linkelse if (objectType.equalsIgnoreCase ("LINK")) {retourneer By.linkText (p.getProperty (objectName));// zoeken door gedeeltelijke linkelse if (objectType.equalsIgnoreCase ("PARTIALLINK")) {terug By.partialLinkText (p.getProperty (objectName));}andersgooi nieuwe uitzondering ("Verkeerd objecttype");
ExecuteTest.java
pakket testCases;importeer java.util.Properties;import operatie.ReadObject;import operatie.UIOperation;importeer org.apache.poi.ss.usermodel.Row;importeer org.apache.poi.ss.usermodel.Sheet;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.Test;import excelExportAndFileIO.ReadGuru99ExcelFile;openbare klasse ExecuteTest {@Testpublic void testLogin () gooit uitzondering {// TODO Automatisch gegenereerde methodestubWebDriver webdriver = nieuwe FirefoxDriver ();ReadGuru99ExcelFile-bestand = nieuw ReadGuru99ExcelFile ();ReadObject-object = nieuw ReadObject ();Eigenschappen allObjects = object.getObjectRepository ();UIOperation-bewerking = nieuwe UIOperation (webdriver);// Lees het trefwoordenbladSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Zoek het aantal rijen in Excel-bestandint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Maak een lus over alle rijen met Excel-bestanden om het te lezenvoor (int i = 1; i" + row.getCell (0) .toString () + "Gestart");
Na uitvoering ziet de uitvoer eruit als -
Download de Selenium-projectbestanden voor de demo in deze zelfstudie
Hybride raamwerk
Hybrid Framework in Selenium is een concept waarbij we het voordeel gebruiken van zowel een trefwoordgestuurd raamwerk als een datagestuurd raamwerk. Het is een eenvoudig te gebruiken raamwerk waarmee handmatige testers testcases kunnen maken door alleen naar de trefwoorden, testgegevens en objectrepository te kijken zonder codering in het raamwerk.
Hier zullen we voor trefwoorden Excel-bestanden gebruiken om testcases te onderhouden, en voor testgegevens kunnen we gegevens gebruiken, leverancier van Testng-framework.
Hier in ons hybride framework hoeven we niets te veranderen in het trefwoordgestuurde framework, hier hoeven we alleen het ExecuteTest.java-bestand te vervangen door het HybridExecuteTest.java-bestand.
Dit HybridExecuteTest-bestand bevat alle code voor trefwoordgestuurd met het concept van de gegevensprovider.
De volledige picturale weergave van een hybride raamwerk zal eruit zien
HybridExecuteTest.java
pakket testCases;importeer java.io.IOException;importeer java.util.Properties;import operatie.ReadObject;import operatie.UIOperation;importeer org.apache.poi.ss.usermodel.Row;importeer org.apache.poi.ss.usermodel.Sheet;importeer org.openqa.selenium.WebDriver;importeer org.openqa.selenium.firefox.FirefoxDriver;importeer org.testng.annotations.DataProvider;importeer org.testng.annotations.Test;import excelExportAndFileIO.ReadGuru99ExcelFile;openbare klasse HybridExecuteTest {WebDriver webdriver = null;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String trefwoord, String objectName, String objectType, String waarde) genereert Uitzondering {// TODO Automatisch gegenereerde methodestubif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = nieuwe FirefoxDriver ();ReadObject-object = nieuw ReadObject ();Eigenschappen allObjects = object.getObjectRepository ();UIOperation-bewerking = nieuwe UIOperation (webdriver);// Roep de perform-functie op om een bewerking uit te voeren op de gebruikersinterfaceoperation.perform (allObjects, trefwoord, objectnaam,objectType, waarde);@DataProvider (naam = "hybridData")openbaar object [] [] getDataFromDataprovider () genereert IOException {Object [] [] object = null;ReadGuru99ExcelFile-bestand = nieuw ReadGuru99ExcelFile ();// Lees het trefwoordenbladSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Zoek het aantal rijen in Excel-bestandint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();object = nieuw object [rowCount] [5];voor (int i = 0; iOverzicht:
- We kunnen drie soorten testframeworks maken met Selenium WebDriver.
- Dit zijn gegevensgestuurd, trefwoordgestuurd en hybride testraamwerken.
- We kunnen een datagedreven raamwerk realiseren met behulp van de dataprovider van TestNG.
- In een trefwoordgestuurd framework worden trefwoorden geschreven in sommige externe bestanden, zoals Excel-bestand en java-code zal dit bestand aanroepen en testcases uitvoeren.
- Het hybride raamwerk is een mix van trefwoordgestuurd en datagestuurd raamwerk.
Download de Selenium-projectbestanden voor de demo in deze zelfstudie