specflow selenium webdriver end end example
Príklad použitia technológie Specflow & Selenium Webdriver od začiatku do konca:
V tomto Séria školení Specflow zadarmo , do Stručný úvod do Specflow bol uvedený v našom predchádzajúcom návode.
V tomto článku uvidíme úplný príklad použitia špecifikácií BDD založených na Specflow a testy sa budú vykonávať prostredníctvom selenového webového ovládača.
Testy môžu byť také jednoduché ako testovanie funkčnosti prihlásenia aplikácie. Je to len to, že tieto testy popíšeme pomocou Specflow a implementácie Stepu použijú selénový ovládač a príkazy a NUnit ako kontrolný rámec.
Použijeme tiež bežec Specflow založený na NUnit (na rozdiel od Specrun, ktorý nie je open source a vo voľnej verzii zavádza náhodné oneskorenie).
Čo sa dozviete:
Výukový program pre video: Specflow a selén
Pozrite si videonávod na tému Specflow a selén:
čo je beta testovanie a ako sa používa
Začnime.
Na začiatok si vytvoríme projekt testovania jednotiek v Visual Studio a nainštalujeme nasledujúce predpoklady:
# 1) Vytvorte projekt testovania jednotky
Nainštalujte si balík Nuget pre Nunit a Specflow.
Install-Package Specflow.NUnit
# 2) Nainštalujte si Selenium's Webdriver pre prehliadač Chrome.
To je možné nainštalovať aj prostredníctvom konzoly Nuget Package Manager pomocou príkazu uvedeného nižšie.
Install-Package Selenium.WebDriver.ChromeDriver
# 3) Nainštalujte si knižnice Selenium Webdriver a Selenium Wait Helpers pre pridanie čakania ExpectedCondition.
Install-Package Selenium.WebDriver Install-Package DotNetSeleniumExtras.WaitHelpers
# 4) Teraz odstráňte súbor test.cs z projektu, ktorý sa vytvorí automaticky.
Robíme tento krok, aby sme predišli akýmkoľvek nejasnostiam, pretože pre Specflow budeme používať súbory funkcií a súbory definícií krokov.
# 5) Vytvorte priečinky pre funkcie a definície krokov na ukladanie súborov implementácie funkcií a definícií krokov.
Toto nie je povinný krok, ale je užitočné usporiadať funkcie a implementácie krokov do samostatných priečinkov.
# 6) Na konci vyššie uvedených krokov by štruktúra riešenia a packages.config mali vyzerať, ako je uvedené nižšie.
Implementácia funkcií a krokov
Teraz začnime so súborom funkcií a skutočnou implementáciou krokov.
O funkcii - Ukážkovou funkciou bude testovanie / overovanie funkčnosti vyhľadávania na webových stránkach Youtube. Budeme hľadať kľúčové slovo a tvrdíme, že bol používateľ presmerovaný na stránku s výsledkami vyhľadávania.
Pridajte nový súbor funkcií a pomenujte ho ako YoutubeSearchFeature.feature
Pridajte scenár a popis funkcií vyhľadávania, ako je uvedené nižšie:
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
Vyššie uvedený scenár očakáva, že test:
- Prejdite na web Youtube: Bude to vyžadovať rámec automatizácie webu, ako je Selenium, ktorý bude na prechod na webovú stránku v prehliadači používať webdriver.
- Hľadať kľúčové slovo: Tento krok bude zahŕňať hľadanie vhodných vstupných prvkov a tlačidiel, aby bolo možné zadať kľúčové slovo a vyhľadať príslušne.
- Uistite sa, že sú zobrazené výsledky vyhľadávania a používateľ sa nachádza na stránke s výsledkami: Tento krok bude zahŕňať tvrdenia týkajúce sa overenia, či používateľ dospel na správnu stránku.
Teraz sa pozrime na implementáciu jednotlivých krokov.
Predtým si uvedomme, ako integrujeme selénovú logiku / kód do existujúcej definície Specflow.
Selén alebo akýkoľvek iný nástroj (alebo testovacie jednotky, falošné správy, ovládače atď.) sú v podstate medzistupňou vykonania kroku, ale kľúčovou vecou, ktorú treba pochopiť, je spôsob integrácie oboch týchto rámcov.
Specflow umožňuje používateľom písať špecifikácie testov. Neznamená to, aký nástroj by sa mal použiť. Preto si môže vývojár testov zvoliť toľko testovacích nástrojov, koľko chce, v závislosti od prípadu použitia, ktorý sa práve rieši.
Aby sme mohli v tomto scenári použiť selén, potrebujeme nasledovné:
- Inštancia WebDriver (pre zjednodušenie budeme používať ChromeDriver), ktorá umožní používateľovi skutočne prejsť na webovú stránku pomocou prehliadača podľa implementácie ovládača.
- Niekoľko vyhlásení WebElement (a je možné ich vykonať iba ako súčasť implementácií Step), ktoré sú potrebné na interakciu s používateľom a na zadávanie vstupov a vykonávanie akcií atď.
- Niekoľko tvrdení o názve okna, adresách URL atď., Ktoré je možné vykonať v inštancii ovládača.
Budeme vytvárať inštanciu ChromeWebdriver v súbore Krokové implementácie.
Poďme si teda vytvoriť súbor Definícia kroku. Ako sme videli v minulom článku, Specflow poskytuje mechanizmus na automatické generovanie definícií krokov (ktoré je možné neskôr prispôsobiť alebo upraviť podľa potreby).
- Prejdite na súbor funkcií, kliknite pravým tlačidlom myši a vyberte možnosť „Generovať definície krokov“.
- Vytvorte nový súbor v priečinku StepDefinitions, ako sme vytvorili predtým, a pomenujte ho ako YoutubeSearchFeatureSteps.cs
- Zaistite, aby boli všetky kroky scenára primerane spojené s definíciami krokov.
Tip - Úprava automaticky generovaných definícií krokov:
Ak teraz pozorne sledujete, definícia kroku, ktorá sa vygenerovala pre náš krok kľúčového slova pre vyhľadávanie, tj. „Zadal som Indiu ako kľúčové slovo pre vyhľadávanie“, automaticky generovaný kód, neidentifikuje / neoddeľuje kľúčové slovo vyhľadávania, a preto ho parametrizuje.
(Given(@&'I have entered India as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword() { ScenarioContext.Current.Pending(); }
Ale to nie je to, čo chceme. Potrebujeme, aby bolo kľúčové slovo vyhľadávania parametrizované, inak budeme musieť pre každé vyhľadávanie kľúčových slov vytvoriť vlastnú definíciu kroku.
Pozrime sa teda, ako upraviť túto definíciu kroku na všeobecnejšiu, ktorá umožní parametrizovať hľadané kľúčové slovo. To sa dá dosiahnuť pomocou jednoduchého porovnávača regulárnych výrazov.
Pozrite si nižšie uvedenú ukážku kódu. Kľúčové slovo vyhľadávania sme nahradili porovnávačom regulárnych výrazov, t. J. „ (. *) „To urobí tak, že nahradí hodnotu ľubovoľného kľúčového slova, ktoré odovzdáte zo scenára, a nastaví hodnotu vyhľadávacieho kľúčového slova vo vstupnom parametri s názvom„ searchString “v nižšie uvedenej ukážke kódu.
(Given(@'I have entered (.*) as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { ScenarioContext.Current.Pending() }
Týmto spôsobom udržuje kód modulárny a vyhýba sa opakovanému štandardnému kódu pre každú implementáciu kroku.
Integrácia selénu a logika definície kroku
Teraz sa pozrime na skutočnú integráciu selénu s technológiou Specflow. Po vygenerovaní definícií krokov k nim teraz pridáme kód, aby sme mohli vykonať skutočný testovací scenár.
Pozrime sa, kam môžeme umiestniť a inicializovať inštanciu selénového webového ovládača tak, aby bola k dispozícii počas celého vykonávania scenára. Budeme umiestňovať ovládač ako súkromné pole triedy viazania, ktorá sa vygenerovala. Vodič bude inicializovaný ako súčasť triedy Constructor.
Týmto spôsobom zostáva ovládač inicializovaný po celú dobu trvania testu, pretože máme iba jeden súbor Binding pre všetky kroky (a dostane sa inicializovaný pred začiatkom vykonávania testu).
Upozorňujeme tiež, že budeme tiež implementovať IDisposable rozhranie, aby sa zbavila inštancie ovládača, po ktorej už nie je potrebná. Umiestnenie do metódy Dispose () zaručí, že akonáhle bude objekt triedy vyradený, môže byť zlikvidovaná aj inštancia ovládača.
Takto vyzerá kód na deklaráciu a inicializáciu inštancie WebDriver:
(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; } } }
S vyššie uvedeným je možné inštanciu ovládača použiť ako súčasť akejkoľvek implementácie kroku, ktorá je súčasťou vykonania scenára.
Pozrime sa teraz na krok Implementácia každého scenára.
# 1) Usporiadajte kroky:
Given I have navigated to youtube website And I have entered India as search keyword
Oba tieto kroky zahŕňajú interakciu s inštanciou ovládača. Prvým otvoreným krokom je okno prehliadača a navigácia na web youtube
V druhom kroku sa vyhľadá tlačidlo vstupu do vyhľadávania a ako kľúčové slovo vyhľadávania sa zadá „India“.
Nižšie je uvedená implementácia oboch týchto krokov:
((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); }
V prvom kroku si všimnite tvrdenie, ktoré zaisťuje úspešnosť navigácie na youtube kontrolou názvu okna.
Poznámka: Môžu existovať rôzne spôsoby umiestnenia výrazov na rôzne webové prvky alebo vlastnosti ovládača, ale konečným cieľom tohto tutoriálu je iba ilustrácia s najjednoduchším spôsobom.
V druhom kroku sme pridali dynamické čakanie pomocou Očakávané podmienky čím sa zaistí viditeľnosť vyhľadávacieho poľa skôr, ako sa kód pokúsi zadať kľúčové slovo pre hľadanie.
Ukladáme tiež reťazec searchString do a vyhľadávanie v súkromnom poli To sa deje tak, že searchKeyword je možné použiť aj v iných krokových implementáciách.
Tip - prenos údajov v rámci krokov
Predávanie / ukladanie údajov týmto prístupom (t. J. Prostredníctvom premenných triedy) je jedným z prostriedkov, prostredníctvom ktorých možno údaje zdieľať naprieč väzbami Step.
Existujú aj iné spôsoby, ako to urobiť, pretože Specflow sám poskytuje objekt dynamického slovníka s názvom ScenarioContext. Viac podrobností o tom uvidíme v nasledujúcich článkoch.
# 2) Konajte krok
When I press the search button
Teraz sa pozrime na skutočnú akciu, ktorou je kliknutie na tlačidlo Hľadať. Súbor implementácie kroku vyhľadá tlačidlo vyhľadávania a klikne na neho, aby sa vykonal krok scenára.
Kód tohto kroku vyzerá takto:
(When(@'I press the search button')) public void WhenIPressTheSearchButton() { var searchButton = chromeDriver.FindElementByCssSelector('button#search-icon-legacy'); searchButton.Click(); }
# 3) Nakoniec krok Krok:
Then I should navigate to search results page
V tomto kroku iba overujeme z vlastností ovládača, či adresa URL a názov stránky obsahujú kľúčové slovo vyhľadávania alebo nie.
Kód tohto kroku je uvedený nižšie:
(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)); }
Exekúcia
Teraz sa pokúsime vykonať scenár a pozrieť sa na výsledky. Po vykonaní scenára sa postupne vykonajú všetky kroky scenára. Testom bude otvorenie prehliadača, navigácia na webovú stránku a následné vykonanie určitej akcie.
Výstup testu je možné vidieť kliknutím na tlačidlo „Výstup“ v súhrne testu, ktoré zobrazuje úspech / neúspech každého jednotlivého kroku.
Tipy
Medziproduktové zlyhávajúce kroky
V prípade, že scenár bude mať medzikroky, ktoré zlyhajú, upozorňujeme, že v týchto scenároch Specflow jednoducho nevykoná žiadne zostávajúce kroky daného scenára a označí výsledok testu ako neúspešný.
java rozhovor kódovanie otázok a odpovedí
Spúšťanie testov s adaptérom NUnit
V tomto príklade sme vykonali naše testy pomocou testovacieho bežca Specflow.NUnit (ktorý sme nainštalovali prostredníctvom správcu balíkov Nuget).
Toto sa líši v niekoľkých ohľadoch, ako je zobrazené nižšie od bežca Specrun, ktorý sme použili v predchádzajúcom článku.
- Specflow.NUnit runner je open source.
- Nezavádza žiadne zdržanie pri vykonávaní testov.
Záver
V tomto článku sme videli komplexný príklad integrácie selénu s rámcom Specflow prostredníctvom jednoduchého testovacieho scenára vyhľadávania videa v aplikácii Youtube.
Pri integrácii selénu sme si tiež prešli, ako zdieľať údaje cez rôzne väzby prostredníctvom súkromných polí tried. Pokryli sme tiež spustenie testu na bežci NUnit oproti bežcovi Specrun a obe sme podrobne porovnali.
Súbory kódu
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; } } } }
Pozrite si náš nadchádzajúci tutoriál a dozviete sa viac o zdieľaných a rozsahovaných viazaniach, hákoch a opakovanom použití v Specflow!
Výukový program PREV | NEXT Tutorial
Odporúčané čítanie
- Výukový program Cucumber Selenium: Cucumber Java Selenium WebDriver Integration
- Úvod do softvéru Selenium WebDriver - Výučba selénu č. 8
- Integrácia Jenkinsa so Selenium WebDriver: Podrobný návod
- Implementácia nášho prvého skriptu WebDriver - výučba selénu WebDriver č. 10
- Ako zaobchádzať s upozorneniami alebo vyskakovacími oknami v ovládači Selenium WebDriver - selén - návod č
- Celé nastavenie a inštalácia WebDriver s výučbou Eclipse - Selenium č. 9
- Skontrolujte viditeľnosť webových prvkov pomocou rôznych typov príkazov WebDriver - selén - návod č. 14
- Výukový program GeckoDriver Selenium: Ako používať GeckoDriver v selénových projektoch