बिल्डिंग ए डेटा ड्रिवेन, कीवर्ड ड्रिवेन एंड हाइब्रिड सेलेनियम फ्रेमवर्क



यह ब्लॉग बताता है कि सेलेनियम फ्रेमवर्क क्या है, इसके फायदे और सेलेनियम में डेटा ड्रिवन, कीवर्ड ड्रिवेन और हाइब्रिड फ्रेमवर्क को कैसे लागू किया जाए।

पिछला वाला इस श्रृंखला में आपको सेलेनियम परीक्षण में बुनियादी अवधारणाओं के लिए जोखिम दिया गया है।हालाँकि, इस ब्लॉग में, मैं आपको बताऊंगा कि अपने कोड संरचना को अनुकूलित करने के लिए सेलेनियम फ्रेमवर्क का उपयोग कैसे करें और यह आपको बनने के करीब ले जाएगा

एक सेलेनियम ढांचा क्या है?

सेलेनियम फ्रेमवर्क कोड रखरखाव को सरल बनाने के लिए एक कोड संरचना है, और कोड पठनीयता बेहतर है। एक रूपरेखा में पूरे कोड को कोड के छोटे टुकड़ों में तोड़ना शामिल है, जो एक विशेष कार्यक्षमता का परीक्षण करता है।





कोड को इस तरह संरचित किया जाता है कि, 'डेटा सेट' को वास्तविक 'परीक्षण मामले' से अलग किया जाता है जो वेब एप्लिकेशन की कार्यक्षमता का परीक्षण करेगा। इसे एक तरह से संरचित भी किया जा सकता है, जिसमें परीक्षण मामलों को निष्पादित करने की आवश्यकता होती है (बाहरी .csv की तरह) एक बाहरी अनुप्रयोग से (इनवोक)।

वहाँ कई रूपरेखाएँ हैं, लेकिन 3 आमतौर पर इस्तेमाल किए जाने वाले सेलेनियम फ्रेमवर्क हैं:



इन रूपरेखाओं पर इस ब्लॉग में एक डेमो के साथ चर्चा की जाएगी। लेकिन आगे जाने से पहले, मैं आपको बताता हूं कि एक सेलेनियम फ्रेमवर्क की आवश्यकता क्यों है, और इनका उपयोग करने से आपको क्या लाभ होगा।

जावा में मैट्रिक्स गुणन कार्यक्रम

हमें सेलेनियम ढांचे की आवश्यकता क्यों है?

एक रूपरेखा के बिना, एक परीक्षण मामला होगा जिसमें संपूर्ण परीक्षण कार्यक्षमता शामिल होगी। डरावना हिस्सा है, इस एकल परीक्षण मामले में कोड की एक लाख लाइनों तक बढ़ने की क्षमता है। तो यह बहुत स्पष्ट है कि इतना बड़ा एक परीक्षण मामला पढ़ने के लिए कठिन होगा। यहां तक ​​कि अगर आप बाद में किसी भी कार्यक्षमता को संशोधित करना चाहते हैं, तो आपके पास कोड को संशोधित करने में कठिन समय होगा।

एक रूपरेखा के कार्यान्वयन के बाद से, छोटे लेकिन कई कोड टुकड़ों में परिणाम होगा, विभिन्न लाभ हैं।



सेलेनियम ढांचे के लाभ

  • बढ़ा हुआ कोड पुनः उपयोग
  • बेहतर कोड पठनीयता
  • उच्च पोर्टेबिलिटी
  • स्क्रिप्ट कम हो गईरखरखाव

अब जब आप फ्रेमवर्क की मूल बातें जानते हैं, तो मुझे उनमें से प्रत्येक के बारे में विस्तार से बताएं।

डेटा संचालित फ्रेमवर्क

सेलेनियम में एक डेटा ड्रिवेन फ्रेमवर्क 'डेटा सेट' को वास्तविक 'टेस्ट केस' (कोड) से अलग करने की तकनीक है। यह रूपरेखा पूरी तरह से इनपुट परीक्षण डेटा पर निर्भर करती है। परीक्षण डेटा बाहरी स्रोतों जैसे कि एक्सेल फ़ाइल, .CSV फ़ाइल या किसी डेटाबेस से प्राप्त किया जाता है।

डेटा संचालित फ्रेमवर्क - सेलेनियम फ्रेमवर्क - एडुरका

चूंकि परीक्षण मामले को डेटा सेट से अलग किया जाता है, इसलिए हम आपके कोड में थोक परिवर्तन किए बिना किसी विशेष कार्यक्षमता के परीक्षण मामले को आसानी से संशोधित कर सकते हैं। उदाहरण के लिए, यदि आप लॉगिन कार्यक्षमता के लिए कोड को संशोधित करना चाहते हैं, तो आप केवल उसी कोड में किसी अन्य निर्भर भाग को संशोधित करने के बजाय इसे संशोधित कर सकते हैं।

इसके अलावा, आप यह भी आसानी से नियंत्रित कर सकते हैं कि कितने डेटा की जांच करने की आवश्यकता है। आप एक्सेल फ़ाइल (या अन्य स्रोतों) में अधिक उपयोगकर्ता नाम और पासवर्ड फ़ील्ड जोड़कर आसानी से परीक्षण मापदंडों की संख्या बढ़ा सकते हैं।

उदाहरण के लिए, अगर मुझे किसी वेब पेज पर लॉगिन की जांच करनी है, तो मैं एक्सेल फाइल में यूजरनेम और पासवर्ड क्रेडेंशियल्स का सेट रख सकता हूं और एक अलग जावा क्लास फाइल में ब्राउजर पर ऑटोमेशन करने के लिए क्रेडेंशियल्स को कोड में पास कर सकता हूं।

सेलेनियम वेबड्राइवर के साथ अपाचे POI का उपयोग करना

WebDriver सीधे एक्सेल फाइलों को पढ़ने का समर्थन नहीं करता है। इसलिए हम उपयोग करते हैं अपाचे POI किसी भी Microsoft कार्यालय दस्तावेज़ को पढ़ने / लिखने के लिए। आप अपाचे POI (JAR फ़ाइलों का सेट) डाउनलोड कर सकते हैं यहाँ । अपनी आवश्यकता के अनुसार ज़िप फ़ाइल या टार फ़ाइल डाउनलोड करें और उन्हें सेलेनियम जार के सेट के साथ रखें।

मुख्य कोड और डेटा सेट के बीच समन्वय द्वारा ध्यान रखा जाएगा TestNG डेटा प्रदाता, जो एक पुस्तकालय है जो अपाचे POI JAR फ़ाइलों के एक भाग के रूप में आता है। डेमो उद्देश्य के लिए, मैंने एक एक्सेल फाइल बनाई है जिसका नाम है “लॉगिन क्रिडेंशियल” जिसमें उपयोगकर्ता नाम और पासवर्ड विभिन्न कॉलम में संग्रहीत किए गए हैं।

परीक्षण के मामले को समझने के लिए नीचे दिए गए कोड को देखें। यह उड़ान बुकिंग एप्लिकेशन की लॉगिन कार्यक्षमता का परीक्षण करने के लिए एक सरल कोड है।

पैकेज DataDriven आयात org.openqa.selenium.By आयात org.openqa.selenium.chrome.ChromeDriver आयात org.testng.Assert आयात org.testng.annot..AfterMethod आयात org.testng.annotations.DataProvider आयात org.testnotations। नोट सार्वजनिक वर्ग DDTExcel {ChromeDriver ड्राइवर @Test (dataProvider = 'testdata') सार्वजनिक शून्य डेमोप्रोजेक्ट (स्ट्रिंग उपयोगकर्ता नाम, स्ट्रिंग पासवर्ड) व्यवधान उत्पन्न करता है {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe) नया ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName'))। sendKeys (उपयोगकर्ता नाम) Driver.findElement () नाम (पासवर्ड) ))। SendKeys (पासवर्ड) ड्राइवर .findElement (By.name ('लॉगिन'))। क्लिक करें () Thread.sleep (5000) Assert.assertTrue (driver.getTitle) () मेल खाता है ('एक उड़ान खोजें: पारा पर्यटन: '),' अमान्य क्रेडेंशियल्स ') System.out.println (' लॉगिन सफल ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (नाम = testdata') सार्वजनिक वस्तु [] [] TestDaa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int पंक्तियाँ = config.getRowCount (0) ऑब्जेक्ट [] [] क्रेडेंशियल्स = नई वस्तु [पंक्तियाँ] [2] (int i = 0i)

यदि आपने ऊपर से देखा, तो हमारे पास 'TestDataFeed ()' नामक एक विधि है। इस विधि में, मैंने 'ReadExcelFile' नामक एक अन्य वर्ग का ऑब्जेक्ट उदाहरण बनाया है। इस ऑब्जेक्ट को इंस्टेंट करते हुए, मैंने अपनी एक्सेल फाइल का पथ फीड किया है जिसमें डेटा है। मैंने आगे एक्सेल वर्कबुक से पाठ को पुनः प्राप्त करने के लिए लूप के लिए परिभाषित किया है।

लेकिन, किसी दिए गए शीट नंबर, कॉलम नंबर और पंक्ति संख्या से डेटा पढ़ने के लिए, कॉल 'ReadExcelFile' वर्ग के लिए की जाती है। मेरे 'ReadExcelFile' का कोड नीचे है।

पैकेज DataDriven import java.io.ile आयात java.io.ile.FileInputStream इंपोर्ट org.apache.poi.xssf.usermodel.XSSFSheet इंपोर्ट org.apache.poi.xss.usermodel.XSSFWorkbook पब्लिक क्लास ReadExcelFile {XSSFWorkbookWebbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb&hl=hi&hl=hi पर क्लिक करें excelPath) {try {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} कैच (एक्जिट e) {System.out.println (e.getMessage ())}}}} public) स्ट्रिंग getData (int sheetnumber, int row, int column) {sheet = wb.getSheetAt (sheetnumber) स्ट्रिंग डेटा = sheet.getRow (पंक्ति) .getCell (स्तंभ) .getString.ellValue () रिटर्न डेटा} सार्वजनिक int getRowCount (int sheetIndex) {। int row = wb.getSheetAt (sheetIndex) .getLastRowNum () पंक्ति = पंक्ति + 1 वापसी पंक्ति}}

