Selenium Framework: Daten-, Schlüsselwort- und Hybrid-gesteuert

Was ist Selenium Framework?

Der Selenium-Automatisierungs-Framework ist eine Codestruktur, die die Codepflege einfach und effizient macht. Ohne Frameworks können Benutzer den „Code“ und die „Daten“ am selben Ort platzieren, der weder wiederverwendbar noch lesbar ist. Frameworks führen zu vorteilhaften Ergebnissen wie erhöhter Wiederverwendbarkeit des Codes, höherer Portabilität, geringeren Kosten für die Skriptwartung, besserer Codelesbarkeit usw.

Arten von Selenium Framework

Es sind hauptsächlich drei Art der Frameworks erstellt von Selenium WebDriver zur Automatisierung manueller Testfälle

  • Datengesteuertes Framework
  • Schlüsselwortgesteuertes Framework
  • Hybridgesteuertes Framework

Arten von Selenium Framework

Datengesteuertes Framework in Selenium

Datengesteuertes Framework in Selenium ist eine Methode zum Trennen von Datensätzen vom Testfall. Sobald die Datensätze vom Testfall getrennt sind, können sie problemlos für eine bestimmte Funktionalität geändert werden, ohne den Code zu ändern. Es wird verwendet, um Testfälle und Suiten aus externen Dateien wie abzurufen Excel, .csv, .xml oder einige Datenbanktabellen.

Datengesteuertes Framework in Selenium

Zum Lesen oder Schreiben einer Excel-Datei stellt Apache eine sehr bekannte POI-Bibliothek zur Verfügung. Diese Bibliothek ist in der Lage, beides zu lesen und zu schreiben XLS und XLSX Dateiformat von Excel.

Lesen XLS Dateien, ein HSSF Die Implementierung wird von der POI-Bibliothek bereitgestellt.

Lesen XLSX, XSSF Implementierung von POI Bibliothek wird die Wahl sein. Lassen Sie uns diese Implementierungen im Detail untersuchen.

Über Data Driven Testing haben wir bereits in unserem gelernt vorheriges Tutorial

Keyword-gesteuertes Framework in Selen

Keyword-gesteuertes Framework in Selen ist eine Methode zur Beschleunigung automatisierter Tests durch die Trennung von Schlüsselwörtern für gemeinsame Funktionen und Anweisungen. Alle auszuführenden Vorgänge und Anweisungen werden in eine externe Datei wie eine Excel-Tabelle geschrieben. Benutzer können die Funktionalitäten, die sie testen möchten, einfach steuern und festlegen.

So sieht das komplette Framework aus

Keyword-gesteuertes Framework in Selen

Wie Sie sehen, handelt es sich um ein 5-Schritte-Framework. Lass es uns Schritt für Schritt studierenwise im Detail

Schritt 1)

  • Das Treiberskript Execute.java ruft ReadGuru99ExcelFile.java auf
  • ReadGuru99ExcelFile.java verfügt über ein POI-Skript zum Lesen von Daten aus Excel

Schritt 2)

  • ReadGuru99ExcelFile.java liest Daten aus TestCase.xlsx
  • So sieht das Blatt aus:

Keyword-gesteuertes Framework in Selen

  • Gemäß 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. Dementsprechend verfügt unser Excel über das Schlüsselwort „Klick“. Jetzt kann die AUT Hunderte von Schaltflächen auf einer Seite haben. Um eine Anmeldeschaltfläche zu identifizieren, geben wir in Excel den Objektnamen als loginButton und den Objekttyp als Namen ein (siehe hervorgehobene Zeile im Bild oben). Der Objekttyp kann XPath, Namens-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 (wie XPath, Name, CSS-Pfad, Klassenname usw.) platzieren.

Keyword-gesteuertes Framework in Selen

  • Execute.java (unser Treiberskript) liest das gesamte Objekt-Repository und speichert es in einer Variablen
  • Um dieses Objekt-Repository zu lesen, benötigen wir eine ReadObject-Klasse, die über eine getObjectRepository-Methode zum Lesen verfügt.
  • Keyword-gesteuertes Framework in Selen

