Was ist Selenium Framework?
Das Selenium Framework ist eine Codestruktur, die die Codewartung einfach und effizient macht. Ohne Frameworks können Benutzer den „Code“ und die „Daten“ an derselben Stelle platzieren, die weder wiederverwendbar noch lesbar ist. Frameworks führen zu vorteilhaften Ergebnissen wie einer verbesserten Wiederverwendbarkeit von Code, einer höheren Portabilität, geringeren Kosten für die Skriptwartung, einer besseren Lesbarkeit des Codes usw.
Es gibt hauptsächlich drei Arten von Frameworks, die von Selenium WebDriver erstellt wurden, um manuelle Testfälle zu automatisieren
- Datengesteuertes Test-Framework
- Keyword Driven Test Framework
- Hybrid Test Framework
Datengesteuertes Framework in Selen
Data Driven Framework in Selen ist eine Methode zum Trennen von Datensätzen vom Testfall. Sobald die Datensätze vom Testfall getrennt sind, können sie leicht für eine bestimmte Funktionalität geändert werden, ohne den Code zu ändern. Es wird verwendet, um Testfälle und Suites aus externen Dateien wie Excel, CSV, XML oder einigen Datenbanktabellen abzurufen.
Zum Lesen oder Schreiben eines Excel bietet Apache einen sehr bekannten POI für Bibliotheken. Diese Bibliothek kann sowohl das XLS- als auch das XLSX- Dateiformat von Excel lesen und schreiben .
Zum Lesen von XLS- Dateien wird eine HSSF- Implementierung von der POI-Bibliothek bereitgestellt.
Zum Lesen von XLSX ist die XSSF- Implementierung der POI- Bibliothek die Wahl. Lassen Sie uns diese Implementierungen im Detail untersuchen.
Wir haben bereits in unserem vorherigen Tutorial etwas über datengesteuertes Testen gelernt
Keyword-gesteuertes Framework in Selen
Das Keyword Driven Framework in Selen ist eine Methode zur Beschleunigung automatisierter Tests, bei der Keywords für allgemeine Funktionen und Anweisungen getrennt werden. Alle auszuführenden Vorgänge und Anweisungen werden in eine externe Datei wie eine Excel-Tabelle geschrieben. Benutzer können die zu testenden Funktionen einfach steuern und spezifizieren.
So sieht das komplette Framework aus
Wie Sie sehen können, handelt es sich um ein 5-Stufen-Framework. Lassen Sie es uns schrittweise im Detail studieren
Schritt 1)
- Das Treiberskript Execute.java ruft ReadGuru99ExcelFile.java auf
- ReadGuru99ExcelFile.java verfügt über ein POI-Skript zum Lesen von Daten aus einem Excel
Schritt 2)
- ReadGuru99ExcelFile.java liest Daten aus TestCase.xlsx
- So sieht das Blatt aus:
- Entsprechend den in der Excel-Datei geschriebenen Schlüsselwörtern führt das Framework den Vorgang auf der Benutzeroberfläche aus.
- Zum Beispiel müssen wir auf die Schaltfläche "Anmelden" klicken. Entsprechend hat unser Excel das Schlüsselwort "Click". Jetzt kann das AUT Hunderte von Schaltflächen auf einer Seite haben, um eine Anmeldeschaltfläche zu identifizieren. In Excel geben wir den Objektnamen als loginButton und den Objekttyp als Namen ein (siehe hervorgehobene Zeile im obigen Bild). Der Objekttyp kann Xpath, Name CSS oder ein beliebiger anderer Wert sein
Schritt 3) ReadGuru99ExcelFile.java übergibt diese Daten an das Treiberskript Execute.java
Schritt 4)
- Für alle unsere UI-Webelemente müssen wir ein Objekt-Repository erstellen, in dem wir ihren Element-Locator platzieren (wie Xpath, Name, CSS-Pfad, Klassenname usw.).
- Execute.java (unser Treiberskript) liest das gesamte Objekt-Repository und speichert es in einer Variablen
- Zum Lesen dieses Objekt-Repositorys benötigen wir eine ReadObject-Klasse mit einer getObjectRepository-Methode zum Lesen.
HINWEIS: Möglicherweise überlegen Sie, warum wir ein Objekt-Repository erstellen müssen. Die Antwort hilft bei der Codepflege. Zum Beispiel verwenden wir die Schaltfläche mit name = btnlogin in 10 verschiedenen Testfällen. In Zukunft beschließt der Entwickler, den Namen von btnlogin in Submit zu ändern. Sie müssen in allen 10 Testfällen eine Änderung vornehmen. Bei einem Objekt-Repository nehmen Sie die Änderung nur einmal im Repository vor.
Schritt 5)
- Der Treiber übergibt die Daten aus Excel & Object Repository an die UIOperation-Klasse
- Die UIOperation-Klasse verfügt über Funktionen zum Ausführen von Aktionen, die Schlüsselwörtern wie CLICK, SETTEXT usw. entsprechen, die im Excel erwähnt werden
- Die UIOperation-Klasse ist eine Java-Klasse, die die tatsächliche Implementierung des Codes zum Ausführen von Operationen an Webelementen enthält
Das komplette Projekt wird so aussehen:
Schauen wir uns ein Beispiel an:
Testszenario
- Wir führen 2 Testfälle aus
- Testfall 1:
- Gehe zu http://demo.guru99.com/V4/
- Geben Sie die Benutzer-ID ein
- Passwort eingeben
- Klicken Sie auf Zurücksetzen
- Testfall 2:
- Gehe zu http://demo.guru99.com/V4/
- Geben Sie die Benutzer-ID ein
- Passwort eingeben
- Klicken Sie auf Anmelden
object.properties
url = http: //demo.guru99.com/V4/
Benutzername = UID
Passwort = Passwort
Titel = Barone
loginButton = btnLogin
resetButton = btnReset
ReadGuru99ExcelFile.java
Paket 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;öffentliche Klasse ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) löst IOException {aus// Erstelle ein Objekt der File-Klasse, um die XLSX-Datei zu öffnenDatei file = neue Datei (filePath + "\\" + fileName);// Erstellen Sie ein Objekt der FileInputStream-Klasse, um die Excel-Datei zu lesenFileInputStream inputStream = neuer FileInputStream (Datei);Arbeitsmappe guru99Workbook = null;// Suchen Sie die Dateierweiterung, indem Sie den Dateinamen in der Unterzeichenfolge teilen und nur den Erweiterungsnamen abrufenString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Überprüfen Sie die Bedingung, ob es sich bei der Datei um eine xlsx-Datei handeltif (fileExtensionName.equals (". xlsx")) {// Wenn es sich um eine xlsx-Datei handelt, erstellen Sie ein Objekt der XSSFWorkbook-Klasseguru99Workbook = neues XSSFWorkbook (inputStream);}}// Überprüfen Sie die Bedingung, ob die Datei eine XLS-Datei istsonst wenn (fileExtensionName.equals (". xls")) {// Wenn es sich um eine XLS-Datei handelt, erstellen Sie ein Objekt der XSSFWorkbook-Klasseguru99Workbook = neues HSSFWorkbook (inputStream);}}// Blatt in der Arbeitsmappe anhand seines Namens lesenSheet guru99Sheet = guru99Workbook.getSheet (sheetName);return guru99Sheet;}}}}
ReadObject.java
Paketbetrieb;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;öffentliche Klasse ReadObject {Eigenschaften p = neue Eigenschaften ();public Properties getObjectRepository () löst IOException aus {// Objekt-Repository-Datei lesenInputStream stream = neuer FileInputStream (neue Datei (System.getProperty ("user.dir") + "\\ src \\ Objekte \\ object.properties"));// alle Objekte ladenp.load (Stream);return p;}}}}
UIOperation.java
Paketbetrieb;import java.util.Properties;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;öffentliche Klasse UIOperation {WebDriver-Treiber;öffentliche UIOperation (WebDriver-Treiber) {this.driver = Treiber;}}public void perform (Eigenschaften p, String-Operation, String objectName, String objectType, String-Wert) löst Exception {ausSystem.out.println ("");switch (operation.toUpperCase ()) {Fall "KLICKEN":// Klick ausführendriver.findElement (this.getObject (p, objectName, objectType)). click ();brechen;Fall "SETTEXT":// Text auf Steuerung setzendriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (value);brechen;Fall "GOTOURL":// URL der Anwendung abrufendriver.get (p.getProperty (Wert));brechen;Fall "GETTEXT":// Text eines Elements abrufendriver.findElement (this.getObject (p, objectName, objectType)). getText ();brechen;Standard:brechen;}}}}/ *** Suchen Sie das Element BY anhand des Objekttyps und des Werts* @param p* @param objectName* @param objectType* @Rückkehr* @throws Ausnahme* /private By getObject (Eigenschaften p, String objectName, String objectType) löst Exception {aus// Mit xpath suchenif (objectType.equalsIgnoreCase ("XPATH")) {return By.xpath (p.getProperty (objectName));}}// nach Klasse findensonst wenn (objectType.equalsIgnoreCase ("CLASSNAME")) {return By.className (p.getProperty (objectName));}}// nach Namen suchensonst wenn (objectType.equalsIgnoreCase ("NAME")) {return By.name (p.getProperty (objectName));}}// Suche per CSSsonst wenn (objectType.equalsIgnoreCase ("CSS")) {return By.cssSelector (p.getProperty (objectName));}}// per Link findensonst wenn (objectType.equalsIgnoreCase ("LINK")) {return By.linkText (p.getProperty (objectName));}}// durch partiellen Link findensonst wenn (objectType.equalsIgnoreCase ("PARTIALLINK")) {return By.partialLinkText (p.getProperty (objectName));}sonst{neue Ausnahme auslösen ("Falscher Objekttyp");}}}}}}
ExecuteTest.java
Paket 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;öffentliche Klasse ExecuteTest {@Prüfungpublic void testLogin () löst eine Ausnahme aus {// TODO Automatisch generierter MethodenstubWebDriver webdriver = neuer FirefoxDriver ();ReadGuru99ExcelFile file = new ReadGuru99ExcelFile ();ReadObject object = new ReadObject ();Eigenschaften allObjects = object.getObjectRepository ();UIOperation operation = neue UIOperation (Webdriver);// Schlüsselwortblatt lesenSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Anzahl der Zeilen in der Excel-Datei ermittelnint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Erstelle eine Schleife über alle Zeilen der Excel-Datei, um sie zu lesenfür (int i = 1; i" + row.getCell (0) .toString () + "Started");}}}}}}}}
Nach der Ausführung sieht die Ausgabe wie folgt aus:
Laden Sie die Selenium-Projektdateien für die Demo in diesem Tutorial herunter
Hybrid Framework
Das Hybrid Framework in Selen ist ein Konzept, bei dem wir den Vorteil sowohl des Keyword-gesteuerten Frameworks als auch des datengesteuerten Frameworks nutzen. Es ist ein einfach zu verwendendes Framework, mit dem manuelle Tester Testfälle erstellen können, indem sie nur die Schlüsselwörter, Testdaten und das Objekt-Repository betrachten, ohne im Framework zu codieren.
Hier verwenden wir für Schlüsselwörter Excel-Dateien, um Testfälle zu verwalten, und für Testdaten können wir Daten verwenden, Anbieter des Testng-Frameworks.
Hier in unserem Hybrid-Framework müssen wir nichts im Keyword-gesteuerten Framework ändern. Hier müssen wir nur die Datei ExecuteTest.java durch die Datei HybridExecuteTest.java ersetzen.
Diese HybridExecuteTest-Datei enthält den gesamten Code für Schlüsselwörter, die vom Datenprovider-Konzept gesteuert werden.
Die vollständige bildliche Darstellung des Hybrid-Frameworks wird so aussehen
HybridExecuteTest.java
Paket 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;öffentliche Klasse HybridExecuteTest {WebDriver webdriver = null;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String keyword, String objectName, String objectType, String value) löst eine Ausnahme aus {// TODO Automatisch generierter Methodenstubif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = neuer FirefoxDriver ();}}ReadObject object = new ReadObject ();Eigenschaften allObjects = object.getObjectRepository ();UIOperation operation = neue UIOperation (Webdriver);// Perform-Funktion aufrufen, um die Operation auf der Benutzeroberfläche auszuführenoperation.perform (allObjects, Schlüsselwort, Objektname,objectType, value);}}@DataProvider (name = "hybridData")public Object [] [] getDataFromDataprovider () löst IOException aus {Object [] [] object = null;ReadGuru99ExcelFile file = new ReadGuru99ExcelFile ();// Schlüsselwortblatt lesenSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Anzahl der Zeilen in der Excel-Datei ermittelnint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();object = new Object [rowCount] [5];für (int i = 0; iZusammenfassung:
- Mit Selenium WebDriver können drei Arten von Testframeworks erstellt werden.
- Dies sind datengesteuerte, schlüsselwortgesteuerte und hybride Testframeworks.
- Mit dem Datenprovider von TestNG können wir ein datengesteuertes Framework erreichen.
- In einem schlüsselwortgesteuerten Framework werden Schlüsselwörter in einige externe Dateien wie Excel-Dateien geschrieben, und Java-Code ruft diese Datei auf und führt Testfälle aus.
- Das Hybrid-Framework ist eine Mischung aus Keyword-gesteuertem und datengesteuertem Framework.
Laden Sie die Selenium-Projektdateien für die Demo in diesem Tutorial herunter