Aufbau eines datengesteuerten, schlüsselwortgesteuerten und hybriden Selen-Frameworks



In diesem Blog wird erläutert, was ein Selenium-Framework ist, welche Vorteile es bietet und wie datengesteuerte, schlüsselwortgesteuerte und hybride Frameworks in Selen implementiert werden.

Der Vorherige In dieser Serie haben Sie grundlegende Konzepte für Selentests kennengelernt.In diesem Blog werde ich Ihnen jedoch erklären, wie Sie ein Selenium-Framework verwenden, um Ihre Codestruktur zu optimieren, und dies wird Sie näher bringen, um ein zu werden .

Was ist ein Selen-Framework?

Das Selenium Framework ist eine Codestruktur, die die Codewartung vereinfacht und die Lesbarkeit des Codes verbessert. Ein Framework umfasst das Aufteilen des gesamten Codes in kleinere Codeteile, die eine bestimmte Funktionalität testen.





Der Code ist so strukturiert, dass der „Datensatz“ vom eigentlichen „Testfall“ getrennt wird, der die Funktionalität der Webanwendung testet. Es kann auch so strukturiert sein, dass die Testfälle, die ausgeführt werden müssen, von einer externen Anwendung (wie einer CSV) aufgerufen (aufgerufen) werden.

Es gibt eine Reihe von Frameworks, aber 3 häufig verwendete Selen-Frameworks sind:



Diese Frameworks werden in diesem Blog mit einer Demo besprochen. Bevor ich jedoch fortfahre, möchte ich Ihnen erklären, warum ein Selenium-Framework vorhanden sein muss und welche Vorteile sich aus der Verwendung ergeben.

Warum brauchen wir ein Selen-Framework?

Ohne ein Framework wird es einen Testfall geben, der die gesamte Testfunktionalität umfasst. Der beängstigende Teil ist, dass dieser einzelne Testfall bis zu einer Million Codezeilen umfassen kann. Es ist also ziemlich offensichtlich, dass ein so großer Testfall schwer zu lesen sein wird. Selbst wenn Sie später Funktionen ändern möchten, fällt es Ihnen schwer, den Code zu ändern.

Da die Implementierung eines Frameworks zu kleineren, aber mehreren Codeteilen führt, gibt es verschiedene Vorteile.



Vorteile des Selengerüsts

  • Erhöhte Wiederverwendung von Code
  • Verbesserte Lesbarkeit des Codes
  • Höhere Portabilität
  • Reduziertes SkriptInstandhaltung

Nachdem Sie nun die Grundlagen von Frameworks kennen, lassen Sie mich diese detailliert erläutern.

Datengesteuertes Framework

Ein datengesteuertes Framework in Selen ist die Technik zum Trennen des „Datensatzes“ vom tatsächlichen „Testfall“ (Code). Dieses Framework hängt vollständig von den eingegebenen Testdaten ab. Die Testdaten werden aus externen Quellen wie einer Excel-Datei, einer CSV-Datei oder einer beliebigen Datenbank gespeist.

datengetriebenes Framework - Selen Framework - Edureka

Da der Testfall vom Datensatz getrennt ist, können wir den Testfall einer bestimmten Funktionalität problemlos ändern, ohne umfassende Änderungen an Ihrem Code vorzunehmen. Wenn Sie beispielsweise den Code für die Anmeldefunktion ändern möchten, können Sie genau das ändern, anstatt auch andere abhängige Teile im selben Code ändern zu müssen.

Außerdem können Sie leicht steuern, wie viele Daten getestet werden müssen. Sie können die Anzahl der Testparameter einfach erhöhen, indem Sie der Excel-Datei (oder anderen Quellen) weitere Felder für Benutzername und Kennwort hinzufügen.

wie viele reservierte Wörter in Java

Wenn ich beispielsweise die Anmeldung auf einer Webseite überprüfen muss, kann ich die Anmeldeinformationen für Benutzername und Kennwort in einer Excel-Datei aufbewahren und die Anmeldeinformationen an den Code übergeben, um die Automatisierung im Browser in einer separaten Java-Klassendatei durchzuführen.

Verwenden von Apache POI mit Selenium WebDriver

WebDriver unterstützt das Lesen von Excel-Dateien nicht direkt. Daher verwenden wir Apache POI zum Lesen / Schreiben in ein Microsoft Office-Dokument. Sie können Apache POI (Satz von JAR-Dateien) von herunterladen Hier . Laden Sie die Zip- oder TAR-Datei gemäß Ihren Anforderungen herunter und platzieren Sie sie zusammen mit den Selenium-JARs.

Die Koordination zwischen Hauptcode und Datensatz wird von übernommen TestNG-Datenanbieter, Dies ist eine Bibliothek, die Teil der Apache POI JAR-Dateien ist. Zu Demozwecken habe ich eine Excel-Datei mit dem Namen 'LoginCredentials' erstellt, in der die Benutzernamen und Kennwörter in verschiedenen Spalten gespeichert wurden.

Schauen Sie sich den folgenden Code an, um den Testfall zu verstehen. Es ist ein einfacher Code zum Testen der Anmeldefunktion einer Flugbuchungsanwendung.

Paket DataDriven importieren org.openqa.selenium.By importieren org.openqa.selenium.chrome.ChromeDriver importieren org.testng.Assert importieren org.testng.annotations.AfterMethod importieren org.testng.annotations.DataProvider importieren org.testng.annotations.Test public class DDTExcel {ChromeDriver-Treiber @Test (dataProvider = 'testdata') public void DemoProject (String-Benutzername, String-Passwort) löst InterruptedException aus {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = neues ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (Benutzername) driver.findElement (By.name ('password') )). sendKeys (Passwort) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). match ('Find a Flight: Mercury Tours: '),' Ungültige Anmeldeinformationen ') System.out.println (' Anmeldung erfolgreich ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rows = config.getRowCount (0) Objekt [] [] credentials = neues Objekt [Zeilen] [2] für (int i = 0i

Wenn Sie von oben bemerkt haben, haben wir eine Methode namens 'TestDataFeed ()'. Bei dieser Methode habe ich eine Objektinstanz einer anderen Klasse mit dem Namen 'ReadExcelFile' erstellt. Während ich dieses Objekt instanziiere, habe ich den Pfad meiner Excel-Datei mit den Daten eingegeben. Ich habe weiter eine for-Schleife definiert, um den Text aus der Excel-Arbeitsmappe abzurufen.

Zum Lesen der Daten aus einer bestimmten Blattnummer, Spaltennummer und Zeilennummer werden jedoch die Klassen 'ReadExcelFile' aufgerufen. Der Code meiner 'ReadExcelFile' ist unten.

Paket DataDriven importieren java.io.File importieren java.io.FileInputStream importieren org.apache.poi.xssf.usermodel.XSSFSheet importieren org.apache.poi.xssf.usermodel.XSSFWorkbook öffentliche Klasse ReadExcelFile {XSSFWorkbook wb XSSFSheet sheet public ReadExcelFile (String excelPath) {try {Datei src = neue Datei (excelPath) FileInputStream fis = neuer FileInputStream (src) wb = neues XSSFWorkbook (fis)} catch (Ausnahme e) {System.out.println (e.getMessage ())}} public Zeichenfolge getData (int Blattnummer, int Zeile, int Spalte) {sheet = wb.getSheetAt (Blattnummer) Zeichenfolge data = sheet.getRow (Zeile) .getCell (Spalte) .getStringCellValue () Rückgabedaten} public int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}

Beachten Sie zuerst die Bibliotheken, die ich importiert habe. Ich habe importiert Apache POI XSSF Bibliotheken, die zum Lesen / Schreiben von Daten verwendet werden, um Dateien zu übertreffen. Hier habe ich einen Konstruktor (Objekt derselben Methode) erstellt, um die Werte zu übergeben: Blattnummer, Zeilennummer und Spaltennummer. Um dieses Framework besser zu verstehen, bitte ich Sie, das folgende Video durchzugehen, in dem ich dies strukturiert erklärt habe.

Datengesteuertes Framework in Selenium WebDriver | Selen Tutorial

Fahren wir nun mit dem Framework fort, d. H. Dem Keyword-gesteuerten Framework.

Keyword-gesteuertes Framework

Das schlüsselwortgesteuerte Framework ist eine Technik, bei der alle auszuführenden Operationen und Anweisungen getrennt vom eigentlichen Testfall geschrieben werden. Die Ähnlichkeit mit dem datengesteuerten Framework besteht darin, dass die auszuführenden Vorgänge erneut in einer externen Datei wie einer Excel-Tabelle gespeichert werden.

wie man Klassenpfad unter Linux setzt

Die Operationen, über die ich spreche, sind nichts anderes als die Methoden, die als Teil eines Testfalls ausgeführt werden müssen. Der Vorteil des Keyword-gesteuerten Frameworks besteht darin, dass Sie die zu testenden Funktionen einfach steuern können. Sie können die Methoden, die die Funktionalität der Anwendung testen, in der Excel-Datei angeben. Daher werden nur die Methodennamen getestet, die im Excel angegeben sind.

Zum Anmelden bei der Webanwendung können wir beispielsweise mehrere Methoden in den Haupttestfall schreiben, in denen jeder Testfall bestimmte Funktionen testet. Zum Instanziieren des Browsertreibers kann es eine Methode geben, zum Auffinden der Felder für Benutzername und Kennwort Methoden, zum Navigieren zu einer Webseite eine andere Methode usw.

Schauen Sie sich den folgenden Code an, um zu verstehen, wie das Framework aussieht. Die Zeilen, die im folgenden Code auskommentiert sind, dienen als Erklärung, wenn Sie nicht verstehen.

Paket KeywordDriven Import org.openqa.selenium.chrome.ChromeDriver Import org.testng.Assert Import org.testng.annotations.Test Import java.util.concurrent.TimeUnit Import org.openqa.selenium.By Import org.openqa.selenium.WebDriver public class Actions {öffentlicher statischer WebDriver-Treiber public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigieren () {Treiber .manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name (') userName ')). sendKeys (' mercury ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (By.name ('login')). ​​Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Flug suchen: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

Wie Sie sehen können, sind die verschiedenen Funktionen, die getestet werden müssen, in separaten Methoden vorhanden, die darauf warten, aufgerufen zu werden. Diese Methoden werden nun von einer anderen Klasse aufgerufen, basierend auf dem Vorhandensein des Methodennamens in der Excel-Datei. Um die Excel-Datei zu lesen und die Ergebnisse zurückzusenden, habe ich eine weitere Klasse geschrieben. Beide werden unten angezeigt.

Dies ist die Klassendatei, die die Methoden aufruft.

abstrakte Klassen- und Schnittstellenunterschiede
Paket KeywordDriven öffentliche Klasse DriverScript {public static void main (String [] args) löst eine Ausnahme aus {// Deklarieren des Pfads der Excel-Datei mit dem Namen der Excel-Datei String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Hier Wir übergeben den Excel-Pfad und SheetName als Argumente für die Verbindung mit der Excel-Datei ReadExcelData.setExcelFile (sPath, 'Sheet1') // Derzeit werden hartcodierte Werte für Excel-Zeilen und -Spalten verwendet. // Für Excel-Zeilen und -Spalten werden hartcodierte Werte verwendet. Spalten für jetzt // In späteren Kapiteln werden wir diese fest codierten Werte durch varibales ersetzen // Dies ist die Schleife zum zeilenweisen Lesen der Werte der Spalte 3 (Aktionsschlüsselwort) für (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

Und die Klassendatei, die die Excel-Werte liest, ist diese.

Paket KeywordDriven importieren java.io.FileInputStream importieren org.apache.poi.xssf.usermodel.XSSFSheet importieren org.apache.poi.xssf.usermodel.XSSFWorkbook importieren org.apache.poi.xssf.usermodel.XSSFCell öffentliche Klasse ReadExcelData {private static XSSFSheet ExcelWSheet private statische XSSFWorkbook ExcelWBook private statische XSSFCell-Zelle // Mit dieser Methode wird der Dateipfad festgelegt und die Excel-Datei geöffnet. // Excel-Pfad und SheetName als Argumente an diese Methode übergeben. Public static void setExcelFile (String Path, String SheetName) löst aus Ausnahme {FileInputStream ExcelFile = new FileInputStream (Pfad) ExcelWBook = neues XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Diese Methode dient zum Lesen der Testdaten aus der Excel-Zelle // In dieser übergeben wir Parameter / Argumente as Row Num und Col Num public static String getCellData (int RowNum, int ColNum) löst eine Ausnahme aus {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () gibt CellData zurück}}

Kommen wir nun zum letzten Teil dieses Selenium-Framework-Blogs, in dem ich Ihnen zeigen werde, wie Sie ein Hybrid-Framework erstellen.

Hybrid-Framework

Das Hybrid-Framework ist eine Technik, mit der wir sowohl datengesteuerte als auch schlüsselwortgesteuerte Selen-Frameworks optimal nutzen können. Anhand der oben in diesem Blog gezeigten Beispiele können wir ein Hybrid-Framework erstellen, indem wir die auszuführenden Methoden in einer Excel-Datei speichern (schlüsselwortgesteuerter Ansatz) und diese Methodennamen an die übergeben Java-Reflexionsklasse (datengetriebener Ansatz) anstatt eine zu erstellen Ansonsten Schleife in der Klasse 'DriverScript'.

Schauen Sie sich die modifizierte 'DriverScript' -Klasse im folgenden Codeausschnitt an.Anstatt mehrere If / Else-Schleifen zu verwenden, wird hier ein datengesteuerter Ansatz verwendet, um die Methodennamen aus der Excel-Datei zu lesen.

Paket HybridFramework import java.lang.reflect.Method öffentliche Klasse DriverScriptJava {// Dies ist ein Klassenobjekt, das als 'public static' deklariert ist. // Damit es außerhalb des Bereichs der öffentlichen statischen Aktion main [] verwendet werden kann. actionctionsKeywords public static String sActions // Dies ist ein Reflexionsklassenobjekt, das als 'public static' deklariert ist. // Damit es außerhalb des Bereichs der main [] -Methode verwendet werden kann. Public static method method [] public static void main (String [] args) löst eine Ausnahme aus {// Deklarieren des Pfads der Excel-Datei mit dem Namen der Excel-Datei String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Hier übergeben wir den Excel-Pfad und SheetName, um eine Verbindung mit der Excel-Datei herzustellen // Diese Methode wurde zuvor erstellt ReadExcelData.setExcelFile (sPath, 'Sheet1') // Fest codierte Werte werden derzeit für Excel-Zeilen und -Spalten verwendet // Später werden wir diese fest codierten Werte viel effizienter verwenden // Dies ist die Schleife zum Lesen die Werte der Spaltenzeile (Aktionsschlüsselwort) by row // Dies bedeutet, dass diese Schleife alle Schritte ausführt, die für den Testfall im Blatt Test Steps for (int iRow = 1iRow) erwähnt wurden<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

Um dieses Konzept von datengesteuerten, schlüsselwortgesteuerten und hybriden gesteuerten Frameworks besser zu verstehen, bitte ich Sie, das folgende Video anzusehen.

Selenium Framework mit Java | Selen Tutorial | Selen Training Online

Ich hoffe, dieser Blog hat Ihnen geholfen und Ihnen ein klares Verständnis dafür gegeben, was ein Selenium-Framework ist, wie es nützlich ist und wie Sie Ihre Codestruktur mit diesen 3 Selenium-Frameworks erstellen können. Weitere Blogs in dieser Reihe finden Sie hier.

Wenn Sie Selen lernen und eine Karriere im Testbereich aufbauen möchten, schauen Sie sich unser interaktives Live-Online an Hier finden Sie rund um die Uhr Unterstützung, die Sie während Ihrer gesamten Lernphase begleitet. Die Konzepte im Zusammenhang mit „Selenium Framework“ werden in Edurekas Kurs ausführlich behandelt.

Hast du eine Frage an uns? Bitte erwähnen Sie es in den Kommentaren und wir werden uns bei Ihnen melden.