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.

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
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.
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:
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:
- 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ă.
- 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.
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.
Structura completă a proiectului arată astfel:
Să luăm un exemplu practic:
Scenariul de testare: Executăm 2 cazuri de testare.
- Cazul de testare 1:
- Mergi la
https://demo.guru99.com/V4/ - Introduceți ID utilizator
- Introdu parola
- Faceți clic pe Resetare
- Cazul de testare 2:
- Mergi la
https://demo.guru99.com/V4/ - Introduceți ID utilizator
- Introdu parola
- Faceți clic pe Conectare
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:
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.
Pentru framework-ul nostru hibrid, nu se schimbă nimic în structura bazată pe cuvinte cheie: pur și simplu înlocuim ExecuteTest.java cu HybridExecuteTest.java.
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:
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












