Selenium Cadru: bazat pe date, cuvinte cheie și hibrid

⚡ Rezumat inteligent

Selenium Cadru: Abordările bazate pe date, cuvinte cheie și hibride definesc modul în care testerii organizează codul de automatizare, separă datele de testare și reutilizează logica. Acest articol explică fiecare tip de cadru, arhitectura sa, avantajele și cum să le implementeze pas cu pas, cu ajutorul unor metode practice. Selenium Exemple de cod WebDriver.

  • Definiția de bază: A Selenium Un framework este o arhitectură de cod structurată care îmbunătățește reutilizabilitatea, portabilitatea și întreținerea scripturilor de testare automate.
  • 📊 Implementare bazată pe date: Separați datele de test de logică folosind Excel, CSV sau XML și citiți intrările prin Apache POI (HSSF pentru XLS, XSSF pentru XLSX).
  • 🔑 Design bazat pe cuvinte cheie: Implementează acțiuni în interfața utilizatorului prin intermediul fișelor de cuvinte cheie și al depozitelor de obiecte, astfel încât testerii manuali să poată construi cazuri fără a scrie. Java cod.
  • ⚙️ Optimizare hibridă: Combina TestNG furnizori de date cu execuție de cuvinte cheie pentru a obține flexibilitate, scalabilitate și costuri reduse de întreținere a scripturilor.
  • 🧩 Beneficiul depozitului de obiecte: Centralizați locatorii într-un fișier de proprietăți, astfel încât modificările elementelor să necesite actualizarea unei singure locații în toate cazurile de testare.

Selenium Cadru

Ce Este Selenium Cadru?

Selenium cadru de automatizare este o arhitectură de cod structurată care face ca întreținerea testelor să fie simplă, scalabilă și eficientă. Fără un framework, testerii plasează adesea codul și datele în aceeași locație, care nu este nici reutilizabilă, nici lizibilă. Adoptarea unui framework oferă beneficii măsurabile, cum ar fi o reutilizabilitate mai mare a codului, o portabilitate mai bună, costuri reduse de întreținere a scripturilor, o lizibilitate îmbunătățită și o separare mai clară a aspectelor legate de logica de testare și datele de intrare.

De ce să folosiți un Selenium Cadru de automatizare?

Un proiectat bine Selenium Framework-ul rezolvă trei probleme persistente în automatizarea testelor: duplicarea codului, localizatorii fragili și datele de testare imposibil de gestionat. Prin impunerea unei structuri clare, echipele își pot scala suitele de scripturi de la câteva la sute fără a pierde controlul.

  • Mentenabilitatea: Localizatoarele centralizate și metodele auxiliare înseamnă că o singură modificare actualizează fiecare test care utilizează elementul respectiv.
  • Reutilizabilitate: Operațiunile comune, cum ar fi autentificarea, navigarea sau introducerea formularelor, sunt scrise o singură dată și invocate în mai multe cazuri de testare.
  • scalabilitate: Adăugarea de noi cazuri de testare devine o actualizare a datelor, mai degrabă decât o sarcină de codare, ceea ce permite celor care nu sunt dezvoltatori să contribuie cu scenarii.
  • Raportare și colaborare: Structura standardizată facilitează integrarea cu instrumente de raportare, canale CI/CD și controlul versiunilor.

Tipuri de Selenium Cadru

Sunt trei primare tipuri de cadre construit pe Selenium WebDriver pentru automatizarea cazurilor de testare manuală. Fiecare stil vizează un echilibru diferit între efortul dezvoltatorului, implicarea testerilor și flexibilitatea datelor.

  • Cadrul bazat pe date
  • Cadru bazat pe cuvinte cheie
  • Cadru condus de hibrid

Tipuri de Selenium Cadru

Următoarele secțiuni explică în detaliu fiecare cadru, începând cu cea mai simplă abordare bazată pe date și progresând către cel mai flexibil model hibrid.

