Selenium Kader: Data, Keyword & Hybride Driven

โšก Slimme samenvatting

Selenium Frameworks: Data-, Keyword- en Hybrid-gedreven benaderingen bepalen hoe testers automatiseringscode organiseren, testdata scheiden en logica hergebruiken. Dit artikel legt elk frameworktype uit, de architectuur, de voordelen en hoe je ze stap voor stap kunt implementeren met praktische voorbeelden. Selenium Codevoorbeelden voor WebDriver.

  • โœ… Kerndefinitie: A Selenium Een framework is een gestructureerde code-architectuur die de herbruikbaarheid, overdraagbaarheid en het onderhoud van geautomatiseerde testscripts verbetert.
  • ๐Ÿ“Š Datagestuurde implementatie: Scheid testgegevens van logica met behulp van Excel, CSV of XML, en lees invoer via Apache POI (HSSF voor XLS, XSSF voor XLSX).
  • ๐Ÿ”‘ Ontwerp op basis van trefwoorden: Stuur UI-acties aan via trefwoordbladen en objectrepositories, zodat handmatige testers testgevallen kunnen bouwen zonder zelf code te hoeven schrijven. Java code.
  • โš™๏ธ Hybride optimalisatie: Combineren TestNG Gegevensleveranciers met uitvoering op basis van trefwoorden profiteren van meer flexibiliteit, schaalbaarheid en lagere onderhoudskosten voor scripts.
  • ๐Ÿงฉ Voordelen van een objectrepository: Centraliseer locators in een eigenschappenbestand, zodat elementwijzigingen slechts op รฉรฉn locatie in alle testgevallen hoeven te worden bijgewerkt.

Selenium Kader

Wat is Selenium Kader?

De Selenium automatiseringskader Een framework is een gestructureerde code-architectuur die het onderhoud van tests eenvoudig, schaalbaar en efficiรซnt maakt. Zonder een framework plaatsen testers code en data vaak op dezelfde plek, wat noch herbruikbaar noch leesbaar is. Het gebruik van een framework levert meetbare voordelen op, zoals een hogere herbruikbaarheid van code, betere portabiliteit, lagere kosten voor scriptonderhoud, verbeterde leesbaarheid en een duidelijkere scheiding van verantwoordelijkheden tussen testlogica en invoerdata.

Waarom een Selenium Automatiseringsframework?

Een goed ontworpen Selenium Het framework lost drie hardnekkige problemen in testautomatisering op: code duplicatie, kwetsbare locators en onbeheersbare testdata. Door een duidelijke structuur af te dwingen, kunnen teams hun testsuites schalen van een handvol scripts naar honderden zonder de controle te verliezen.

  • Onderhoudbaarheid: Dankzij gecentraliseerde locators en hulpmethoden wordt met รฉรฉn enkele wijziging elke test die dat element gebruikt, bijgewerkt.
  • Herbruikbaarheid: Algemene handelingen zoals inloggen, navigeren of formulieren invullen worden eenmalig geschreven en vervolgens in veel testgevallen aangeroepen.
  • schaalbaarheid: Het toevoegen van nieuwe testgevallen wordt een data-update in plaats van een programmeertaak, waardoor ook niet-ontwikkelaars scenario's kunnen aandragen.
  • Rapportage en samenwerking: Een gestandaardiseerde structuur maakt integratie met rapportagetools, CI/CD-pipelines en versiebeheer eenvoudiger.

Types van Selenium Kader

Er zijn drie primaire soorten frameworks gebouwd Selenium WebDriver wordt gebruikt om handmatig uitgevoerde testcases te automatiseren. Elke stijl streeft naar een andere balans tussen de inspanning van de ontwikkelaar, de betrokkenheid van de tester en de flexibiliteit van de data.

  • Datagedreven raamwerk
  • Zoekwoordgestuurd raamwerk
  • Hybride gedreven raamwerk

Types van Selenium Kader

In de volgende paragrafen wordt elk raamwerk in detail uitgelegd, beginnend met de eenvoudigste datagestuurde aanpak en doorlopend naar het meest flexibele hybride model.

Datagedreven raamwerk in Selenium

Datagedreven raamwerk in Selenium Het is een methode om testgegevenssets te scheiden van de testlogica. Zodra de gegevens zijn losgekoppeld, kunt u de invoer voor een bepaalde functionaliteit wijzigen zonder de testcode aan te raken. Het wordt vaak gebruikt om testgevallen en testsuites op te halen uit externe bronnen, zoals Excel, .csv, .xml of databasetabellen.

Datagedreven raamwerk in Selenium

Om Excel-bestanden te lezen of te schrijven, biedt Apache de bekende POI-bibliotheek. Deze bibliotheek kan beide soorten bestanden verwerken. XLS en XLSX formaten. De HSSF De implementatie leest oudere XLS-bestanden, terwijl de XSSF De implementatie ondersteunt moderne XLSX-bestanden.

