Selenium Rammeverk: Data, nøkkelord og hybriddrevet

Hva er Selenium Rammeverk?

Ocuco Selenium automatiseringsrammeverk er en kodestruktur som gjør kodevedlikehold enkelt og effektivt. Uten rammer kan brukere plassere "koden" og "dataene" på samme sted som verken er gjenbrukbare eller lesbare. Rammer gir gunstige resultater som økt kodegjenbrukbarhet, høyere portabilitet, reduserte kostnader for skriptvedlikehold, bedre kodelesbarhet, etc.

Typer av Selenium Rammeverk

Det er hovedsakelig tre type rammer laget av Selenium WebDriver for å automatisere manuelle testtilfeller

  • Datadrevet rammeverk
  • Søkeorddrevet rammeverk
  • Hybriddrevet rammeverk

Typer av Selenium Rammeverk

Datadrevet rammeverk i Selenium

Datadrevet rammeverk i Selenium er en metode for å skille datasett fra testtilfellet. Når datasettene er skilt fra testsaken, kan de enkelt modifiseres for en spesifikk funksjonalitet uten å endre koden. Den brukes til å hente testsaker og suiter fra eksterne filer som Excel, .csv, .xml eller noen databasetabeller.

Datadrevet rammeverk i Selenium

For å lese eller skrive en Excel, gir Apache et veldig kjent bibliotek POI. Dette biblioteket er i stand til å lese og skrive begge deler XLS og XLSX filformatet til Excel.

Å lese XLS filer, en HSSF implementering leveres av POI-biblioteket.

Å lese XLSX, XSSF Implementering av POI bibliotek vil være valget. La oss studere disse implementeringene i detalj.

Vi har allerede lært om datadrevet testing i vår tidligere opplæring

Søkeorddrevet rammeverk i Selenium

Søkeorddrevet rammeverk i Selenium er en metode som brukes for å øke hastigheten på automatisert testing ved å skille nøkkelord for felles sett med funksjoner og instruksjoner. Alle operasjoner og instruksjoner som skal utføres er skrevet i en ekstern fil som et Excel-ark. Brukere kan enkelt kontrollere og spesifisere funksjonaliteten de ønsker å teste.

Slik ser hele rammeverket ut

Søkeorddrevet rammeverk i Selenium

Som du kan se er det et 5-trinns rammeverk. La oss studere det trinnvis i detalj

Trinn 1)

  • Driverskriptet Execute.java vil kalle ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java har POI-skript for å lese data fra en Excel

Trinn 2)

  • ReadGuru99ExcelFile.java vil lese data fra TestCase.xlsx
  • Slik ser arket ut-

Søkeorddrevet rammeverk i Selenium

  • I henhold til nøkkelordene skrevet i Excel-fil, vil rammeverket utføre operasjonen på brukergrensesnittet.
  • For eksempel må vi klikke på knappen "Logg på". Tilsvarende vil vår Excel ha nøkkelordet "Klikk". Nå kan AUT ha hundrevis av knapper på en side, for å identifisere en påloggingsknapp, i Excel vil vi legge inn objektnavn som påloggingsknapp og objekttype som navn (se uthevet rad i bildet ovenfor). Objekttypen kan være Xpath, navn CSS eller en hvilken som helst annen verdi

Trinn 3) ReadGuru99ExcelFile.java vil sende disse dataene til driverskriptet Execute.java

Trinn 4)

  • For alle våre UI-webelementer må vi opprette et objektlager der vi plasserer elementlokalisatoren deres (som Xpath, navn, CSS-bane, klassenavn osv.)

Søkeorddrevet rammeverk i Selenium

  • Execute.java (vårt driverskript) vil lese hele Object Repository og lagre det i en variabel
  • For å lese dette objektlageret trenger vi en ReadObject-klasse som har en getObjectRepository-metode for å lese den.
  • Søkeorddrevet rammeverk i Selenium

NOTAT: Du tenker kanskje hvorfor vi trenger å lage et objektlager. Svaret hjelper med kodevedlikehold. For eksempel bruker vi knappen med navn = btnlogin i 10 forskjellige testtilfeller. I fremtiden bestemmer utvikleren seg for å endre navnet fra btnlogin for å sende inn. Du må gjøre en endring i alle de 10 testtilfellene. Når det gjelder et objektlager, vil du gjøre endringen bare én gang i depotet.

Trinn 5)

  • Driveren sender dataene fra Excel & Object Repository til UIOperasjonsklassen
  • UIOperasjonsklassen har funksjoner for å utføre handlinger som tilsvarer nøkkelord som CLICK, SETTEXT osv... nevnt i excel
  • UIOperasjonsklassen er en Java klasse som har selve implementeringen av koden for å utføre operasjoner på webelementer

Søkeorddrevet rammeverk i Selenium

Det komplette prosjektet vil se slik ut

Søkeorddrevet rammeverk i Selenium

La oss se på et eksempel:

Testscenario: Vi utfører 2 testcases

objekt.egenskaper

url=https://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");
            }
        }
    }
}

Etter utførelse vil utdata se slik ut -

Søkeorddrevet rammeverk i Selenium

Last ned Selenium Prosjektfiler for demoen i denne opplæringen

Hybriddrevet rammeverk

Hybriddrevet rammeverk in Selenium er et konsept hvor vi bruker fordelen med både nøkkelorddrevet rammeverk så vel som datadrevet rammeverk. Det er et brukervennlig rammeverk som lar manuelle testere lage testcases ved å bare se på nøkkelord, testdata og objektlager uten å kode i rammeverket.

Her for nøkkelord vil vi bruke Excel-filer for å vedlikeholde testcaser, og for testdata kan vi bruke data, leverandør av Testng rammeverk.

Hybriddrevet rammeverk

Her i vårt hybride rammeverk trenger vi ikke å endre noe i nøkkelorddrevet rammeverk, her trenger vi bare å erstatte filen ExecuteTest.java med filen HybridExecuteTest.java.

Hybriddrevet rammeverk

Denne HybridExecuteTest-filen har all koden for nøkkelorddrevet med dataleverandørkonsept.

Den komplette billedrepresentasjonen av hybrid rammeverk vil se ut

Hybriddrevet rammeverk

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;    
    }
}

Sammendrag

  • Vi kan lage tre typer testrammeverk ved hjelp av Selenium WebDriver.
  • A Selenium automatiseringsrammeverk som kan klassifiseres i datadrevne, søkeorddrevne og hybride rammer.
  • Vi kan oppnå datadrevet rammeverk ved hjelp av TestNGsin dataleverandør.
  • I nøkkelorddrevet rammeverk er nøkkelord skrevet i noen eksterne filer som excel-fil og java-kode vil kalle denne filen og utføre testsaker.
  • Hybridrammeverket er en blanding av søkeorddrevet og datadrevet rammeverk.

Last ned Selenium Prosjektfiler for demoen i denne opplæringen