Cadrul bazat pe date în Selenium

Cadrul bazat pe date în Selenium este o metodă de separare a seturilor de date de testare de logica cazului de testare. Odată ce datele sunt decuplate, puteți modifica intrările pentru o anumită funcționalitate fără a atinge codul de testare. Este frecvent utilizată pentru a prelua cazuri de testare și suite din surse externe, cum ar fi Excel, .csv, .xml sau tabele de bază de date.

Cadrul bazat pe date în Selenium

Pentru a citi sau scrie fișiere Excel, Apache oferă binecunoscuta bibliotecă POI. Această bibliotecă poate gestiona ambele XLS și XLSX formate. The HSSF implementarea citește fișierele XLS vechi, în timp ce XSSF Implementarea gestionează fișiere XLSX moderne.

Am acoperit deja testarea bazată pe date în secțiunea noastră tutorialul anterior.

Cadrul bazat pe cuvinte cheie în Selenium

Cadrul bazat pe cuvinte cheie în Selenium este o metodă care accelerează automatizarea prin separarea cuvintelor cheie pentru funcții și instrucțiuni comune. Toate operațiile și instrucțiunile sunt scrise într-un fișier extern, de obicei o foaie Excel. Testerii pot specifica funcționalitățile pe care doresc să le valideze fără a le modifica. Java cod, ceea ce face ca acest stil să fie ideal pentru echipele în care analiștii de business sau echipa de control al calității manual contribuie cu definiții de teste.

Iată cum arată cadrul complet:

Cadrul bazat pe cuvinte cheie în Selenium

După cum puteți vedea, este un cadru în 5 pași. Să îl studiem pas cu pas în detaliu.

Pas 1)

  • Scriptul driverului Execute.java apelează comanda ReadGuru99ExcelFile.java.
  • CitițiGuruFișierul 99ExcelFile.java conține cod POI care citește date din Excel.

Pas 2)

  • CitițiGuru99ExcelFile.java citește date din fișierul TestCase.xlsx.
  • Iată cum arată foaia:

Foaie Excel cu framework bazat pe cuvinte cheie în Selenium

  • Pe baza cuvintelor cheie scrise în fișierul Excel, framework-ul efectuează acțiunea corespunzătoare asupra interfeței utilizator.
  • De exemplu, pentru a face clic pe un buton etichetat „Login”, foaia Excel stochează cuvântul cheie „Click”. Pentru a identifica butonul Log in printre multe altele de pe o pagină, rândul Excel definește Numele obiectului ca loginButton și Tipul obiectului ca nume (vezi rândul evidențiat în imagine). Tipul obiectului poate fi, de asemenea, XPath, CSS, clasă sau orice altă strategie de localizare.

Pas 3) CitițiGuruFișierul 99ExcelFile.java transmite datele analizate înapoi scriptului driverului Execute.java.

Pas 4)

  • Pentru toate elementele web UI, mențineți un depozit de obiecte care stochează localizatorii de elemente, cum ar fi XPath, nume, CSS sau nume de clasă.

Depozit de obiecte în Keyword Driven Framework

  • Execute.java (scriptul driverului) citește întregul depozit de obiecte și îl stochează într-o variabilă.
  • O clasă helper ReadObject expune o metodă getObjectRepository care încarcă repozitoriul la momentul execuției.

Clasa auxiliară ReadObject pentru Keyword Driven Framework

NOTĂ: Vă puteți întreba de ce este necesar un depozit de obiecte. Răspunsul este mentenabilitatea. Dacă un buton cu numele = btnlogin este utilizat în 10 cazuri de testare și dezvoltatorul îl redenumește la „submit”, altfel ați edita 10 fișiere. Cu un depozit de obiecte, schimbați locatorul într-un singur loc.