पहले उन पुस्तकालयों पर ध्यान दें जिन्हें मैंने आयात किया है। मैंने आयात किया है अपाचे POI XSSF लाइब्रेरीज़ जो फ़ाइलों को एक्सेल करने के लिए डेटा को पढ़ने / लिखने के लिए उपयोग की जाती हैं। यहां, मैंने मानों को पास करने के लिए एक कंस्ट्रक्टर (उसी विधि का ऑब्जेक्ट) बनाया है: शीट नंबर, पंक्ति संख्या और कॉलम नंबर। इस रूपरेखा को बेहतर ढंग से समझने के लिए, मैं आपसे नीचे दिए गए वीडियो के माध्यम से जाने का अनुरोध करता हूं, जहां मैंने इसे संरचित तरीके से समझाया है।

सेलेनियम वेबड्राइवर में डेटा ड्रिवेन फ्रेमवर्क | सेलेनियम ट्यूटोरियल

अब फ्रेमवर्क पर चलते हैं, यानी कीवर्ड ड्रिवेन फ्रेमवर्क।

कीवर्ड संचालित फ्रेमवर्क

कीवर्ड ड्रिवेन फ्रेमवर्क एक ऐसी तकनीक है जिसमें किए जाने वाले सभी ऑपरेशन और निर्देश वास्तविक परीक्षण मामले से अलग-अलग लिखे जाते हैं। डेटा ड्रिवेन फ्रेमवर्क के साथ इसकी समानता यह है कि, किए जाने वाले संचालन को फिर से एक्सेल शीट जैसी बाहरी फ़ाइल में संग्रहीत किया जाता है।

जिन ऑपरेशनों के बारे में मैं बात कर रहा हूं, वे कुछ और नहीं बल्कि एक परीक्षण मामले के हिस्से के रूप में निष्पादित करने की आवश्यकता है। कीवर्ड ड्रिवेन फ्रेमवर्क के साथ लाभ यह है कि आप आसानी से उन कार्यक्षमता को नियंत्रित कर सकते हैं जिन्हें आप परीक्षण करना चाहते हैं। आप उन विधियों को निर्दिष्ट कर सकते हैं जो एक्सेल फ़ाइल में एप्लिकेशन की कार्यक्षमता का परीक्षण करती हैं। इस प्रकार, केवल उन तरीकों के नाम जो एक्सेल में निर्दिष्ट हैं, उनका परीक्षण किया जाएगा।

उदाहरण के लिए, वेब एप्लिकेशन में लॉग इन करने के लिए, हम मुख्य परीक्षण के मामले में कई तरीके लिख सकते हैं, जिसमें प्रत्येक परीक्षा का मामला कुछ कार्यक्षमता का परीक्षण करेगा। ब्राउज़र ड्राइवर को तुरंत करने के लिए एक विधि हो सकती है, उपयोगकर्ता नाम और पासवर्ड फ़ील्ड ढूंढने के लिए, तरीके हो सकते हैं, एक वेब पेज पर नेविगेट करने के लिए एक और तरीका हो सकता है, आदि।

फ्रेमवर्क कैसा दिखता है, यह समझने के लिए नीचे दिए गए कोड पर एक नज़र डालें। नीचे दी गई कोड में जिन पंक्तियों पर टिप्पणी की गई है, यदि आप समझ में नहीं आते हैं तो स्पष्टीकरण के रूप में कार्य करते हैं।

पैकेज KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selen.ium पर जाएं। सार्वजनिक श्रेणी की कार्रवाइयाँ {सार्वजनिक स्थैतिक वेबड्राइवर ड्राइवर सार्वजनिक स्थैतिक शून्य ओपनब्रोसर () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedverver.exe') ड्राइवर = नया ChromeDriver ()} सार्वजनिक स्थैतिक शून्य नेविगेट () {ड्राइवर .manage ()। टाइमआउट्स ()। implicitlyWait (10, TimeUnit.SECONDS) Driver.get ('http://newtours.demoaut.com')} सार्वजनिक स्थैतिक शून्य input_Username () {driver.findElement (By.name ('' ') userName '))। sendKeys (' पारा ')} public static void input_Password () {driver.findElement (By.name (' पासवर्ड '))। sendKeys (' पारा '): public static void click_Login () {driver.findElement (By.name ('लॉगिन'))। पर क्लिक करें ()} @ सार्वजनिक स्थैतिक शून्य सत्यापित करें_लॉगी () {स्ट्रिंग पेजटाइट = ड्राइवर.गेटटाइटल () Assert.assertEquals (पेजटेटल), एक उड़ान खोजें: पारा टूर : ')} सार्वजनिक स्थैतिक शून्य क्लोज़र () {ड्राइवर.क्विट ()}}

जैसा कि आप देख सकते हैं, जिन कार्यात्मकताओं को जांचने की आवश्यकता है वे अलग-अलग तरीकों से मौजूद हैं जिन्हें कॉल करने की प्रतीक्षा की जा रही है। अब, इन विधियों को एक्सेल फ़ाइल में विधि के नाम की उपस्थिति के आधार पर, दूसरे वर्ग से बुलाया जाएगा। और इसी तरह, एक्सेल फ़ाइल को पढ़ने के लिए, और परिणाम वापस भेजने के लिए, मैंने एक और कक्षा लिखी है। दोनों को नीचे प्रदर्शित किया गया है।

जावा में int के लिए डबल परिवर्तित

विधियों को लागू करने वाली वर्ग फ़ाइल, यह है।

package KeywordDriven public class DriverScript {public static void main (String [] args) थ्रेड अपवाद {// Excel फ़ाइल के पथ की घोषणा एक्सेल फ़ाइल String sPath = 'C: UsersSardhanworkworkspace.elenium Frameworks DemodataEngine.xlsx' // के साथ। हम एक्सेल पथ और शीटनाम को एक्सेल फाइल से जोड़ने के लिए तर्क के रूप में पारित कर रहे हैं ReadExcelData.setExcelFile (sPath, 'Sheet1') // एक्सेल पंक्ति और कॉलम के लिए हार्ड कोडित मान का उपयोग किया जाता है। अब के लिए हार्ड कोड का उपयोग किया जाता है। अब के लिए कॉलम // बाद के अध्यायों में हम इन हार्ड कोडेड वैल्यूज़ को वैरिएबल्स के साथ बदल देंगे // यह कॉलम 3 (एक्शन कीवर्ड) पंक्ति के मानों को पढ़ने के लिए पंक्ति है (int iRow = 1iRow)<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

और एक्सेल मान पढ़ने वाली क्लास फाइल यही है।

पैकेज KeywordDriven import java.io.ile.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet इंपोर्ट org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.Xs.fc XSSFSheet ExcelWSheet निजी स्थिर XSSFWorkbook ExcelWBook निजी स्थिर XSSFCell सेल // यह विधि फ़ाइल पथ को सेट करने के लिए है और Excel फ़ाइल को खोलने के लिए // पास Excel पथ और पत्रक नाम के रूप में तर्क इस विधि के लिए सार्वजनिक शून्य सेट करेंExExpressFile (स्ट्रिंग पथ, स्ट्रिंग SheetName) फेंकता है अपवाद {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // यह विधि एक्सेल सेल // से परीक्षण डेटा पढ़ने के लिए है। इसमें हम पैरामीटर / तर्क पारित कर रहे हैं। के रूप में पंक्ति संख्या और कर्नल नंबर सार्वजनिक स्थिर स्ट्रिंग getCellData (int RowNum, int ColNum) अपवाद {सेल = ExcelWSheet.getRow (RowNum) .getCell (ColNum) स्ट्रिंग Data = Cell.getStringCellValue () रिटर्न CellData} फेंकता है।

अब, इस सेलेनियम फ्रेमवर्क ब्लॉग के अंतिम भाग पर चलते हैं, जहाँ मैं आपको दिखाऊँगा कि हाइब्रिड फ्रेमवर्क कैसे बनाया जाता है।

हाइब्रिड ढांचा

हाइब्रिड फ्रेमवर्क एक ऐसी तकनीक है जिसमें हम डेटा ड्रिवेन और कीवर्ड ड्रिवेन सेलेनियम फ्रेमवर्क (एस) दोनों का सबसे अच्छा उपयोग कर सकते हैं। इस ब्लॉग में ऊपर दिखाए गए उदाहरणों का उपयोग करते हुए, हम एक्सेल फ़ाइल (कीवर्ड संचालित दृष्टिकोण) में निष्पादित करने के तरीके और इन विधि नामों को पारित करके हाइब्रिड फ्रेमवर्क का निर्माण कर सकते हैं जावा परावर्तन कक्षा (डेटा संचालित दृष्टिकोण) एक बनाने के बजाय यदि नहीं तो 'DriverScript' वर्ग में लूप।

नीचे दिए गए कोड स्निपेट में संशोधित 'DriverScript' वर्ग पर एक नज़र डालें।यहां, एकाधिक आई / एल्स लूप का उपयोग करने के बजाय, डेटा चालित दृष्टिकोण का उपयोग एक्सेल फाइल से विधि के नाम को पढ़ने के लिए किया जाता है।

पैकेज HybridFramework आयात java.lang.reflect.Method सार्वजनिक वर्ग DriverScriptJava {// यह एक क्लास ऑब्जेक्ट है, जिसे 'पब्लिक स्टेटिक' // के रूप में घोषित किया गया है, ताकि इसे मुख्य [] विधि के दायरे से बाहर इस्तेमाल किया जा सके। स्ट्रिंग sActions // यह परावर्तन वर्ग वस्तु है, जिसे 'सार्वजनिक स्थैतिक' के रूप में घोषित किया गया है। ताकि इसे मुख्य [] विधि सार्वजनिक स्थैतिक विधि विधि के दायरे के बाहर इस्तेमाल किया जा सके [] सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) अपवाद {// एक्सेल फाइल के पथ की घोषणा एक्सेल फाइल स्ट्रिंग के नाम के साथ sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // यहाँ हम एक्सेल पथ और SheetName को Excel फ़ाइल से जोड़ने के लिए पास कर रहे हैं // यह विधि पहले बनाया गया था ReadExcelData.setExcelFile (sPath, 'Sheet1') // एक्सेल पंक्ति और स्तंभों के लिए हार्ड कोडेड मानों का उपयोग किया जाता है। अब बाद में, हम इन हार्ड कोडित मूल्य का अधिक कुशलतापूर्वक उपयोग करेंगे // यह पढ़ने के लिए लूप है कॉलम (एक्शन कीवर्ड) पंक्ति के मान पंक्ति // इसका मतलब है कि यह लूप टेस्ट केस के लिए उल्लिखित सभी चरणों को टेस्ट स्टेप्स शीट में लागू करेगा (int iRow = 1 aiow)<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

डेटा ड्रिवेन, कीवर्ड ड्रिवेन और हाइब्रिड ड्रिवेन फ्रेमवर्क की इस अवधारणा को बेहतर ढंग से समझने के लिए, मैं आपसे नीचे दिए गए वीडियो को देखने का अनुरोध करता हूं।

जावा का उपयोग कर सेलेनियम फ्रेमवर्क | सेलेनियम ट्यूटोरियल | सेलेनियम प्रशिक्षण ऑनलाइन

मुझे उम्मीद है कि यह ब्लॉग आपके लिए उपयोगी था और आपने एक स्पष्ट समझ दी कि सेलेनियम फ्रेमवर्क क्या है, यह कैसे फायदेमंद है और इन 3 सेलेनियम फ्रेमवर्क का उपयोग करके अपने कोड संरचना का निर्माण कैसे करें। इस श्रृंखला में और अधिक ब्लॉगों के लिए बने रहें।

यदि आप सेलेनियम सीखना चाहते हैं और परीक्षण डोमेन में अपना कैरियर बनाना चाहते हैं, तो हमारे इंटरैक्टिव, लाइव-ऑनलाइन देखें यहाँ, जो आपके सीखने की अवधि में मार्गदर्शन करने के लिए 24 * 7 समर्थन के साथ आता है। 'सेलेनियम फ्रेमवर्क' से संबंधित अवधारणाओं में एडुर्का के पाठ्यक्रम में एक गहन कवरेज है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया टिप्पणी अनुभाग में इसका उल्लेख करें और हम आपके पास वापस आ जाएंगे।