Selenium फ्रेमवर्क: डेटा, कीवर्ड और हाइब्रिड संचालित
⚡ स्मार्ट सारांश
Selenium फ्रेमवर्क: डेटा, कीवर्ड और हाइब्रिड आधारित दृष्टिकोण यह परिभाषित करते हैं कि परीक्षक ऑटोमेशन कोड को कैसे व्यवस्थित करते हैं, परीक्षण डेटा को कैसे अलग करते हैं और लॉजिक का पुन: उपयोग कैसे करते हैं। यह लेख प्रत्येक फ्रेमवर्क प्रकार, उसकी संरचना, लाभ और व्यावहारिक उदाहरणों के साथ चरण-दर-चरण कार्यान्वयन की व्याख्या करता है। Selenium वेबड्राइवर कोड के उदाहरण।

एचएमबी क्या है? Selenium रूपरेखा?
RSI Selenium स्वचालन फ्रेमवर्क यह एक संरचित कोड आर्किटेक्चर है जो परीक्षण रखरखाव को सरल, स्केलेबल और कुशल बनाता है। फ्रेमवर्क के बिना, परीक्षक अक्सर कोड और डेटा को एक ही स्थान पर रखते हैं, जो न तो पुन: प्रयोज्य होता है और न ही पठनीय। फ्रेमवर्क अपनाने से कई स्पष्ट लाभ मिलते हैं, जैसे कि कोड की पुन: प्रयोज्यता में वृद्धि, बेहतर पोर्टेबिलिटी, स्क्रिप्ट रखरखाव लागत में कमी, पठनीयता में सुधार और परीक्षण तर्क और इनपुट डेटा के बीच स्पष्ट पृथक्करण।
एक Use का उपयोग क्यों करें Selenium स्वचालन ढांचा?
एक अच्छी तरह से डिजाइन Selenium यह फ्रेमवर्क टेस्ट ऑटोमेशन में तीन लगातार बनी रहने वाली समस्याओं का समाधान करता है: कोड का दोहराव, कमज़ोर लोकेटर और अनियंत्रित टेस्ट डेटा। एक स्पष्ट संरचना लागू करके, टीमें बिना नियंत्रण खोए अपने टेस्ट सूट को कुछ स्क्रिप्ट से लेकर सैकड़ों स्क्रिप्ट तक बढ़ा सकती हैं।
- रखरखाव: केंद्रीकृत लोकेटर और सहायक विधियों का अर्थ है कि एक ही परिवर्तन उस तत्व का उपयोग करने वाले प्रत्येक परीक्षण को अपडेट कर देता है।
- पुनर्प्रयोग: लॉगिन, नेविगेशन या फॉर्म एंट्री जैसे सामान्य ऑपरेशन एक बार लिखे जाते हैं और कई टेस्ट केस में लागू किए जाते हैं।
- अनुमापकता: नए टेस्ट केस जोड़ना कोडिंग कार्य के बजाय डेटा अपडेट बन जाता है, जिससे गैर-डेवलपर्स भी परिदृश्यों में योगदान कर सकते हैं।
- रिपोर्टिंग और सहयोग: मानकीकृत संरचना से रिपोर्टिंग टूल, सीआई/सीडी पाइपलाइन और वर्जन कंट्रोल के साथ एकीकरण करना आसान हो जाता है।
के प्रकार Selenium ढांचा
तीन प्राथमिक हैं फ्रेमवर्क के प्रकार पर बनाया गया Selenium वेबड्राइवर का उपयोग मैन्युअल टेस्ट केस को स्वचालित करने के लिए किया जाता है। प्रत्येक शैली डेवलपर के प्रयास, परीक्षक की भागीदारी और डेटा लचीलेपन के बीच एक अलग संतुलन बनाने पर केंद्रित है।
- डेटा संचालित फ्रेमवर्क
- कीवर्ड संचालित फ्रेमवर्क
- हाइब्रिड संचालित फ्रेमवर्क
अगले अनुभाग प्रत्येक फ्रेमवर्क को विस्तार से समझाते हैं, जिसकी शुरुआत सबसे सरल डेटा-संचालित दृष्टिकोण से होती है और यह सबसे लचीले हाइब्रिड मॉडल तक पहुँचती है।
डेटा संचालित फ्रेमवर्क Selenium
डेटा संचालित फ्रेमवर्क Selenium यह टेस्ट डेटा सेट को टेस्ट केस लॉजिक से अलग करने की एक विधि है। डेटा अलग हो जाने के बाद, आप टेस्ट कोड को छुए बिना किसी विशेष कार्यक्षमता के लिए इनपुट को संशोधित कर सकते हैं। इसका उपयोग आमतौर पर बाहरी स्रोतों जैसे कि से टेस्ट केस और सूट प्राप्त करने के लिए किया जाता है। एक्सेल.csv, .xml, या डेटाबेस टेबल।
एक्सेल फ़ाइलों को पढ़ने या लिखने के लिए, अपाचे प्रसिद्ध POI लाइब्रेरी प्रदान करता है। यह लाइब्रेरी दोनों कार्यों को संभाल सकती है। XLS और XLSX प्रारूप. एचएसएसएफ कार्यान्वयन पुरानी XLS फ़ाइलों को पढ़ता है, जबकि एक्सएसएसएफ यह कार्यान्वयन आधुनिक XLSX फ़ाइलों को संभालता है।
हमने अपने पिछले लेख में डेटा ड्रिवन टेस्टिंग के बारे में पहले ही चर्चा कर ली है। पिछले ट्यूटोरियल.
कीवर्ड संचालित फ्रेमवर्क Selenium
कीवर्ड संचालित फ्रेमवर्क Selenium यह एक ऐसी विधि है जो सामान्य कार्यों और निर्देशों के लिए कीवर्ड को अलग करके स्वचालन को गति प्रदान करती है। सभी ऑपरेशन और निर्देश एक बाहरी फ़ाइल में लिखे जाते हैं, आमतौर पर एक एक्सेल शीट में। परीक्षक बिना किसी संशोधन के उन कार्यात्मकताओं को निर्दिष्ट कर सकते हैं जिन्हें वे मान्य करना चाहते हैं। Java यह शैली उन टीमों के लिए आदर्श है जहां व्यावसायिक विश्लेषक या मैन्युअल QA परीक्षण परिभाषाओं में योगदान करते हैं।
संपूर्ण ढांचा इस प्रकार दिखता है:
जैसा कि आप देख सकते हैं, यह एक 5-चरणीय ढांचा है। आइए इसका चरणबद्ध तरीके से विस्तार से अध्ययन करें।
चरण 1)
- ड्राइवर स्क्रिप्ट Execute.java, Read फ़ंक्शन को कॉल करती है।Guru99ExcelFile.java.
- पढ़नाGuru99ExcelFile.java में POI कोड है जो एक्सेल से डेटा पढ़ता है।
चरण 2)
- पढ़नाGuru99ExcelFile.java फ़ाइल TestCase.xlsx फ़ाइल से डेटा पढ़ती है।
- शीट इस प्रकार दिखती है:
- एक्सेल फाइल में लिखे गए कीवर्ड के आधार पर, फ्रेमवर्क यूआई पर संबंधित कार्रवाई करता है।
- उदाहरण के लिए, "लॉगिन" लेबल वाले बटन पर क्लिक करने के लिए, एक्सेल शीट में "क्लिक" कीवर्ड संग्रहीत होता है। पृष्ठ पर मौजूद कई बटनों में से लॉगिन बटन को पहचानने के लिए, एक्सेल पंक्ति में ऑब्जेक्ट का नाम loginButton और ऑब्जेक्ट का प्रकार name के रूप में परिभाषित किया जाता है (छवि में हाइलाइट की गई पंक्ति देखें)। ऑब्जेक्ट का प्रकार XPath, CSS, क्लास या कोई अन्य लोकेटर रणनीति भी हो सकता है।
चरण 3) पढ़नाGuru99ExcelFile.java पार्स किए गए डेटा को ड्राइवर स्क्रिप्ट Execute.java को वापस भेजती है।
चरण 4)
- सभी यूआई वेब तत्वों के लिए, आप एक ऑब्जेक्ट रिपॉजिटरी बनाए रखते हैं जो XPath, नाम, CSS या क्लास नाम जैसे तत्व लोकेटर को संग्रहीत करता है।
- Execute.java (ड्राइवर स्क्रिप्ट) संपूर्ण ऑब्जेक्ट रिपॉजिटरी को पढ़ता है और उसे एक वेरिएबल में संग्रहीत करता है।
- एक सहायक ReadObject क्लास getObjectRepository नामक एक विधि प्रदान करती है जो रनटाइम पर रिपॉजिटरी को लोड करती है।
नोट: आप सोच रहे होंगे कि ऑब्जेक्ट रिपॉजिटरी की आवश्यकता क्यों है। इसका उत्तर है रखरखाव में आसानी। यदि btnlogin नाम का एक बटन 10 टेस्ट केस में उपयोग किया जाता है और डेवलपर उसका नाम बदलकर सबमिट कर देता है, तो आपको 10 फाइलों को संपादित करना होगा। ऑब्जेक्ट रिपॉजिटरी के साथ, आप केवल एक ही स्थान पर लोकेटर बदलते हैं।
चरण 5)
- ड्राइवर एक्सेल और ऑब्जेक्ट रिपॉजिटरी से डेटा को यूआई तक पहुंचाता है।Operaशन क्लास।
- UIOperaइस फ़ंक्शन में ऐसे फ़ंक्शन शामिल हैं जो CLICK और SETTEXT जैसे प्रत्येक कीवर्ड को एक विशिष्ट WebDriver क्रिया से मैप करते हैं।
- UIOperation एक है Java वह क्लास जो वेब तत्वों के साथ इंटरैक्ट करने के लिए वास्तविक कार्यान्वयन को धारण करती है।
संपूर्ण परियोजना संरचना इस प्रकार है:
आइए एक व्यावहारिक उदाहरण देखें:
परीक्षण परिदृश्य: हम 2 टेस्ट केस चला रहे हैं।
- टेस्ट केस 1:
- के लिए जाओ
https://demo.guru99.com/V4/ - उपयोगकर्ता आईडी दर्ज करें
- पास वर्ड दर्ज करें
- रीसेट पर क्लिक करें
- टेस्ट केस 2:
- के लिए जाओ
https://demo.guru99.com/V4/ - उपयोगकर्ता आईडी दर्ज करें
- पास वर्ड दर्ज करें
- लॉगिन पर क्लिक करें
ऑब्जेक्ट.प्रॉपर्टीज
url=https://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset
पढ़नाGuru99ExcelFile.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.जावा
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.जावा
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.जावा
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");
}
}
}
}
निष्पादन के बाद, आउटपुट इस प्रकार दिखाई देता है:
डाउनलोड Selenium इस ट्यूटोरियल में डेमो के लिए प्रोजेक्ट फ़ाइलें
हाइब्रिड संचालित फ्रेमवर्क
हाइब्रिड संचालित फ्रेमवर्क in Selenium यह कीवर्ड-ड्रिवन और डेटा-ड्रिवन दोनों फ्रेमवर्क की खूबियों को एक साथ लाता है। यह एक उपयोग में आसान मॉडल है जो मैनुअल टेस्टर्स को बिना किसी फ्रेमवर्क कोड को लिखे, केवल कीवर्ड, टेस्ट डेटा और ऑब्जेक्ट रिपॉजिटरी को एडिट करके टेस्ट केस बनाने की सुविधा देता है।
यहां, एक्सेल फाइलें प्रत्येक चरण के लिए कीवर्ड बनाए रखती हैं, और TestNGहै डेटा प्रदाता यह परीक्षण डेटा प्रदान करता है। यह विभाजन आपको क्रिया शब्दावली और इनपुट विविधताओं दोनों को स्वतंत्र रूप से स्केल करने की अनुमति देता है।
हमारे हाइब्रिड फ्रेमवर्क के लिए, कीवर्ड-आधारित संरचना में कुछ भी नहीं बदलता है: हम बस ExecuteTest.java को HybridExecuteTest.java से बदल देते हैं।
इस HybridExecuteTest फ़ाइल में संपूर्ण कीवर्ड-आधारित लॉजिक शामिल है, साथ ही TestNGडेटा प्रदाता तंत्र।
हाइब्रिड फ्रेमवर्क का संपूर्ण चित्रात्मक निरूपण इस प्रकार दिखता है:
हाइब्रिडएक्सिक्यूटटेस्ट.जावा
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;
}
}
डाउनलोड Selenium इस ट्यूटोरियल में डेमो के लिए प्रोजेक्ट फ़ाइलें