Pas 5)

  • Driverul transmite date din Excel și din depozitul de obiecte către interfața cu utilizatorulOperaclasă de țiune.
  • UIOperation conține funcții care mapează fiecare cuvânt cheie, cum ar fi CLICK și SETTEXT, la o acțiune WebDriver concretă.
  • UIOperațiunea este o Java clasa care conține implementarea reală pentru interacțiunea cu elementele web.

UIOperaclasa tion în Keyword Driven Framework

Structura completă a proiectului arată astfel:

Structura completă a proiectului Keyword Driven Framework

Să luăm un exemplu practic:

Scenariul de testare: Executăm 2 cazuri de testare.

obiect.proprietăţi

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

CitițiGuru99ExcelFile.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");
            }
        }
    }
}

După execuție, rezultatul arată astfel:

Rezultatul execuției framework-ului bazat pe cuvinte cheie

Descărcați Selenium Fișiere de proiect pentru demonstrația din acest tutorial

Cadru condus de hibrid

Cadru condus de hibrid in Selenium combină punctele forte ale framework-urilor Keyword Driven și Data Driven. Este un model ușor de utilizat, care permite testerilor manuali să creeze cazuri de testare pur și simplu editând cuvintele cheie, datele de testare și depozitul de obiecte, fără a scrie niciun cod al framework-ului.

Aici, fișierele Excel păstrează cuvintele cheie pentru fiecare pas și TestNG'S furnizor de date furnizează datele de testare. Această divizare vă permite să scalați independent atât vocabularul acțiunilor, cât și variantele de intrare.

Arhitectură hibridă bazată pe framework

Pentru framework-ul nostru hibrid, nu se schimbă nimic în structura bazată pe cuvinte cheie: pur și simplu înlocuim ExecuteTest.java cu HybridExecuteTest.java.

Înlocuirea componentelor Hybrid Driven Framework

Acest fișier HybridExecuteTest conține logica completă bazată pe cuvinte cheie, combinată cu TestNGmecanismul furnizorului de date al lui.

Reprezentarea picturală completă a cadrului hibrid arată astfel:

Reprezentare completă a cadrului hibrid

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

Descărcați Selenium Fișiere de proiect pentru demonstrația din acest tutorial

Întrebări frecvente

Alegeți opțiunea „Bazat pe cuvinte cheie” atunci când testerii manuali trebuie să construiască studii de caz fără a programa. Alegeți „Bazat pe date” atunci când același script trebuie să ruleze pentru mai multe variante de intrare. Folosiți opțiunea „Hibrid” atunci când aveți nevoie simultan atât de flexibilitate în ceea ce privește datele, cât și de creare de teste la nivel de cuvinte cheie.

Apache POI citește și scrie fișiere Excel utilizate ca sursă de date. HSSF gestionează fișierele .xls vechi, în timp ce XSSF procesează fișierele .xlsx moderne. Împreună, acestea permit scripturilor de testare să extragă intrări dinamice din foi de calcul fără a codifica datele în mod hardcoding.

Un depozit de obiecte centralizează localizatorii de elemente precum XPath, CSS sau nume. Dacă un dezvoltator redenumește un control UI, actualizați o singură intrare în loc de fiecare caz de testare, ceea ce reduce dramatic timpul de mentenanță și riscul unor scripturi defecte.

AI se îmbunătățește Selenium framework-uri prin localizatori cu auto-reparare, prioritizare inteligentă a testelor și validare vizuală. Motoarele de inteligență artificială detectează abaterea localizatorilor, recomandă selectori stabili și analizează modelele de defecțiuni, ceea ce menține suitele hibride fiabile pe măsură ce aplicația testată evoluează.

Da. Asistenții moderni de inteligență artificială analizează aplicația testată și propun biblioteci de cuvinte cheie, exemple de intrări și cazuri limită. Testerii revizuiesc și rafinează sugestiile, ceea ce accelerează configurarea framework-ului în timp ce...ping supraveghere umană asupra logicii de validare critică.

Rezumați această postare cu: