specflow selenium webdriver end end example
स्पेकट्लो और सेलेनियम वेबड्राइवर का उपयोग करने का अंतिम छोर
इस में नि: शुल्क स्पैनिश प्रशिक्षण श्रृंखला , सेवा मेरे स्पेकफ्लो पर संक्षिप्त परिचय हमारे पिछले ट्यूटोरियल में दिया गया था।
इस लेख में, हम Specflow आधारित BDD विशिष्टताओं का उपयोग करने के लिए एक उदाहरण के अंत में देखेंगे और सेलेनियम वेबड्राइवर के माध्यम से परीक्षणों को निष्पादित किया जाएगा।
परीक्षण किसी अनुप्रयोग की लॉगिन कार्यक्षमता का परीक्षण करने के रूप में सरल हो सकता है। यह सिर्फ इतना है कि, हम स्पेकफ्लो का उपयोग करते हुए उन परीक्षणों का वर्णन करेंगे और चरण कार्यान्वयन सेलेनियम चालक और कमांड और एनयूनिट को जोरदार ढांचे के रूप में उपयोग करेंगे।
हम NUnit आधारित Specflow धावक (Specrun के विपरीत जो खुला स्रोत नहीं है और मुक्त संस्करण में एक यादृच्छिक विलंब का परिचय देता है) का उपयोग करेगा।
आप क्या सीखेंगे:
वीडियो ट्यूटोरियल: स्पेकफ्लो और सेलेनियम
विडियो देखें स्पेकुलेट और सेलेनियम पर:
एक पासवर्ड के रूप में एक नेटवर्क सुरक्षा कुंजी है
आएँ शुरू करें।
आरंभ करने के लिए, विज़ुअल स्टूडियो में एक यूनिट टेस्ट प्रोजेक्ट बनाएं और निम्नलिखित पूर्व-आवश्यकताएँ स्थापित करें:
# 1) एक इकाई परीक्षण परियोजना बनाएं
Nunit और Specflow के लिए Nuget पैकेज स्थापित करें।
Install-Package Specflow.NUnit
# 2) क्रोम ब्राउजर के लिए सेलेनियम की वेबड्राइवर स्थापित करें।
इसे निगेट पैकेज मैनेजर कंसोल के माध्यम से भी नीचे कमांड के माध्यम से स्थापित किया जा सकता है।
Install-Package Selenium.WebDriver.ChromeDriver
# 3) ExpectedCondition वेट्स जोड़ने के लिए सेलेनियम वेबड्राइवर लाइब्रेरी और सेलेनियम वेट हेल्पर्स स्थापित करें।
Install-Package Selenium.WebDriver Install-Package DotNetSeleniumExtras.WaitHelpers
# 4) अब ऑटो-निर्मित प्रोजेक्ट से test.cs फ़ाइल को हटा दें।
हम यह कदम किसी भी भ्रम से बचने के लिए कर रहे हैं क्योंकि हम फीचरफ्लो और स्टेप डेफिनिशन फाइल के लिए स्पेकफ्लो का उपयोग करेंगे।
# 5) फीचर और स्टेप डेफिनिशन फाइल को स्टोर करने के लिए फीचर्स और स्टेप डेफिनेशन के लिए फोल्डर बनाएं।
यह एक अनिवार्य कदम नहीं है, लेकिन अलग-अलग फ़ोल्डरों में सुविधाओं और कदम कार्यान्वयन को व्यवस्थित करने के लिए उपयोगी है।
# 6) ऊपर दिए गए चरणों के अंत में, समाधान संरचना और package.config नीचे दिखाए गए अनुसार दिखना चाहिए।
फ़ीचर और चरण कार्यान्वयन
अब फीचर फाइल और वास्तविक स्टेप कार्यान्वयन के साथ शुरुआत करते हैं।
फीचर के बारे में - नमूना सुविधा Youtube वेबसाइट की खोज की कार्यक्षमता का परीक्षण / सत्यापन करने के लिए होगी। हम एक कीवर्ड की खोज करेंगे और यह सुनिश्चित करेंगे कि उपयोगकर्ता खोज परिणाम पृष्ठ पर पुनः निर्देशित हो गया।
एक नई सुविधा फ़ाइल जोड़ें और इसे नाम दें YoutubeSearchFeature.feature
नीचे दिखाए गए अनुसार एक खोज कार्यक्षमता परिदृश्य और सुविधा विवरण जोड़ें:
Feature: YoutubeSearchFeature In order to test search functionality on youtube As a developer I want to ensure functionality is working end to end @mytag Scenario: Youtube should search for the given keyword and should navigate to search results page Given I have navigated to youtube website And I have entered India as search keyword When I press the search button Then I should be navigate to search results page
उपरोक्त परिदृश्य से यह उम्मीद है:
- Youtube वेबसाइट पर नेविगेट करें: इसके लिए सेलेनियम की तरह एक वेब स्वचालन ढांचे की आवश्यकता होगी, जो एक ब्राउज़र पर वेबपेज पर नेविगेट करने के लिए एक वेबड्राइवर का उपयोग करेगा।
- एक कीवर्ड के लिए खोजें: इस कदम में कीवर्ड में कुंजी-क्रम के लिए उपयुक्त इनपुट तत्वों और बटनों की तलाश होगी और क्रमशः खोज को निष्पादित किया जाएगा।
- यह सुनिश्चित करें कि खोज परिणाम प्रदर्शित हों और उपयोगकर्ता परिणाम पृष्ठ पर हो: यदि उपयोगकर्ता सही पृष्ठ पर उतरता है, तो इस चरण में पुष्टि के आस-पास शामिल होंगे।
अब प्रत्येक चरण के चरण कार्यान्वयन को देखते हैं।
इससे पहले, आइए समझते हैं कि हम मौजूदा स्पेकफ्लो परिभाषा में सेलेनियम लॉजिक / कोड को कैसे एकीकृत करेंगे।
सेलेनियम या कोई अन्य उपकरण (या यूनिट परीक्षण स्टब्स / मोक्स / ड्राइवर आदि) अनिवार्य रूप से स्टेप एक्ज़ेक्यूशन का एक मध्यवर्ती हिस्सा है, लेकिन समझने वाली महत्वपूर्ण बात यह है कि इन दोनों फ्रेमवर्क को एकीकृत करने का तरीका है।
Specflow उपयोगकर्ता को परीक्षण विनिर्देश लिखने में सक्षम बनाता है। यह उस उपकरण को निर्देशित नहीं करता है जिसका उपयोग किया जाना चाहिए। इसलिए परीक्षण डेवलपर उतने ही परीक्षण उपकरण चुनने के लिए स्वतंत्र है जितना वह उपयोग किए जाने वाले मामले पर निर्भर करना चाहता है।
इस परिदृश्य में सेलेनियम का उपयोग करने के लिए, हमें निम्नलिखित की आवश्यकता है:
- WebDriver का एक उदाहरण (हम सरलता के लिए ChromeDriver का उपयोग करेंगे), जो उपयोगकर्ता को ड्राइवर कार्यान्वयन के अनुसार ब्राउज़र का उपयोग करके वास्तव में वेबपृष्ठ पर नेविगेट करने में सक्षम करेगा।
- कुछ WebElement घोषणाएं (और केवल चरण कार्यान्वयन के भाग के रूप में की जा सकती हैं) जो उपयोगकर्ता के साथ बातचीत करने और इनपुट पास करने और कार्रवाई करने आदि के लिए आवश्यक हैं।
- खिड़की के शीर्षक, यूआरएल, आदि पर कुछ दावे जो चालक के उदाहरण पर निष्पादित किए जा सकते हैं।
हम चरण कार्यान्वयन फ़ाइल में ChromeWebdriver का एक उदाहरण बना रहे हैं।
इसलिए, चरण परिभाषा फ़ाइल बनाएँ। जैसा कि हमने पिछले लेख में देखा था, स्पेकफ्लो स्टेप परिभाषाओं को ऑटो-जेनरेट करने के लिए एक तंत्र प्रदान करता है (जो बाद में आवश्यकता के अनुसार अनुकूलित / संशोधित किया जा सकता है)।
- फ़ीचर फ़ाइल पर जाएँ, राइट-क्लिक करें और 'स्टेप जनरेट परिभाषाएँ' चुनें।
- StepDefinitions फ़ोल्डर में एक नई फ़ाइल बनाएं जैसा कि हमने पहले बनाया था और फ़ाइल को YoutubeSearchFeatureSteps.cs नाम दिया था
- सुनिश्चित करें कि परिदृश्य के सभी चरण उचित रूप से चरण परिभाषाओं के लिए बाध्य हैं।
टिप - ऑटो-जेनरेट की गई चरण परिभाषाएँ संशोधित करना:
अब यदि आप ध्यान से देखें, तो वह चरण परिभाषा जो हमारे खोज कीवर्ड चरण के लिए उत्पन्न हुई थी, यानी 'मैंने खोज कीवर्ड के रूप में भारत में प्रवेश किया है', ऑटो-जनरेट किए गए कोड को खोज कीवर्ड को अलग नहीं करता है / और इसलिए यह इसे पैरामीटर नहीं करता है।
(Given(@&'I have entered India as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword() { ScenarioContext.Current.Pending(); }
लेकिन यह वह नहीं है जो हम चाहते हैं। हमें खोज कीवर्ड को मानकीकृत करने की आवश्यकता है, अन्यथा, प्रत्येक कीवर्ड खोज के लिए, हमें एक कस्टम स्टेप परिभाषा बनानी होगी।
तो, आइए देखें, इस चरण की परिभाषा को और अधिक सामान्य कैसे संशोधित करें, जो खोज कीवर्ड को पैरामीटर करने में सक्षम होगा। यह साधारण रेगेक्स मैचर के माध्यम से किया जा सकता है।
नीचे दिए गए कोड नमूने का संदर्भ लें। हमने एक regex मिलानकर्ता के माध्यम से खोज कीवर्ड को बदल दिया है, अर्थात (। *) 'यह क्या करेगा कि यह किसी भी कीवर्ड के मूल्य को बदल देगा जिसे आप परिदृश्य से पास करेंगे और नीचे दिए गए कोड नमूने में' searchString 'नाम के इनपुट पैरामीटर में खोज कीवर्ड का मान सेट करेंगे।
(Given(@'I have entered (.*) as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { ScenarioContext.Current.Pending() }
इस तरह, यह कोड मॉड्यूलर रहता है और प्रत्येक चरण कार्यान्वयन के लिए बार-बार बॉयलरप्लेट कोड से बचा जाता है।
सेलेनियम एकीकरण और कदम परिभाषा तर्क
अब चलो सेलेनियम के वास्तविक एकीकरण को स्पेकफ्लो के साथ देखते हैं। एक बार चरण परिभाषाएँ उत्पन्न हो जाने के बाद, अब हम वास्तविक परीक्षण परिदृश्य को निष्पादित करने के लिए उनमें कोड जोड़ देंगे।
आइए देखें, जहां हम सेलेनियम वेब ड्रायवर उदाहरण को रख सकते हैं और आरंभ कर सकते हैं ताकि यह संपूर्ण परिदृश्य निष्पादन में उपलब्ध हो। हम ड्राइवर को बाइंडिंग क्लास के एक निजी क्षेत्र के रूप में रखेंगे जो उत्पन्न हुआ। ड्राइवर को क्लास कंस्ट्रक्टर के एक हिस्से के रूप में इनिशियलाइज़ किया जाएगा।
इस तरह, ड्राइवर परीक्षण की अवधि के पूरे पाठ्यक्रम के लिए आरंभीकृत रहता है क्योंकि हमारे पास सभी चरणों के लिए सिर्फ एक बाइंडिंग फ़ाइल है (और यह परीक्षण के निष्पादन से पहले प्रारंभ हो जाता है)।
यह भी ध्यान दें कि हम भी लागू करेंगे पहचान योग्य इंटरफ़ेस, ताकि ड्राइवर उदाहरण को निपटाने के लिए जिसके बाद इसकी आवश्यकता नहीं है। इसे निपटान में रखने से (विधि) यह गारंटी देगा कि एक बार कक्षा की वस्तु का निपटान हो जाने के बाद, चालक का उदाहरण भी निपटाया जा सकता है।
इस तरह से वेबड्राइवर उदाहरण की घोषणा और आरंभीकरण के लिए कोड दिखता है:
(Binding) public class YoutubeSearchFeatureSteps : IDisposable { private String searchKeyword; private ChromeDriver chromeDriver; public YoutubeSearchFeatureSteps() => chromeDriver = new ChromeDriver(); //... other Step defintion implementations public void Dispose() { if(chromeDriver != null) { chromeDriver.Dispose(); chromeDriver = null; } } }
उपरोक्त के साथ, चालक उदाहरण का उपयोग किसी भी चरण कार्यान्वयन के हिस्से के रूप में किया जा सकता है जो परिदृश्य निष्पादन का एक हिस्सा है।
आइए अब प्रत्येक व्यक्तिगत परिदृश्य के चरण कार्यान्वयन को देखें।
# 1) चरण व्यवस्थित करें:
Given I have navigated to youtube website And I have entered India as search keyword
इन दोनों चरणों में ड्राइवर उदाहरण के साथ इंटरैक्ट करना शामिल है। पहला चरण खुली हुई ब्राउज़र विंडो और youtube वेबसाइट पर नेविगेट करता है
दूसरा चरण खोज इनपुट बटन के लिए दिखता है और खोज कीवर्ड के रूप में 'भारत' में प्रवेश करता है।
नीचे इन दोनों चरणों के लिए कार्यान्वयन है:
((Given(@'I have navigated to youtube website')) public void GivenIHaveNavigatedToYoutubeWebsite() { chromeDriver.Navigate().GoToUrl('https://www.youtube.com'); Assert.IsTrue(chromeDriver.Title.ToLower().Contains('youtube')); } 7. (Given(@'I have entered (.*) as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { this.searchKeyword = searchString.ToLower(); var searchInputBox = chromeDriver.FindElementById('search'); var wait = new WebDriverWait(chromeDriver, TimeSpan.FromSeconds(2)); wait.Until(ExpectedConditions.ElementIsVisible(By.Id('search'))); searchInputBox.SendKeys(searchKeyword); }
पहले चरण के लिए, इस दावे पर ध्यान दें कि यह सुनिश्चित करता है कि विंडो शीर्षक की जाँच करके youtube पर नेविगेशन सफल रहा।
ध्यान दें: विभिन्न वेब तत्वों या ड्राइवर गुणों पर जोर रखने के विभिन्न तरीके हो सकते हैं, लेकिन इस ट्यूटोरियल का अंतिम लक्ष्य केवल सबसे सरल तरीके से वर्णन करना है।
दूसरे चरण में, हमने एक गतिशील प्रतीक्षा का उपयोग किया है उम्मीदें हैं जो यह सुनिश्चित करेगा कि कोड सर्च कीवर्ड में की-कोड की कोशिश करने से पहले सर्च बॉक्स दिखाई दे रहा है।
इसके अलावा, हम एक में searchString स्टोर कर रहे हैं निजी क्षेत्र खोज कीवर्ड। ऐसा इसलिए किया जाता है ताकि सर्चकेयर्ड का उपयोग अन्य चरण कार्यान्वयन में भी किया जा सके।
टिप - चरण भर में डेटा पास करना
इस दृष्टिकोण से डेटा (भंडारण) (जैसे कि वर्ग चर के माध्यम से) पास करना एक ऐसा साधन है जिसके माध्यम से डेटा को स्टेप बाइंडिंग में साझा किया जा सकता है।
ऐसा करने के अन्य तरीके भी हैं जैसे कि स्पेकफ्लो अपने आप में एक डायनेमिक डिक्शनरी ऑब्जेक्ट प्रदान करता है जिसे परिदृश्यो कहा जाता है। हम इसके बारे में आगामी लेखों में अधिक जानकारी देखेंगे।
# 2) एक्ट स्टेप
When I press the search button
अब वास्तविक कार्रवाई पर नजर डालते हैं, जो खोज बटन पर क्लिक कर रही है। चरण कार्यान्वयन फ़ाइल खोज बटन को खोजेगी और परिदृश्य चरण को निष्पादित करने के लिए इसे क्लिक करें।
इस चरण का कोड नीचे दिखाया गया है:
(When(@'I press the search button')) public void WhenIPressTheSearchButton() { var searchButton = chromeDriver.FindElementByCssSelector('button#search-icon-legacy'); searchButton.Click(); }
# 3) अंत में मुखर कदम:
Then I should navigate to search results page
इस चरण में, हम केवल चालक गुणों से सत्यापित कर रहे हैं कि URL और पृष्ठ शीर्षक में खोज कीवर्ड है या नहीं।
इस चरण के लिए कोड नीचे दिखाया गया है:
(Then(@'I should be navigate to search results page')) public void ThenIShouldBeNavigateToSearchResultsPage() { // After search is complete the keyword should be present in url as well as page title` Assert.IsTrue(chromeDriver.Url.ToLower().Contains(searchKeyword)); Assert.IsTrue(chromeDriver.Title.ToLower().Contains(searchKeyword)); }
क्रियान्वयन
अब, परिदृश्य को निष्पादित करने और परिणाम देखने का प्रयास करें। परिदृश्य निष्पादित होने के बाद, सभी परिदृश्य चरणों को क्रमिक रूप से निष्पादित किया जाएगा। परीक्षण एक ब्राउज़र खोलने, एक वेबसाइट पर नेविगेट करने और फिर कुछ कार्रवाई करने के लिए होगा।
परीक्षण का आउटपुट परीक्षण सारांश से 'आउटपुट' बटन पर क्लिक करके देखा जा सकता है जो प्रत्येक व्यक्तिगत कदम की सफलता / विफलता को दर्शाता है।
टिप्स
इंटरमीडिएट फेल स्टेप्स
एक ऐसे परिदृश्य के मामले में, जिसमें मध्यवर्ती चरण विफल हो जाते हैं, कृपया ध्यान दें कि उन परिदृश्यों में स्पेकफ्लो सीधे उस परिदृश्य के किसी भी शेष चरण को निष्पादित नहीं करेगा और परीक्षण के परिणाम को विफल के रूप में चिह्नित करेगा।
mysql बनाम sql सर्वर बनाम oracle
NUnit एडाप्टर के साथ परीक्षण चलाना
इस उदाहरण के लिए, हमने Specflow.NUnit परीक्षण धावक (जिसे हमने Nuget पैकेज प्रबंधक के माध्यम से स्थापित किया था) का उपयोग करके हमारे परीक्षणों को निष्पादित किया है।
यह कुछ मायनों में अलग है जैसा कि स्पेसरून धावक से नीचे दिखाया गया है जिसे हमने पहले के लेख में इस्तेमाल किया था।
- Specflow.NUnit धावक खुला स्रोत है।
- यह परीक्षणों को निष्पादित करते समय किसी भी देरी का परिचय नहीं देता है।
निष्कर्ष
इस लेख में, हमने Youtube एप्लिकेशन पर एक वीडियो खोज के सरल परीक्षण परिदृश्य के माध्यम से स्पेलफ्लो फ्रेमवर्क के साथ सेलेनियम को एकीकृत करने का एक उदाहरण देखा।
सेलेनियम को एकीकृत करते हुए, हम भी गए, निजी श्रेणी के क्षेत्रों के माध्यम से विभिन्न बाइंडिंग में डेटा कैसे साझा करें। हमने NUnit रनर बनाम द स्पेसर रनर पर टेस्ट को कवर किया और दोनों की विस्तार से तुलना की।
कोड फ़ाइलें
YoutubeSearchFeature.feature
Feature: YoutubeSearchFeature In order to test search functionality on youtube As a developer I want to ensure functionality is working end to end @mytag Scenario: Youtube should search for the given keyword and should navigate to search results page Given I have navigated to youtube website And I have entered India as search keyword When I press the search button Then I should be navigate to search results page
YoutubeSearchFeatureSteps.cs
using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; using SeleniumExtras.WaitHelpers; using System; using System.Collections.Generic; using System.Linq; using TechTalk.SpecFlow; namespace SepcflowSelenium.StepDefinitions { (Binding) public class YoutubeSearchFeatureSteps : IDisposable { private String searchKeyword; private ChromeDriver chromeDriver; public YoutubeSearchFeatureSteps() => chromeDriver = new ChromeDriver(); (Given(@'I have navigated to youtube website')) public void GivenIHaveNavigatedToYoutubeWebsite() { chromeDriver.Navigate().GoToUrl('https://www.youtube.com'); Assert.IsTrue(chromeDriver.Title.ToLower().Contains('youtube')); } (Given(@'I have entered (.*) as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { this.searchKeyword = searchString.ToLower(); var searchInputBox = chromeDriver.FindElementById('search'); var wait = new WebDriverWait(chromeDriver, TimeSpan.FromSeconds(2)); wait.Until(ExpectedConditions.ElementIsVisible(By.Id('search'))); searchInputBox.SendKeys(searchKeyword); } (When(@'I press the search button')) public void WhenIPressTheSearchButton() { var searchButton = chromeDriver.FindElementByCssSelector('button#search-icon-legacy'); searchButton.Click(); } (Then(@'I should be navigate to search results page')) public void ThenIShouldBeNavigateToSearchResultsPage() { System.Threading.Thread.Sleep(2000); // After search is complete the keyword should be present in url as well as page title` Assert.IsTrue(chromeDriver.Url.ToLower().Contains(searchKeyword)); Assert.IsTrue(chromeDriver.Title.ToLower().Contains(searchKeyword)); } public void Dispose() { if(chromeDriver != null) { chromeDriver.Dispose(); chromeDriver = null; } } } }
साझाकरण और स्कोप्ड बाइंडिंग, हुक और स्टेप पुन: उपयोग के बारे में अधिक जानने के लिए हमारे आगामी ट्यूटोरियल को देखें!
PREV ट्यूटोरियल | अगले ट्यूटोरियल
अनुशंसित पाठ
- ककड़ी सेलेनियम ट्यूटोरियल: ककड़ी जावा सेलेनियम वेबड्राइवर एकीकरण
- सेलेनियम वेबड्राइवर का परिचय - सेलेनियम ट्यूटोरियल # 8
- सेलेनियम वेबड्राइवर के साथ जेनकिंस का एकीकरण: चरण-दर-चरण ट्यूटोरियल
- हमारी पहली वेबड्राइवर स्क्रिप्ट का कार्यान्वयन - सेलेनियम वेबड्राइवर ट्यूटोरियल # 10
- सेलेनियम वेबड्राइवर में अलर्ट / पॉपअप कैसे हैंडल करें - सेलेनियम ट्यूटोरियल # 16
- वेबड्राइवर संपूर्ण सेटअप और स्थापना ग्रहण के साथ - सेलेनियम ट्यूटोरियल # 9
- विभिन्न प्रकार के वेबड्राइवर कमांड - सेलेनियम ट्यूटोरियल # 14 का उपयोग करके वेब तत्वों की दृश्यता की जांच करें
- गेकोड्राइवर सेलेनियम ट्यूटोरियल: सेलेनियम प्रोजेक्ट्स में गेकोड्राइवर का उपयोग कैसे करें