We hebben Data Driven Testing al behandeld in onze vorige zelfstudie.

Zoekwoordgestuurd raamwerk in Selenium

Zoekwoordgestuurd raamwerk in Selenium Dit is een methode die automatisering versnelt door trefwoorden voor veelgebruikte functies en instructies te scheiden. Alle bewerkingen en instructies worden in een extern bestand geschreven, meestal een Excel-spreadsheet. Testers kunnen de functionaliteiten die ze willen valideren specificeren zonder het bestand aan te passen. Java code, waardoor deze stijl ideaal is voor teams waar businessanalisten of handmatige QA-medewerkers testdefinities aandragen.

Zo ziet het complete framework eruit:

Zoekwoordgestuurd raamwerk in Selenium

Zoals je ziet, is het een stappenplan van 5 stappen. Laten we het stap voor stap in detail bekijken.

Stap 1)

  • Het driverscript Execute.java roept Read aan.Guru99ExcelFile.java.
  • LeesGuru99ExcelFile.java bevat POI-code die gegevens uit Excel leest.

Stap 2)

  • LeesGuru99ExcelFile.java leest gegevens uit TestCase.xlsx.
  • Zo ziet het blad eruit:

Excel-blad voor een op trefwoorden gebaseerd framework in Selenium

  • Op basis van de trefwoorden in het Excel-bestand voert het framework de bijbehorende actie uit in de gebruikersinterface.
  • Om bijvoorbeeld op een knop met het label 'Inloggen' te klikken, slaat het Excel-bestand het trefwoord 'Klik' op. Om de inlogknop te identificeren tussen de vele knoppen op een pagina, definieert de Excel-rij de objectnaam als loginButton en het objecttype als naam (zie de gemarkeerde rij in de afbeelding). Het objecttype kan ook XPath, CSS, een klasse of een andere lokalisatiestrategie zijn.

Stap 3) LeesGuru99ExcelFile.java geeft de geparseerde gegevens terug aan het driverscript Execute.java.

Stap 4)

  • Voor alle UI-webelementen beheert u een objectrepository waarin elementlocators zoals XPath, naam, CSS of klassenaam worden opgeslagen.

Objectopslagplaats in een Keyword Driven Framework

  • Execute.java (het aansturende script) leest de volledige objectrepository en slaat deze op in een variabele.
  • Een hulpklasse ReadObject biedt een getObjectRepository-methode aan waarmee de repository tijdens de uitvoering kan worden geladen.

ReadObject-helperklasse voor Keyword Driven Framework

NOTITIE: Je vraagt โ€‹โ€‹je misschien af โ€‹โ€‹waarom een โ€‹โ€‹objectrepository nodig is. Het antwoord is onderhoudbaarheid. Als een knop met de naam 'btnlogin' in 10 testgevallen wordt gebruikt en de ontwikkelaar deze hernoemt naar 'submit', zou je anders 10 bestanden moeten aanpassen. Met een objectrepository hoef je de locator maar op รฉรฉn plek te wijzigen.

Stap 5)

  • De driver stuurt gegevens vanuit Excel en de objectrepository naar de gebruikersinterface.Operatie-klasse.
  • UIOperaDe code bevat functies die elk trefwoord, zoals CLICK en SETTEXT, koppelen aan een concrete WebDriver-actie.
  • UIOperatie is een Java Een klasse die de daadwerkelijke implementatie bevat voor interactie met webpagina-elementen.

UIOperation klasse in Keyword Driven Framework

De volledige projectstructuur ziet er als volgt uit:

Volledige projectstructuur van Keyword Driven Framework

Laten we een praktisch voorbeeld bekijken:

Testscenario: We 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 File object to open the xlsx file
        File file = new File(filePath + "\\" + fileName);
        // Create a FileInputStream to read the Excel file
        FileInputStream inputStream = new FileInputStream(file);
        Workbook guru99Workbook = null;
        // Detect the file extension
        String fileExtensionName = fileName.substring(fileName.indexOf("."));
        if (fileExtensionName.equals(".xlsx")) {
            guru99Workbook = new XSSFWorkbook(inputStream);
        } else if (fileExtensionName.equals(".xls")) {
            guru99Workbook = new HSSFWorkbook(inputStream);
        }
        // Read the 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 the 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":
                driver.findElement(this.getObject(p, objectName, objectType)).click();
                break;
            case "SETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).sendKeys(value);
                break;
            case "GOTOURL":
                driver.get(p.getProperty(value));
                break;
            case "GETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).getText();
                break;
            default:
                break;
        }
    }

    private By getObject(Properties p, String objectName, String objectType) throws Exception {
        if (objectType.equalsIgnoreCase("XPATH")) {
            return By.xpath(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CLASSNAME")) {
            return By.className(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("NAME")) {
            return By.name(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CSS")) {
            return By.cssSelector(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("LINK")) {
            return By.linkText(p.getProperty(objectName));
        } 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 {
        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 the number of rows in the Excel file
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        for (int i = 1; i < rowCount + 1; i++) {
            Row row = guru99Sheet.getRow(i);
            if (row.getCell(0).toString().length() == 0) {
                System.out.println(row.getCell(1).toString() + "----" + row.getCell(2).toString() + "----" +
                        row.getCell(3).toString() + "----" + row.getCell(4).toString());
                operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                        row.getCell(3).toString(), row.getCell(4).toString());
            } else {
                System.out.println("New Testcase->" + row.getCell(0).toString() + " Started");
            }
        }
    }
}

Na uitvoering ziet de uitvoer er als volgt uit:

Uitvoeringsoutput van het Keyword Driven Framework

Download de Selenium Projectbestanden voor de demo in deze zelfstudie

Hybride gedreven raamwerk

Hybride gedreven raamwerk in Selenium Het combineert de sterke punten van zowel keyword-driven als data-driven frameworks. Het is een gebruiksvriendelijk model waarmee handmatige testers testcases kunnen maken door simpelweg keywords, testdata en de objectrepository te bewerken, zonder frameworkcode te hoeven schrijven.

Hier bewaren Excel-bestanden de trefwoorden voor elke stap, en TestNG's data provider levert de testgegevens. Deze splitsing maakt het mogelijk om zowel de actievocabulaire als de inputvariaties onafhankelijk van elkaar te schalen.

Hybride gedreven framework-architectuur

Voor ons hybride framework verandert er niets aan de op trefwoorden gebaseerde structuur: we vervangen ExecuteTest.java simpelweg door HybridExecuteTest.java.

Vervanging van componenten in een hybride framework

Dit HybridExecuteTest-bestand bevat de volledige, op trefwoorden gebaseerde logica, gecombineerd met TestNGhet dataverstrekkingsmechanisme van 's.

De volledige visuele weergave van het hybride raamwerk ziet er als volgt uit:

Hybride gestuurd raamwerk, volledige weergave

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 {
        if (testcaseName != null && testcaseName.length() != 0) {
            webdriver = new FirefoxDriver();
        }
        ReadObject object = new ReadObject();
        Properties allObjects = object.getObjectRepository();
        UIOperation operation = new UIOperation(webdriver);
        operation.perform(allObjects, keyword, objectName, objectType, value);
    }

    @DataProvider(name = "hybridData")
    public Object[][] getDataFromDataprovider() throws IOException {
        Object[][] object = null;
        ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
        Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        object = new Object[rowCount][5];
        for (int i = 0; i < rowCount; i++) {
            Row row = guru99Sheet.getRow(i + 1);
            for (int j = 0; j < row.getLastCellNum(); j++) {
                object[i][j] = row.getCell(j).toString();
            }
        }
        System.out.println("");
        return object;
    }
}

Download de Selenium Projectbestanden voor de demo in deze zelfstudie

Veelgestelde vragen

Kies Keyword Driven wanneer handmatige testers testgevallen moeten bouwen zonder te coderen. Kies Data Driven wanneer hetzelfde script moet worden uitgevoerd met veel verschillende invoerwaarden. Gebruik Hybrid wanneer u zowel flexibiliteit in gegevens als de mogelijkheid om tests op trefwoordniveau te schrijven nodig hebt.

Apache POI leest en schrijft Excel-bestanden die als gegevensbron worden gebruikt. HSSF verwerkt oudere .xls-bestanden, terwijl XSSF moderne .xlsx-bestanden verwerkt. Samen zorgen ze ervoor dat uw testscripts dynamische invoer uit spreadsheets kunnen halen zonder gegevens vast te coderen.

Een objectrepository centraliseert elementlocators zoals XPath, CSS of namen. Als een ontwikkelaar een UI-element hernoemt, hoeft slechts รฉรฉn item te worden bijgewerkt in plaats van elk testgeval. Dit verkort de onderhoudstijd aanzienlijk en verkleint het risico op defecte scripts.

AI verbetert Selenium frameworks maken gebruik van zelfherstellende locators, intelligente testprioritisering en visuele validatie. AI-engines detecteren locator-drift, bevelen stabiele selectors aan en analyseren faalpatronen, waardoor hybride testsuites betrouwbaar blijven naarmate de te testen applicatie evolueert.

Ja. Moderne AI-assistenten analyseren de te testen applicatie en stellen trefwoordbibliotheken, voorbeeldinvoer en randgevallen voor. Testers beoordelen en verfijnen de suggesties, wat de frameworkconfiguratie versnelt en tegelijkertijd de efficiรซntie verhoogt.ping Menselijk toezicht op de cruciale validatielogica.

Vat dit bericht samen met: