Selenium फ्रेमवर्क: डेटा, कीवर्ड और हाइब्रिड संचालित
एचएमबी क्या है? Selenium रूपरेखा?
RSI Selenium स्वचालन फ्रेमवर्क एक कोड संरचना है जो कोड रखरखाव को आसान और कुशल बनाती है। फ़्रेमवर्क के बिना, उपयोगकर्ता "कोड" और "डेटा" को एक ही स्थान पर रख सकते हैं जो न तो पुन: प्रयोज्य है और न ही पढ़ने योग्य है। फ़्रेमवर्क कोड की पुन: प्रयोज्यता, उच्च पोर्टेबिलिटी, स्क्रिप्ट रखरखाव की कम लागत, बेहतर कोड पठनीयता आदि जैसे लाभकारी परिणाम उत्पन्न करते हैं।
के प्रकार Selenium ढांचा
मुख्यतः तीन हैं फ्रेमवर्क के प्रकार के द्वारा बनाई गई Selenium मैन्युअल परीक्षण मामलों को स्वचालित करने के लिए वेबड्राइवर
- डेटा संचालित फ्रेमवर्क
- कीवर्ड संचालित फ्रेमवर्क
- हाइब्रिड संचालित फ्रेमवर्क
डेटा संचालित फ्रेमवर्क Selenium
डेटा संचालित फ्रेमवर्क Selenium टेस्ट केस से डेटा सेट को अलग करने की एक विधि है। एक बार जब डेटा सेट टेस्ट केस से अलग हो जाते हैं, तो कोड को बदले बिना इसे किसी विशिष्ट कार्यक्षमता के लिए आसानी से संशोधित किया जा सकता है। इसका उपयोग बाहरी फ़ाइलों से टेस्ट केस और सूट लाने के लिए किया जाता है जैसे एक्सेल, .csv, .xml या कुछ डेटाबेस तालिकाएँ।
एक्सेल को पढ़ने या लिखने के लिए अपाचे एक बहुत प्रसिद्ध लाइब्रेरी POI प्रदान करता है। यह लाइब्रेरी पढ़ने और लिखने दोनों में सक्षम है XLS और XLSX एक्सेल फ़ाइल प्रारूप.
पढ़ने के लिए XLS फ़ाइलें, एक एचएसएसएफ कार्यान्वयन POI लाइब्रेरी द्वारा प्रदान किया गया है।
पढ़ने के लिए एक्सएलएसएक्स, एक्सएसएसएफ का कार्यान्वयन POI पुस्तकालय विकल्प होगा। आइए इन कार्यान्वयनों का विस्तार से अध्ययन करें।
हमने पहले ही डेटा संचालित परीक्षण के बारे में सीखा है पिछले ट्यूटोरियल
कीवर्ड संचालित फ्रेमवर्क Selenium
कीवर्ड संचालित फ्रेमवर्क Selenium यह एक ऐसी विधि है जिसका उपयोग स्वचालित परीक्षण को गति देने के लिए किया जाता है, जिसमें सामान्य कार्यों और निर्देशों के लिए कीवर्ड को अलग किया जाता है। निष्पादित किए जाने वाले सभी ऑपरेशन और निर्देश एक्सेल शीट जैसी किसी बाहरी फ़ाइल में लिखे जाते हैं। उपयोगकर्ता आसानी से उन कार्यक्षमताओं को नियंत्रित और निर्दिष्ट कर सकते हैं जिन्हें वे परीक्षण करना चाहते हैं।
संपूर्ण रूपरेखा इस प्रकार दिखती है
जैसा कि आप देख सकते हैं कि यह 5 चरणों वाला ढांचा है। आइए इसे विस्तार से चरणबद्ध तरीके से अध्ययन करें
चरण 1)
- ड्राइवर स्क्रिप्ट Execute.java ReadGuru99ExcelFile.java को कॉल करेगी
- ReadGuru99ExcelFile.java में Excel से डेटा पढ़ने के लिए POI स्क्रिप्ट है
चरण 2)
- ReadGuru99ExcelFile.java TestCase.xlsx से डेटा पढ़ेगा
- शीट कुछ इस प्रकार दिखती है-
- एक्सेल फ़ाइल में लिखे गए कीवर्ड के अनुसार, फ्रेमवर्क यूआई पर ऑपरेशन करेगा।
- उदाहरण के लिए, हमें 'लॉगिन' बटन पर क्लिक करना होगा। इसी तरह, हमारे एक्सेल में एक कीवर्ड 'क्लिक' होगा। अब AUT में एक पेज पर सैकड़ों बटन हो सकते हैं, लॉगिन बटन की पहचान करने के लिए, एक्सेल में हम ऑब्जेक्ट नाम को लॉगिनबटन के रूप में और ऑब्जेक्ट प्रकार को नाम के रूप में इनपुट करेंगे (ऊपर की छवि में हाइलाइट की गई पंक्ति देखें)। ऑब्जेक्ट प्रकार Xpath, नाम CSS या कोई अन्य मान हो सकता है
चरण 3) ReadGuru99ExcelFile.java इस डेटा को ड्राइवर स्क्रिप्ट Execute.java को भेजेगा
चरण 4)
- हमारे सभी UI वेब तत्वों के लिए, हमें एक ऑब्जेक्ट रिपोजिटरी बनाने की आवश्यकता है, जहां हम उनके तत्व लोकेटर (जैसे Xpath, नाम, CSS पथ, वर्ग नाम आदि) रखेंगे।
- Execute.java (हमारी ड्राइवर स्क्रिप्ट) संपूर्ण ऑब्जेक्ट रिपॉजिटरी को पढ़ेगी और उसे एक वेरिएबल में संग्रहीत करेगी
- इस ऑब्जेक्ट रिपोजिटरी को पढ़ने के लिए, हमें ReadObject क्लास की आवश्यकता है, जिसमें इसे पढ़ने के लिए getObjectRepository विधि हो।
नोट: आप सोच सकते हैं कि हमें ऑब्जेक्ट रिपॉजिटरी बनाने की क्या ज़रूरत है। इसका जवाब कोड रखरखाव में मदद करता है। उदाहरण के लिए, हम 10 अलग-अलग टेस्ट केस में नाम = btnlogin वाले बटन का इस्तेमाल कर रहे हैं। भविष्य में, डेवलपर btnlogin से नाम बदलकर सबमिट करने का फ़ैसला करता है। आपको सभी 10 टेस्ट केस में बदलाव करना होगा। ऑब्जेक्ट रिपॉजिटरी के मामले में, आप रिपॉजिटरी में सिर्फ़ एक बार बदलाव करेंगे।
चरण 5)
- ड्राइवर एक्सेल और ऑब्जेक्ट रिपॉजिटरी से डेटा को UI तक पहुंचाएगाOperaवर्ग
- UIOperation वर्ग में एक्सेल में उल्लिखित CLICK, SETTEXT आदि जैसे कीवर्ड के अनुरूप क्रियाएं करने के लिए फ़ंक्शन हैं
- 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
ReadGuru99ExcelFile.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 object of File class to open xlsx file File file = new File(filePath+"\\"+fileName); //Create an object of FileInputStream class to read excel file FileInputStream inputStream = new FileInputStream(file); Workbook guru99Workbook = null; //Find the file extension by spliting file name in substing and getting only extension name String fileExtensionName = fileName.substring(fileName.indexOf(".")); //Check condition if the file is xlsx file if(fileExtensionName.equals(".xlsx")){ //If it is xlsx file then create object of XSSFWorkbook class guru99Workbook = new XSSFWorkbook(inputStream); } //Check condition if the file is xls file else if(fileExtensionName.equals(".xls")){ //If it is xls file then create object of XSSFWorkbook class guru99Workbook = new HSSFWorkbook(inputStream); } //Read 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 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": //Perform click driver.findElement(this.getObject(p,objectName,objectType)).click(); break; case "SETTEXT": //Set text on control driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value); break; case "GOTOURL": //Get url of application driver.get(p.getProperty(value)); break; case "GETTEXT": //Get text of an element driver.findElement(this.getObject(p,objectName,objectType)).getText(); break; default: break; } } /** * Find element BY using object type and value * @param p * @param objectName * @param objectType * @return * @throws Exception */ private By getObject(Properties p,String objectName,String objectType) throws Exception{ //Find by xpath if(objectType.equalsIgnoreCase("XPATH")){ return By.xpath(p.getProperty(objectName)); } //find by class else if(objectType.equalsIgnoreCase("CLASSNAME")){ return By.className(p.getProperty(objectName)); } //find by name else if(objectType.equalsIgnoreCase("NAME")){ return By.name(p.getProperty(objectName)); } //Find by css else if(objectType.equalsIgnoreCase("CSS")){ return By.cssSelector(p.getProperty(objectName)); } //find by link else if(objectType.equalsIgnoreCase("LINK")){ return By.linkText(p.getProperty(objectName)); } //find by partial link 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 { // TODO Auto-generated method stub 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 number of rows in excel file int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum(); //Create a loop over all the rows of excel file to read it for (int i = 1; i < rowCount+1; i++) { //Loop over all the rows Row row = guru99Sheet.getRow(i); //Check if the first cell contain a value, if yes, That means it is the new testcase name if(row.getCell(0).toString().length()==0){ //Print testcase detail on console System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+ row.getCell(3).toString()+"----"+ row.getCell(4).toString()); //Call perform function to perform operation on UI operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(), row.getCell(3).toString(), row.getCell(4).toString()); } else{ //Print the new testcase name when it started System.out.println("New Testcase->"+row.getCell(0).toString() +" Started"); } } } }
निष्पादन के बाद, आउटपुट इस तरह दिखेगा –
डाउनलोड Selenium इस ट्यूटोरियल में डेमो के लिए प्रोजेक्ट फ़ाइलें
हाइब्रिड संचालित फ्रेमवर्क
हाइब्रिड संचालित फ्रेमवर्क in Selenium यह एक ऐसी अवधारणा है जहाँ हम कीवर्ड संचालित फ्रेमवर्क के साथ-साथ डेटा संचालित फ्रेमवर्क दोनों का लाभ उठा रहे हैं। यह उपयोग में आसान फ्रेमवर्क है जो मैन्युअल परीक्षकों को फ्रेमवर्क में कोडिंग के बिना केवल कीवर्ड, परीक्षण डेटा और ऑब्जेक्ट रिपोजिटरी को देखकर परीक्षण मामले बनाने की अनुमति देता है।
यहां कीवर्ड के लिए, हम परीक्षण मामलों को बनाए रखने के लिए एक्सेल फाइलों का उपयोग करेंगे, और परीक्षण डेटा के लिए, हम डेटा, प्रदाता का उपयोग कर सकते हैं टेस्टिंग ढांचा।
यहां हमारे हाइब्रिड फ्रेमवर्क में, हमें कीवर्ड संचालित फ्रेमवर्क में कुछ भी बदलने की जरूरत नहीं है, यहां हमें केवल ExecuteTest.java फ़ाइल को HybridExecuteTest.java फ़ाइल से बदलने की आवश्यकता है।
इस HybridExecuteTest फ़ाइल में डेटा प्रदाता अवधारणा के साथ संचालित कीवर्ड के लिए सभी कोड हैं।
हाइब्रिड फ्रेमवर्क का पूरा चित्रात्मक प्रतिनिधित्व इस प्रकार दिखाई देगा
हाइब्रिडएक्सिक्यूटटेस्ट.जावा
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 { // TODO Auto-generated method stub if(testcaseName!=null&&testcaseName.length()!=0){ webdriver=new FirefoxDriver(); } ReadObject object = new ReadObject(); Properties allObjects = object.getObjectRepository(); UIOperation operation = new UIOperation(webdriver); //Call perform function to perform operation on UI operation.perform(allObjects, keyword, objectName, objectType, value); } @DataProvider(name="hybridData") public Object[][] getDataFromDataprovider() throws IOException{ Object[][] object = null; ReadGuru99ExcelFile file = new ReadGuru99ExcelFile(); //Read keyword sheet Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework"); //Find number of rows in excel file int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum(); object = new Object[rowCount][5]; for (int i = 0; i < rowCount; i++) { //Loop over all the rows Row row = guru99Sheet.getRow(i+1); //Create a loop to print cell values in a row for (int j = 0; j < row.getLastCellNum(); j++) { //Print excel data in console object[i][j] = row.getCell(j).toString(); } } System.out.println(""); return object; } }
सारांश
- हम तीन प्रकार के परीक्षण ढांचे बना सकते हैं Selenium वेबड्राइवर.
- A Selenium स्वचालन ढांचा जिसे डेटा संचालित, कीवर्ड संचालित और हाइब्रिड फ्रेमवर्क में वर्गीकृत किया जा सकता है।
- हम डेटा-संचालित ढांचे का उपयोग करके इसे प्राप्त कर सकते हैं TestNG'का डेटा प्रदाता है।
- कीवर्ड संचालित फ्रेमवर्क में, कीवर्ड कुछ बाहरी फाइलों में लिखे जाते हैं जैसे एक्सेल फाइल और जावा कोड इस फाइल को कॉल करेगा और परीक्षण मामलों को निष्पादित करेगा।
- हाइब्रिड फ्रेमवर्क कीवर्ड संचालित और डेटा संचालित फ्रेमवर्क का मिश्रण है।
डाउनलोड Selenium इस ट्यूटोरियल में डेमो के लिए प्रोजेक्ट फ़ाइलें