Selenium Raamistik: andmete, märksõnade ja hübriidpõhine
⚡ Nutikas kokkuvõte
Selenium Raamistik: andme-, märksõna- ja hübriidpõhised lähenemisviisid määratlevad, kuidas testijad korraldavad automatiseerimiskoodi, eraldavad testiandmeid ja taaskasutavad loogikat. See artikkel selgitab iga raamistiku tüüpi, selle arhitektuuri, eeliseid ja seda, kuidas neid samm-sammult praktiliste juhistega rakendada. Selenium WebDriveri koodi näited.

Mis on Selenium Raamistik?
. Selenium automatiseerimise raamistik on struktureeritud koodiarhitektuur, mis muudab testide haldamise lihtsaks, skaleeritavaks ja tõhusaks. Ilma raamistikuta paigutavad testijad koodi ja andmed sageli samasse kohta, mis ei ole ei korduvkasutatav ega loetav. Raamistiku kasutuselevõtt pakub mõõdetavaid eeliseid, nagu suurem koodi korduvkasutatavus, parem kaasaskantavus, väiksemad skriptide hoolduskulud, parem loetavus ja selgem eristamine testiloogika ja sisendandmete vahel.
Miks kasutada a Selenium Automatiseerimisraamistik?
Hästi kujundatud Selenium raamistik lahendab testide automatiseerimisel kolm püsivat probleemi: koodi dubleerimine, haprad lokaatorid ja raskesti hallatavad testiandmed. Selge struktuuri jõustamisega saavad meeskonnad oma skriptide arvu suurendada käputäiest kuni sadade skriptideni, kaotamata seejuures kontrolli.
- Hooldatavus: Tsentraliseeritud lokaatorid ja abimeetodid tähendavad, et üks muudatus uuendab iga testi, mis seda elementi kasutab.
- Korduvkasutatavus: Levinud toimingud, nagu sisselogimine, navigeerimine või vormile sisestamine, kirjutatakse üks kord ja neid kutsutakse esile paljude testide puhul.
- Skaalautuvuus: Uute testijuhtumite lisamine muutub pigem andmete värskendamiseks kui kodeerimisülesandeks, mis võimaldab mitte-arendajatel stsenaariumide loomisega panustada.
- Aruandlus ja koostöö: Standardiseeritud struktuur lihtsustab integreerimist aruandlustööriistade, CI/CD torujuhtmete ja versioonikontrolliga.
Tüübid Selenium Raamistik
Põhilisi on kolm raamistike tüübid ehitatud Selenium WebDriver käsitsi testide automatiseerimiseks. Iga stiil on suunatud erinevale tasakaalule arendaja pingutuse, testija kaasamise ja andmete paindlikkuse vahel.
- Andmepõhine raamistik
- Märksõnapõhine raamistik
- Hübriidajamiga raamistik
Järgmistes osades selgitatakse iga raamistikku üksikasjalikult, alustades lihtsamast andmepõhisest lähenemisviisist ja liikudes edasi kõige paindlikuma hübriidmudelini.
Andmepõhine raamistik sisse Selenium
Andmepõhine raamistik sisse Selenium on meetod testandmekogumite eraldamiseks testjuhtumi loogikast. Kui andmed on lahti ühendatud, saate konkreetse funktsionaalsuse sisendeid muuta ilma testkoodi puutumata. Seda kasutatakse tavaliselt testide ja testikomplektide toomiseks välistest allikatest, näiteks Excel, .csv, .xml või andmebaasitabelid.
Exceli failide lugemiseks või kirjutamiseks pakub Apache tuntud POI teeki. See teek saab hakkama nii XLS ja XLSX formaadid. See HSSF rakendus loeb pärand-XLS-faile, samas kui XSSF implementatsioon haldab kaasaegseid XLSX-faile.
Andmepõhise testimise kohta oleme juba kirjutanud eelmine juhendaja.
Märksõnapõhine raamistik sisse Selenium
Märksõnapõhine raamistik sisse Selenium on meetod, mis kiirendab automatiseerimist, eraldades märksõnad tavaliste funktsioonide ja juhiste jaoks. Kõik toimingud ja juhised kirjutatakse välisesse faili, tavaliselt Exceli tabelisse. Testijad saavad määrata funktsionaalsused, mida nad soovivad valideerida, ilma neid muutmata. Java kood, mis teeb selle stiili ideaalseks meeskondadele, kus ärianalüütikud või käsitsi kvaliteedikontrollijad panustavad testidefinitsioonidesse.
Nii näeb välja täielik raamistik:
Nagu näete, on see viieastmeline raamistik. Uurime seda samm-sammult üksikasjalikumalt.
Step 1)
- Draiveri skript Execute.java kutsub ReadGuru99ExcelFile.java.
- LugenudGuru99ExcelFile.java sisaldab POI-koodi, mis loeb andmeid Excelist.
Step 2)
- LugenudGuru99ExcelFile.java loeb andmeid failist TestCase.xlsx.
- Nii näeb leht välja:
- Exceli faili kirjutatud märksõnade põhjal teeb raamistik kasutajaliideses vastava toimingu.
- Näiteks nupu „Logi sisse“ klõpsamiseks salvestab Exceli tabel märksõna „Klõps“. Lehel paljude sisselogimisnuppude hulgast sisselogimisnupu tuvastamiseks määratleb Exceli rida objekti nimeks loginButton ja objekti tüübiks nimena (vt pildil esiletõstetud rida). Objekti tüüp võib olla ka XPath, CSS, klass või mis tahes muu lokaliseerimisstrateegia.
Step 3) LugenudGuru99ExcelFile.java edastab parsitud andmed tagasi draiveriskriptile Execute.java.
Step 4)
- Kõigi kasutajaliidese veebielementide jaoks haldate objektihoidlat, mis salvestab elementide lokaatoreid, näiteks XPath, nimi, CSS või klassi nimi.
- Execute.java (draiveriskript) loeb kogu objektihoidla ja salvestab selle muutujasse.
- Abiklass ReadObject avaldab meetodi getObjectRepository, mis laadib repositooriumi käitusajal.
MÄRKUS: Võite mõelda, miks on vaja objektihoidlat. Vastus peitub hooldatavuses. Kui 10 testijuhtumis kasutatakse nuppu nimega btnlogin ja arendaja nimetab selle ümber esitamiseks, siis muudaksite muidu 10 faili. Objektihoidla puhul muudate lokaatorit ühes kohas.
Step 5)
- Draiver edastab andmed Excelist ja objektihoidlast kasutajaliidesele.Operatsiooniklass.
- UIOperation sisaldab funktsioone, mis seovad iga märksõna, näiteks CLICK ja SETTEXT, konkreetse WebDriveri toiminguga.
- UIOperatsioon on a Java klass, mis sisaldab veebielementidega suhtlemise tegelikku implementatsiooni.
Projekti täielik struktuur näeb välja selline:
Vaatame praktilist näidet:
Testi stsenaarium: Me viime läbi 2 testi.
- Testjuhtum 1:
- Minema
https://demo.guru99.com/V4/ - Sisesta kasutaja ID
- Sisestage parool
- Klõpsake nuppu Lähtesta
- Testjuhtum 2:
- Minema
https://demo.guru99.com/V4/ - Sisesta kasutaja ID
- Sisestage parool
- Klõpsake nuppu Logi sisse
objekt.omadused
url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset
LugenudGuru99ExcelFile.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");
}
}
}
}
Pärast käivitamist näeb väljund välja selline:
Lae alla Selenium Selle õpetuse demo projektifailid
Hübriidajamiga raamistik
Hübriidajamiga raamistik in Selenium ühendab endas nii märksõnapõhiste kui ka andmepõhiste raamistike tugevused. See on hõlpsasti kasutatav mudel, mis võimaldab käsitsi testijatel luua testjuhtumeid lihtsalt märksõnade, testiandmete ja objektihoidla redigeerimise teel, ilma raamistiku koodi kirjutamata.
Siin säilitavad Exceli failid iga sammu märksõnu ja TestNG'S andmeedastaja annab testandmed. See jaotus võimaldab teil nii toimingute sõnavara kui ka sisendvariatsioone eraldi skaleerida.
Meie hübriidraamistiku puhul ei muutu märksõnapõhises struktuuris midagi: me lihtsalt asendame ExecuteTest.java failiga HybridExecuteTest.java.
See HybridExecuteTesti fail sisaldab täielikku märksõnapõhist loogikat koos järgmisega: TestNGandmepakkuja mehhanism.
Hübriidraamistiku täielik pildiline esitus näeb välja selline:
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;
}
}
Lae alla Selenium Selle õpetuse demo projektifailid












