Selenium Kader: Data, Keyword & Hybride Driven

Wat is Selenium Kader?

Uw partner voor Selenium automatiseringskader is een codestructuur die codeonderhoud 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 een grotere herbruikbaarheid van code, hogere draagbaarheid, lagere kosten voor scriptonderhoud, betere leesbaarheid van code, etc.

Types van Selenium Kader

Er zijn voornamelijk drie soort raamwerken gemaakt door Selenium WebDriver om handmatige testgevallen te automatiseren

  • Datagedreven raamwerk
  • Zoekwoordgestuurd raamwerk
  • Hybride gedreven raamwerk

Types van Selenium Kader

Datagedreven raamwerk in Selenium

Datagedreven raamwerk in Selenium is een methode om datasets van de testcase te scheiden. Zodra de datasets van de testcase zijn gescheiden, kan 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 sommige databasetabellen.

Datagedreven raamwerk in Selenium

Om Excel te lezen of te schrijven, biedt Apache een zeer bekende bibliotheek-POI. Deze bibliotheek is capabel genoeg om beide te lezen en te schrijven XLS en XLSX bestandsformaat van Excel.

Lezen XLS bestanden, een HSSF implementatie wordt verzorgd door de POI-bibliotheek.

Lezen XLSX, XSSF invoer van THEN bibliotheek zal de keuze zijn. Laten we deze implementaties in detail bestuderen.

We leerden al over Data Driven Testing in onze vorige zelfstudie

Zoekwoordgestuurd raamwerk in Selenium

Zoekwoordgestuurd raamwerk in Selenium is een methode die wordt gebruikt om geautomatiseerd testen te versnellen door trefwoorden te scheiden voor een gemeenschappelijke set functies en instructies. Alle uit te voeren bewerkingen en instructies worden geschreven in een extern bestand, zoals een Excel-sheet. Gebruikers kunnen eenvoudig de functionaliteiten die ze willen testen, beheren en specificeren.

Hier ziet u hoe het volledige raamwerk eruit ziet

Zoekwoordgestuurd raamwerk in Selenium

Zoals u kunt zien is het een 5-stappen-framework. Laten we het stapsgewijs in detail bestuderen

Stap 1)

  • Het stuurprogrammascript Execute.java roept ReadGuru99ExcelFile.java aan
  • ReadGuru99ExcelFile.java heeft een POI-script om gegevens uit Excel te lezen

Stap 2)

  • ReadGuru99ExcelFile.java leest gegevens van TestCase.xlsx
  • Zo ziet het blad eruit:

Zoekwoordgestuurd raamwerk in Selenium

  • Op basis van de trefwoorden die in het Excel-bestand zijn geschreven, voert het framework de bewerking uit op de gebruikersinterface.
  • We moeten bijvoorbeeld op de knop 'Inloggen' klikken. Dienovereenkomstig zal onze Excel het trefwoord 'Klik' hebben. Nu kan de AUT honderden knoppen op een pagina hebben om een ​​login-knop te identificeren. In Excel zullen we de objectnaam invoeren als loginButton en het objecttype als een naam (zie de gemarkeerde rij in de bovenstaande afbeelding). Het objecttype kan Xpath, CSS-naam of een andere waarde zijn

Stap 3) ReadGuru99ExcelFile.java zal deze gegevens doorgeven aan het driverscript Execute.java

Stap 4)

  • Voor al onze UI-webelementen moeten we een objectrepository maken waar we hun elementlocator (zoals Xpath, naam, CSS-pad, klassenaam enz.)

Zoekwoordgestuurd raamwerk in Selenium

  • Execute.java (ons driverscript) 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.
  • Zoekwoordgestuurd raamwerk in Selenium

NOTITIE: Je denkt misschien waarom we een objectrepository moeten maken. Het antwoord helpt bij het onderhoud van de code. We gebruiken bijvoorbeeld de knop met naam = btnlogin in 10 verschillende testgevallen. In de toekomst besluit de ontwikkelaar de naam te veranderen van btnlogin naar submission. U zult in alle 10 testgevallen een wijziging moeten aanbrengen. Bij een objectrepository voert u de wijziging slechts één keer door in de repository.

Stap 5)

  • Het stuurprogramma geeft de gegevens van Excel & Object Repository door aan de gebruikersinterfaceOperaklasse
  • UIOperaDe klasse heeft functies om acties uit te voeren die overeenkomen met trefwoorden zoals CLICK, SETTEXT enz... vermeld in Excel
  • UIOperaDe klasse is a Java klasse die de daadwerkelijke implementatie van de code bevat om bewerkingen op webelementen uit te voeren

Zoekwoordgestuurd raamwerk in Selenium

Het volledige project zal er zo uitzien:

Zoekwoordgestuurd raamwerk in Selenium

Laten we een voorbeeld bekijken:

Testscenario: Wij voeren 2 testgevallen uit

object.eigenschappen

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

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

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

UIOperatie.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");
        }
    }
}

VoerTest.java uit

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

Na uitvoering ziet de uitvoer er als volgt uit:

Zoekwoordgestuurd raamwerk in Selenium

Download de Selenium Projectbestanden voor de demo in deze zelfstudie

Hybride gedreven raamwerk

Hybride gedreven raamwerk in Selenium is een concept waarbij we de voordelen van zowel een trefwoordgestuurd raamwerk als een datagestuurd raamwerk gebruiken. Het is een eenvoudig te gebruiken raamwerk waarmee handmatige testers testgevallen kunnen maken door alleen maar naar de trefwoorden, testgegevens en objectrepository te kijken zonder codering in het raamwerk.

Hier gebruiken we voor trefwoorden Excel-bestanden om testgevallen bij te houden, en voor testgegevens kunnen we data, provider of gebruiken Testen kader.

Hybride gedreven raamwerk

Hier in ons hybride raamwerk hoeven we niets te veranderen in het trefwoordgestuurde raamwerk, hier hoeven we alleen het bestand ExecuteTest.java te vervangen door het bestand HybridExecuteTest.java.

Hybride gedreven raamwerk

Dit HybridExecuteTest-bestand bevat alle code voor trefwoordgestuurd met het dataproviderconcept.

De volledige picturale weergave van het hybride raamwerk zal er zo uitzien

Hybride gedreven raamwerk

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

Samenvatting

  • We kunnen drie soorten testframeworks maken met behulp van: Selenium Webstuurprogramma.
  • A Selenium automatiseringsframework dat kan worden geclassificeerd in Data Driven, Keyword Driven en Hybrid Frameworks.
  • We kunnen een datagedreven raamwerk realiseren met behulp van TestNG's dataprovider.
  • In een trefwoordgestuurd raamwerk worden trefwoorden geschreven in sommige externe bestanden, zoals een Excel-bestand, en java-code zal dit bestand aanroepen en testgevallen uitvoeren.
  • Het hybride raamwerk is een mix van trefwoordgedreven en datagedreven raamwerk.

Download de Selenium Projectbestanden voor de demo in deze zelfstudie