Selenium Keretrendszer: adat-, kulcsszó- és hibridvezérelt

⚡ Okos összefoglaló

Selenium Keretrendszer: Az adat-, kulcsszó- és hibridvezérelt megközelítések határozzák meg, hogyan szervezik a tesztelők az automatizálási kódot, hogyan különítik el a tesztadatokat és hogyan használják újra a logikát. Ez a cikk ismerteti az egyes keretrendszer-típusokat, azok architektúráját, előnyeit, és azt, hogyan lehet lépésről lépésre megvalósítani őket gyakorlatias megoldásokkal. Selenium WebDriver kód példák.

  • Alapvető definíció: A Selenium A keretrendszer egy strukturált kódarchitektúra, amely javítja az automatizált tesztszkriptek újrafelhasználhatóságát, hordozhatóságát és karbantartását.
  • 📊 Adatvezérelt megvalósítás: A tesztadatokat a logikától Excel, CSV vagy XML segítségével választhatja szét, és a bemeneteket Apache POI-n keresztül olvashatja be (HSSF XLS-hez, XSSF XLSX-hez).
  • 🔑 Kulcsszóvezérelt tervezés: Vezesse a felhasználói felület műveleteit kulcsszólapok és objektumtárak segítségével, hogy a manuális tesztelők írás nélkül is létrehozhassanak eseteket Java kód.
  • 🇧🇷 Hibrid optimalizálás: Kombájn TestNG kulcsszó-végrehajtással rendelkező adatszolgáltatók a rugalmasság, a skálázhatóság és az alacsonyabb szkriptkarbantartási költségek érdekében.
  • 🧩 Objektumtár előnyei: A helymeghatározókat egy tulajdonságfájlban kell központosítani, hogy az elemmódosítások az összes tesztesetben csak egyetlen helyszín frissítését igényeljék.

Selenium Keretrendszer

Mi a Selenium Keretrendszer?

Az Selenium automatizálási keretrendszer egy strukturált kódarchitektúra, amely egyszerűvé, skálázhatóvá és hatékonnyá teszi a tesztkarbantartást. Keretrendszer nélkül a tesztelők gyakran ugyanarra a helyre helyezik a kódot és az adatokat, amely sem nem újrafelhasználható, sem nem olvasható. Egy keretrendszer bevezetése mérhető előnyökkel jár, mint például a kód nagyobb újrafelhasználhatósága, jobb hordozhatóság, alacsonyabb szkriptkarbantartási költségek, jobb olvashatóság, valamint a tesztlogika és a bemeneti adatok közötti aggodalmak világosabb elkülönítése.

Miért használja a Selenium Automatizálási keretrendszer?

Jól megtervezett Selenium A keretrendszer három állandó problémát old meg a tesztautomatizálásban: a kód duplikációját, a törékeny lokátorokat és a kezelhetetlen tesztadatokat. Egy világos struktúra kikényszerítésével a csapatok néhány szkriptről több százra skálázhatják csomagjaikat anélkül, hogy elveszítenék az irányítást.

  • Karbantarthatóság: A központosított lokátorok és segítőmetódusok azt jelentik, hogy egyetlen módosítás frissíti az adott elemet használó összes tesztet.
  • Újrahasználhatóság: Az olyan gyakori műveletek, mint a bejelentkezés, a navigáció vagy az űrlapkitöltés, egyszer íródnak meg, és számos teszteseten keresztül meghívódnak.
  • skálázhatóság: Az új tesztesetek hozzáadása inkább adatfrissítéssé, mint kódolási feladattá válik, így nem fejlesztők is hozzájárulhatnak a forgatókönyvekhez.
  • Jelentéstétel és együttműködés: A szabványosított struktúra megkönnyíti a jelentéskészítő eszközökkel, a CI/CD folyamatokkal és a verziókövetéssel való integrációt.

Típusok Selenium Keretrendszer

Három elsődleges keretrendszerek típusai épül Selenium WebDriver a manuális tesztesetek automatizálásához. Minden stílus más egyensúlyt céloz meg a fejlesztői erőfeszítés, a tesztelők bevonása és az adatrugalmasság között.

  • Adatvezérelt keretrendszer
  • Kulcsszóvezérelt keretrendszer
  • Hibrid vezérelt keretrendszer

Típusok Selenium Keretrendszer

A következő szakaszok részletesen ismertetik az egyes keretrendszereket, a legegyszerűbb adatvezérelt megközelítéssel kezdve, és a legrugalmasabb hibrid modellig haladva.

Adatvezérelt keretrendszer Selenium