Anmerkungen: Sie fragen sich vielleicht, warum wir ein Objekt-Repository erstellen müssen. Die Antwort hilft bei der Codepflege. Beispielsweise verwenden wir die Schaltfläche mit dem Namen = btnlogin in 10 verschiedenen Testfällen. Zukünftig beschließt der Entwickler, den Namen von „btnlogin“ in „submit“ zu ändern. Sie müssen in allen 10 Testfällen eine Änderung vornehmen. Im Falle eines Objekt-Repositorys nehmen Sie die Änderung nur einmal im Repository vor.

Schritt 5)

  • Der Treiber übergibt die Daten vom Excel- und Objekt-Repository an die UIOperation-Klasse
  • Die UIOperation-Klasse verfügt über Funktionen zum Ausführen von Aktionen, die den im Excel genannten Schlüsselwörtern wie CLICK, SETTEXT usw. entsprechen
  • Die UIOperation-Klasse ist eine Javac Klasse, die die tatsächliche Implementierung des Codes zum Ausführen von Operationen an Webelementen enthält

Keyword-gesteuertes Framework in Selen

Das komplette Projekt wird so aussehen:

Keyword-gesteuertes Framework in Selen

Schauen wir uns ein Beispiel an:

Testszenario: Wir führen 2 Testfälle durch

Objekteigenschaften

url=http://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

ReadGuru99ExcelFile.java

package 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;
public class ReadGuru99ExcelFile {
    
    public Sheet readExcel(String filePath,String fileName,String sheetName) throws IOException{
    //Create a object of File class to open xlsx file
    File file =    new File(filePath+"\\"+fileName);
    //Create an object of FileInputStream class to read excel file
    FileInputStream inputStream = new FileInputStream(file);
    Workbook guru99Workbook = null;
    //Find the file extension by spliting file name in substing and getting only extension name
    String fileExtensionName = fileName.substring(fileName.indexOf("."));
    //Check condition if the file is xlsx file
    if(fileExtensionName.equals(".xlsx")){
    //If it is xlsx file then create object of XSSFWorkbook class
    guru99Workbook = new XSSFWorkbook(inputStream);
    }
    //Check condition if the file is xls file
    else if(fileExtensionName.equals(".xls")){
        //If it is xls file then create object of XSSFWorkbook class
        guru99Workbook = new HSSFWorkbook(inputStream);
    }
    //Read sheet inside the workbook by its name
    Sheet guru99Sheet = guru99Workbook.getSheet(sheetName);
     return guru99Sheet;    
    }
}

ReadObject.java

package operation;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ReadObject {
    Properties p = new Properties();
    public Properties getObjectRepository() throws IOException{
        //Read object repository file
        InputStream stream = new FileInputStream(new File(System.getProperty("user.dir")+"\\src\\objects\\object.properties"));
        //load all objects
        p.load(stream);
         return p;
    }
    
}

UIOperation.java

package operation;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class UIOperation {
    WebDriver driver;
    public UIOperation(WebDriver driver){
        this.driver = driver;
    }
    public void perform(Properties p,String operation,String objectName,String objectType,String value) throws Exception{
        System.out.println("");
        switch (operation.toUpperCase()) {
        case "CLICK":
            //Perform click
            driver.findElement(this.getObject(p,objectName,objectType)).click();
            break;
        case "SETTEXT":
            //Set text on control
            driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value);
            break;
            
        case "GOTOURL":
            //Get url of application
            driver.get(p.getProperty(value));
            break;
        case "GETTEXT":
            //Get text of an element
            driver.findElement(this.getObject(p,objectName,objectType)).getText();
            break;
        default:
            break;
        }
    }
    
    /**
     * Find element BY using object type and value
     * @param p
     * @param objectName
     * @param objectType
     * @return
     * @throws Exception
     */
    private By getObject(Properties p,String objectName,String objectType) throws Exception{
        //Find by xpath
        if(objectType.equalsIgnoreCase("XPATH")){
            
            return By.xpath(p.getProperty(objectName));
        }
        //find by class
        else if(objectType.equalsIgnoreCase("CLASSNAME")){
            
            return By.className(p.getProperty(objectName));
            
        }
        //find by name
        else if(objectType.equalsIgnoreCase("NAME")){
            
            return By.name(p.getProperty(objectName));
            
        }
        //Find by css
        else if(objectType.equalsIgnoreCase("CSS")){
            
            return By.cssSelector(p.getProperty(objectName));
            
        }
        //find by link
        else if(objectType.equalsIgnoreCase("LINK")){
            
            return By.linkText(p.getProperty(objectName));
            
        }
        //find by partial link
        else if(objectType.equalsIgnoreCase("PARTIALLINK")){
            
            return By.partialLinkText(p.getProperty(objectName));
            
        }else
        {
            throw new Exception("Wrong object type");
        }
    }
}

ExecuteTest.java

package 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;
public class ExecuteTest {
@Test
    public void testLogin() throws Exception {
        // TODO Auto-generated method stub
WebDriver webdriver = new FirefoxDriver();
ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    //Create a loop over all the rows of excel file to read it
    for (int i = 1; i < rowCount+1; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i);
        //Check if the first cell contain a value, if yes, That means it is the new testcase name
        if(row.getCell(0).toString().length()==0){
        //Print testcase detail on console
            System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+
            row.getCell(3).toString()+"----"+ row.getCell(4).toString());
        //Call perform function to perform operation on UI
            operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                row.getCell(3).toString(), row.getCell(4).toString());
     }
        else{
            //Print the new testcase name when it started
                System.out.println("New Testcase->"+row.getCell(0).toString() +" Started");
            }
        }
    }
}

Nach der Ausführung sieht die Ausgabe so aus:

Keyword-gesteuertes Framework in Selen

Laden Sie die Selenium-Projektdateien für die Demo in diesem Tutorial herunter

Hybridgesteuertes Framework

Hybridgesteuertes Framework Bei Selenium handelt es sich um ein Konzept, bei dem wir die Vorteile sowohl des schlüsselwortgesteuerten Frameworks als auch des datengesteuerten Frameworks nutzen. Es handelt sich um ein benutzerfreundliches Framework, das es manuellen Testern ermöglicht, Testfälle zu erstellen, indem sie sich einfach die Schlüsselwörter, Testdaten und das Objekt-Repository ansehen, ohne im Framework programmieren zu müssen.

Für Schlüsselwörter verwenden wir hier Excel-Dateien, um Testfälle zu verwalten, und für Testdaten können wir Daten, Anbieter von verwenden Testng Rahmen.

Hybridgesteuertes Framework

Hier in unserem Hybrid-Framework müssen wir nichts am schlüsselwortgesteuerten Framework ändern, hier müssen wir lediglich die Datei ExecuteTest.java durch die Datei HybridExecuteTest.java ersetzen.

Hybridgesteuertes Framework

Diese HybridExecuteTest-Datei enthält den gesamten Code für Schlüsselwörter, die mit dem Datenanbieterkonzept gesteuert werden.

Die vollständige bildliche Darstellung des Hybridrahmens wird so aussehen

Hybridgesteuertes Framework

HybridExecuteTest.java

package 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;
public class HybridExecuteTest {
    WebDriver webdriver = null;
@Test(dataProvider="hybridData")
    public void testLogin(String testcaseName,String keyword,String objectName,String objectType,String value) throws Exception {
        // TODO Auto-generated method stub
      
    if(testcaseName!=null&&testcaseName.length()!=0){
    webdriver=new FirefoxDriver();
    }
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
    //Call perform function to perform operation on UI
            operation.perform(allObjects, keyword, objectName,
                objectType, value);
    
    }
@DataProvider(name="hybridData")
    public Object[][] getDataFromDataprovider() throws IOException{
    Object[][] object = null;
    ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    object = new Object[rowCount][5];
    for (int i = 0; i < rowCount; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i+1);
        //Create a loop to print cell values in a row
        for (int j = 0; j < row.getLastCellNum(); j++) {
            //Print excel data in console
            object[i][j] = row.getCell(j).toString();
        }
    }
    System.out.println("");
     return object;    
    }
}

Zusammenfassung

  • Mit Selenium WebDriver können wir drei Arten von Testframeworks erstellen.
  • Ein Selenium-Automatisierungsframework, das in datengesteuerte, schlüsselwortgesteuerte und hybride Frameworks klassifiziert werden kann.
  • Mit dem Datenanbieter von TestNG können wir ein datengesteuertes Framework erreichen.
  • Im schlüsselwortgesteuerten Framework werden Schlüsselwörter in einige externe Dateien wie eine Excel-Datei geschrieben, und Java-Code ruft diese Datei auf und führt Testfälle aus.
  • Das Hybrid-Framework ist eine Mischung aus schlüsselwortgesteuertem und datengesteuertem Framework.

Laden Sie die Selenium-Projektdateien für die Demo in diesem Tutorial herunter