Adatvezérelt keretrendszer Selenium egy módszer a tesztadatkészletek és a teszteset logikájának elválasztására. Miután az adatok le vannak választva, módosíthatja egy adott funkció bemeneteit a tesztkód megérintése nélkül. Általában tesztesetek és tesztcsomagok külső forrásokból, például Excel, .csv, .xml fájlokban vagy adatbázistáblákban.

Adatvezérelt keretrendszer Selenium

Az Excel fájlok olvasásához vagy írásához az Apache a jól ismert POI könyvtárat biztosítja. Ez a könyvtár mindkettőt képes kezelni XLS és a XLSX formátumok. A HSSF a megvalósítás régi XLS fájlokat olvas, míg a XSSF A megvalósítás a modern XLSX fájlokat kezeli.

Már foglalkoztunk az adatvezérelt teszteléssel a cikkünkben. előző bemutató.

Kulcsszóvezérelt keretrendszer be Selenium

Kulcsszóvezérelt keretrendszer be Selenium egy olyan módszer, amely felgyorsítja az automatizálást azáltal, hogy elkülöníti a kulcsszavakat a gyakori függvényekhez és utasításokhoz. Minden művelet és utasítás egy külső fájlban, jellemzően egy Excel-táblázatban íródik. A tesztelők megadhatják a validálni kívánt funkciókat anélkül, hogy módosítanák a Java kód, ami ideálissá teszi ezt a stílust azoknak a csapatoknak, ahol üzleti elemzők vagy manuális minőségbiztosítási szakemberek adják hozzá a tesztdefiníciókat.

Így néz ki a teljes keretrendszer:

Kulcsszóvezérelt keretrendszer be Selenium

Amint láthatja, ez egy 5 lépésből álló keretrendszer. Vizsgáljuk meg lépésről lépésre részletesen.

Step 1)

  • Az Execute.java illesztőprogram-szkript meghívja a Read függvénytGuru99ExcelFájl.java.
  • OlvassGuruA 99ExcelFile.java fájl POI kódot tartalmaz, amely adatokat olvas be az Excelből.

Step 2)

  • OlvassGuruA 99ExcelFile.java beolvassa az adatokat a TestCase.xlsx fájlból.
  • Így néz ki a lap:

Kulcsszóvezérelt keretrendszer Excel táblázat Selenium

  • Az Excel fájlban írt kulcsszavak alapján a keretrendszer végrehajtja a megfelelő műveletet a felhasználói felületen.
  • Például egy „Bejelentkezés” feliratú gombra kattintáshoz az Excel-munkalap a „Kattintás” kulcsszót tárolja. A Bejelentkezés gomb azonosításához egy oldalon a sok közül, az Excel sor az Objektumnevet loginButton-ként, az Objektumtípust pedig névként definiálja (lásd a képen a kiemelt sort). Az Objektumtípus lehet XPath, CSS, osztály vagy bármilyen más helymeghatározó stratégia is.

Step 3) OlvassGuruA 99ExcelFile.java visszaadja az elemzett adatokat az Execute.java illesztőprogram-szkriptnek.

Step 4)

  • Minden felhasználói felület webes eleméhez egy objektumtárat kell fenntartani, amely az elemlokátorokat, például az XPath-ot, a nevet, a CSS-t vagy az osztálynevet tárolja.

Objektumtár a kulcsszóvezérelt keretrendszerben

  • Az Execute.java (az illesztőprogram szkript) beolvassa a teljes objektumtárat, és egy változóban tárolja.
  • Egy segítő ReadObject osztály elérhetővé tesz egy getObjectRepository metódust, amely futásidőben betölti a repositoryt.

ReadObject segítő osztály kulcsszóvezérelt keretrendszerhez

JEGYZET: Felmerülhet a kérdés, hogy miért van szükség objektumtárházra. A válasz a karbantarthatóság. Ha egy btnlogin nevű gombot 10 tesztesetben használunk, és a fejlesztő átnevezi beküldésre, akkor egyébként 10 fájlt kellene szerkesztenünk. Egy objektumtárház esetében egy helyen módosítjuk a helymeghatározót.

Step 5)

  • Az illesztőprogram adatokat továbbít az Excelből és az objektumtárból a felhasználói felületre.Operaciós osztály.
  • UIOperaA tion olyan függvényeket tartalmaz, amelyek minden kulcsszót, például a CLICK és a SETTEXT, egy konkrét WebDriver művelethez rendelnek.
  • UIOperació egy Java osztály, amely a webes elemekkel való interakció valódi megvalósítását tartalmazza.

UIOperaciós osztály a kulcsszóvezérelt keretrendszerben

A teljes projektstruktúra így néz ki:

A kulcsszóvezérelt keretrendszer teljes projektstruktúrája

Nézzünk egy gyakorlati példát:

Teszt forgatókönyv: 2 tesztesetet futtatunk le.

  • 1. teszteset:
  • Menj https://demo.guru99.com/V4/
  • Adja meg a felhasználói azonosítót
  • Írd be a jelszót
  • Kattintson a Visszaállítás gombra
  • 2. teszteset:
  • Menj https://demo.guru99.com/V4/
  • Adja meg a felhasználói azonosítót
  • Írd be a jelszót
  • Kattintson a Bejelentkezés gombra

objektum.tulajdonságok

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

OlvassGuru99ExcelFájl.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;
    }
}

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

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

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

A végrehajtás után a kimenet így néz ki:

Kulcsszóvezérelt keretrendszer végrehajtási kimenete

Töltse le a Selenium Projektfájlok a bemutatóhoz ebben az oktatóanyagban

Hibrid vezérelt keretrendszer

Hibrid vezérelt keretrendszer in Selenium egyesíti a kulcsszóvezérelt és az adatvezérelt keretrendszerek erősségeit. Ez egy könnyen használható modell, amely lehetővé teszi a manuális tesztelők számára, hogy teszteseteket hozzanak létre egyszerűen a kulcsszavak, a tesztadatok és az objektumtárház szerkesztésével, bármilyen keretrendszer-kód írása nélkül.

Itt az Excel fájlok minden lépéshez megőrzik a kulcsszavakat, és TestNG'S adatszolgáltató biztosítja a tesztadatokat. Ez a felosztás lehetővé teszi a műveleti szókincs és a bemeneti variációk egymástól független skálázását.

Hibrid vezérelt keretrendszer architektúra

A hibrid keretrendszerünkben semmi sem változik a kulcsszóvezérelt struktúrában: egyszerűen az ExecuteTest.java fájlt HybridExecuteTest.java fájlra cseréljük.

Hibrid vezérelt keretrendszer komponenscsere

Ez a HybridExecuteTest fájl tartalmazza a teljes kulcsszóvezérelt logikát a következőkkel kombinálva: TestNGadatszolgáltatói mechanizmusa.

A hibrid keretrendszer teljes képi ábrázolása így néz ki:

Hibrid Vezérelt Keretrendszer teljes reprezentációja

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

Töltse le a Selenium Projektfájlok a bemutatóhoz ebben az oktatóanyagban

GYIK

Válassza a Kulcsszóvezérelt módot, ha a manuális tesztelőknek kódolás nélkül kell eseteket felépíteniük. Válassza az Adatvezérelt módot, ha ugyanazt a szkriptet kell sok bemeneti variációval futtatni. Használja a Hibrid módot, ha egyszerre van szüksége adatrugalmasságra és kulcsszószintű tesztkészítésre.

Az Apache POI az adatforrásként használt Excel fájlokat olvassa és írja. A HSSF a régi .xls fájlokat kezeli, míg az XSSF a modern .xlsx fájlokat dolgozza fel. Együttesen lehetővé teszik, hogy a tesztszkriptek dinamikus bemeneteket kérjenek le a táblázatokból anélkül, hogy adatokat kellene fixen kódolni.

Egy objektumtár központosítja az elemlokátorokat, például az XPath-ot, a CSS-t vagy a nevet. Ha egy fejlesztő átnevezi a felhasználói felület vezérlőjét, akkor egy bejegyzést frissít a tesztesetek helyett, ami drámaian csökkenti a karbantartási időt és a hibás szkriptek kockázatát.

Az AI javul Selenium keretrendszereket önjavító lokátorokon, intelligens tesztpriorizáláson és vizuális validáción keresztül. A mesterséges intelligencia motorok érzékelik a lokátor eltolódását, stabil szelektorokat javasolnak, és elemzik a hibamintákat, ami a hibrid csomagok megbízhatóságát biztosítja a tesztelt alkalmazás fejlődése során.

Igen. A modern mesterséges intelligencia asszisztensek elemzik a tesztelt alkalmazást, és kulcsszókönyvtárakat, minta bemeneteket és szélső eseteket javasolnak. A tesztelők áttekintik és finomítják a javaslatokat, ami felgyorsítja a keretrendszer beállítását, miközben...ping emberi felügyelet a kritikus validációs logikán.

Foglald össze ezt a bejegyzést a következőképpen: