specflow selenium webdriver end end example
Primer uporabe konca do konca Specflow & Selenium Webdriver:
V tem Brezplačna serija Specflow Training , do Kratek uvod o Specflowu je bila podana v prejšnji vadnici.
V tem članku bomo videli celovit primer uporabe specifikacij BDD na osnovi Specflow, preskusi pa se bodo izvajali prek Selenium Webdriver.
Preizkusi so lahko tako preprosti kot preizkus prijavne funkcije aplikacije. Zgolj to bomo opisali s pomočjo Specflowa, izvedbe Step pa bodo uporabile gonilnik in ukaze Selenium ter NUnit kot okvir za trditev.
Uporabili bomo tudi tekač Specflow na osnovi NUnit (v nasprotju s Specrunom, ki ni odprtokoden in uvaja naključno zakasnitev v brezplačni različici).
Kaj se boste naučili:
Video vadnica: Specflow in selen
Oglejte si video vadnico o specflowu in selenu:
vzorec vprašanj in odgovorov na izhodnem intervjuju
Začnimo.
Če želite začeti, v Visual Studio ustvarite Project Unit Project in namestite naslednje predpogoje:
# 1) Ustvarite projekt preskusa enote
Namestite paket Nuget za Nunit in Specflow.
Install-Package Specflow.NUnit# 2) Namestite Selenium's Webdriver za brskalnik chrome.
Tega lahko namestite tudi prek konzole Nuget Package Manager s pomočjo spodnjega ukaza.
Install-Package Selenium.WebDriver.ChromeDriver# 3) Namestite knjižnice Selenium Webdriver in pomočnike za čakanje Selenium za dodajanje čakanja ExpectedCondition.
Install-Package Selenium.WebDriver Install-Package DotNetSeleniumExtras.WaitHelpers# 4) Zdaj odstranite datoteko test.cs iz samodejno ustvarjenega projekta.
S tem korakom se izogibamo kakršni koli zmedi, saj bomo za Specflow uporabljali funkcije in datoteke z definicijo korakov.
# 5) Ustvarite mape za funkcije in definicije korakov za shranjevanje datotek za implementacijo funkcij in korakov.
To ni obvezen korak, vendar je koristen za organiziranje funkcij in izvedb korakov v ločenih mapah.
# 6) Na koncu zgornjih korakov morata biti struktura rešitve in paketi.config videti, kot je prikazano spodaj.

Izvedba lastnosti in korakov
Zdaj pa začnimo z datoteko funkcije in dejanskim izvajanjem koraka.
O funkciji - Vzorčna funkcija bo testiranje / preverjanje funkcionalnosti iskanja na spletnem mestu Youtube. Iskali bomo ključno besedo in trdili, da je bil uporabnik preusmerjen na stran z rezultati iskanja.
Dodajte novo funkcijsko datoteko in jo poimenujte kot YoutubeSearchFeature.feature
Dodajte scenarij in opis funkcije iskanja, kot je prikazano spodaj:
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 Zgornji scenarij pričakuje, da bo test:
- Pojdite na spletno mesto Youtube: To bo zahtevalo ogrodje za avtomatizacijo spleta, kot je Selenium, ki bo s spletnim gonilnikom krmaril do spletne strani v brskalniku.
- Poiščite ključno besedo: Ta korak bo vključeval iskanje ustreznih vhodnih elementov in gumbov, da vpišete ključno besedo in izvedete iskanje.
- Trdite, da so prikazani rezultati iskanja in da je uporabnik na strani z rezultati: Ta korak bo vključeval trditve o preverjanju, ali je uporabnik pristal na pravilni strani.
Zdaj pa si oglejmo izvedbe korakov vsakega od korakov.
Pred tem pa razumejmo, kako bomo integrirali logiko / kodo Selenium v obstoječo definicijo Specflow.
Selen ali katero koli drugo orodje (ali enote za preizkušanje enote / posnetki / gonilniki itd.) so v bistvu vmesni del izvedbe korakov, vendar je ključna stvar, ki jo je treba razumeti, način integracije obeh okvirov.
Specflow uporabnikom omogoča pisanje testnih specifikacij. Ne narekuje orodja, ki ga je treba uporabiti. Zato lahko razvijalec preizkusov izbere toliko orodij za testiranje, kolikor želi, da bo odvisen od primera uporabe, ki se rešuje.
Za uporabo selena v tem scenariju potrebujemo naslednje:
- Primer WebDriver (za poenostavitev bomo uporabili ChromeDriver), ki bo uporabniku omogočil dejansko navigacijo do spletne strani z uporabo brskalnika, kot je navedeno v izvedbi Driver.
- Nekaj deklaracij WebElement (in jih je mogoče narediti samo kot del izvedb koraka), ki so potrebne za interakcijo z uporabnikom in posredovanje vnosov ter izvajanje dejanj itd.
- Nekaj trditev o naslovu okna, URL-jih itd., Ki jih je mogoče izvesti na primerku gonilnika.
V datoteki Step Implementations bomo ustvarili primerek ChromeWebdriver.
Ustvarimo torej datoteko z definicijo koraka. Kot smo videli v zadnjem članku, Specflow zagotavlja mehanizem za samodejno generiranje definicij korakov (ki jih lahko pozneje po potrebi prilagodite / spremenite).
- Pomaknite se do datoteke funkcije, z desno miškino tipko kliknite in izberite »Ustvari definicije korakov«.
- Ustvarite novo datoteko v mapi StepDefinitions, kot smo ustvarili prej, in jo poimenujte kot YoutubeSearchFeatureSteps.cs
- Prepričajte se, da so bili vsi koraki scenarija ustrezno vezani na definicije korakov.
Namig - Spreminjanje samodejno ustvarjenih definicij korakov:
Zdaj, če natančno opazujete, opredelitev koraka, ki je bila ustvarjena za naš korak iskanja po ključnih besedah, tj. »Vnesel sem Indijo kot ključno besedo za iskanje«, samodejno generirane kode ne prepozna / loči iskalne ključne besede in je zato ne parametrira.
(Given(@&'I have entered India as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword() { ScenarioContext.Current.Pending(); } Toda to ni tisto, kar si želimo. Ključno besedo za iskanje moramo parametrizirati, sicer pa bomo za vsako iskanje po ključnih besedah morali ustvariti definicijo koraka po meri.
Torej, poglejmo, kako spremeniti to definicijo koraka v bolj splošno, ki bo omogočila parameterizacijo iskalne ključne besede. To lahko storite s preprostim ujemanjem regularnih izrazov.
Glejte spodnji vzorec kode. Ključno besedo za iskanje smo zamenjali z ujemanjem regularnih izrazov, tj. (. *) ”To bo storilo tako, da bo nadomestilo vrednost katere koli ključne besede, ki jo boste posredovali iz Scenarija, in bo v vhodnem parametru z imenom„ searchString ”v spodnjem vzorčnem kodu nastavilo vrednost ključne besede za iskanje.
(Given(@'I have entered (.*) as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { ScenarioContext.Current.Pending() }Na ta način ohranja kodo modularno in se izogne ponavljajoči se kodi za vsako izvedbo koraka.
Integracija selena in logika opredelitve korakov
Zdaj pa poglejmo dejansko integracijo selena s specflowom. Ko so definicije korakov ustvarjene, jim bomo zdaj dodali kodo, da bomo izvedli dejanski testni scenarij.
Poglejmo, kam lahko namestimo in inicializiramo primerek gonilnika Selenium Web, tako da je na voljo ves čas izvajanja Scenarija. Gonilnik bomo postavili kot zasebno polje generiranega veznega razreda. Gonilnik bo inicializiran kot del konstruktorja razreda.
Na ta način ostane gonilnik inicializiran ves čas trajanja preizkusa, saj imamo za vse korake samo eno Binding datoteko (in se inicializira pred začetkom izvajanja testa).
Upoštevajte tudi, da bomo tudi izvajali ID za enkratno uporabo vmesnik, tako da odstranite primerek gonilnika, po katerem ni več potreben. Če ga namestite v metodo Dispose (), boste zagotovili, da se lahko, ko se objekt predmeta odstrani, odstrani tudi primerek gonilnika.
Takole je videti koda za deklariranje in inicializacijo primerka 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; } } } Z zgoraj navedenim lahko primerek gonilnika uporabimo kot del katere koli izvedbe koraka, ki je del izvedbe scenarija.
Oglejmo si zdaj korak izvedbe vsakega posameznega scenarija.
# 1) Razporedite korake:
Given I have navigated to youtube website And I have entered India as search keyword Oba koraka vključujeta interakcijo s primerkom gonilnika. Prvi korak se odpre v oknu brskalnika in se pomakne do spletnega mesta youtube
Drugi korak išče gumb za vnos iskanja in kot ključno besedo za iskanje vnese »Indija«.
Spodaj je izvedba obeh korakov:
((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); } Za prvi korak opazite trditev, da s preverjanjem naslova okna zagotavlja, da je bila navigacija do youtube uspešna.
Opomba: Na različne načine lahko postavimo trditve na različne spletne elemente ali lastnosti gonilnika, vendar je končni cilj te vadnice le ponazoriti na najbolj poenostavljen način.
V drugem koraku smo dodali dinamično čakanje z uporabo Pričakovani pogoji kar bo zagotovilo, da bo iskalno polje vidno, preden bo koda poskušala vnesti ključno besedo za iskanje.
Prav tako shranjujemo searchString v datoteko iskanje po zasebnem poljuKljučna beseda. To se naredi tako, da se searchKeyword lahko uporablja tudi v drugih izvedbah korakov.
Namig - posredovanje podatkov po korakih
Posredovanje / shranjevanje podatkov s tem pristopom (tj. Skozi spremenljivke razreda) je eno od načinov, prek katerega je mogoče podatke deliti med vezavami korakov.
To lahko storite tudi na druge načine, saj Specflow sam ponuja dinamični slovarski objekt, imenovan ScenarioContext. Več podrobnosti o tem bomo videli v prihajajočih člankih.
# 2) Ukrepajte korak
When I press the search buttonZdaj pa poglejmo dejansko dejanje, ki je klik na gumb Iskanje. Datoteka za izvajanje koraka bo poiskala gumb za iskanje in ga kliknila, da izvede korak scenarija.
Koda za ta korak je videti spodaj:
(When(@'I press the search button')) public void WhenIPressTheSearchButton() { var searchButton = chromeDriver.FindElementByCssSelector('button#search-icon-legacy'); searchButton.Click(); } # 3) Končno korak uveljavljanja:
Then I should navigate to search results pageV tem koraku samo preverjamo iz lastnosti gonilnika, ali URL in naslov strani vsebujeta ključno besedo za iskanje ali ne.
Koda za ta korak je prikazana spodaj:
(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)); } Izvršitev
Zdaj poskusimo izvesti Scenarij in si oglejte rezultate. Ko se scenarij izvede, se vsi koraki scenarija izvedejo zaporedno. Preizkus bo odprl brskalnik, se pomaknil do spletnega mesta in nato izvedel nekaj dejanj.
Rezultat testa si lahko ogledate s klikom na gumb »Izhod« v povzetku testa, ki prikazuje uspeh / neuspeh vsakega posameznega koraka.


Nasveti
Vmesni neuspeli koraki
V primeru, da ima scenarij vmesne korake, ki ne uspejo, upoštevajte, da v teh scenarijih Specflow preprosto ne bo izvedel nobenih preostalih korakov tega scenarija in bo rezultat preizkusa označil kot neuspešnega.
najboljše brezplačno odstranjevanje zlonamerne programske opreme za Windows 7
Izvajanje testov z adapterjem NUnit
Za ta primer smo svoje teste izvedli s testnim tekačem Specflow.NUnit (ki smo ga namestili prek upravitelja paketov Nuget).
To se na nekaj načinov razlikuje, kot je prikazano spodaj od tekača Specrun, ki smo ga uporabili v prejšnjem članku.
- Specflow.NUnit runner je odprtokoden.
- Med izvajanjem testov ne predstavlja zamude.
Zaključek
V tem članku smo videli celovit primer integracije selena z ogrodjem Specflow s preprostim testnim scenarijem iskanja videoposnetkov v aplikaciji Youtube.
Med integracijo selena smo tudi raziskali, kako deliti podatke med različnimi vezavami prek polj zasebnega razreda. Pokrili smo tudi izvajanje preizkusa na NUnit tekaču in tekaču Specrun ter podrobno primerjali oba.
Datoteke kode
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; } } } } Oglejte si našo prihajajočo vadnico, če želite izvedeti več o skupnih in obsežnih vezavah, kljukah in ponovni uporabi korakov v programu Specflow!
PREV Vadnica | NASLEDNJA Vadnica
Priporočeno branje
- Vadnica za kumare selena: Integracija kumar Java Selenium WebDriver
- Uvod v Selenium WebDriver - Vadnica za selenij št. 8
- Integracija Jenkinsa s selenium WebDriver: Vadnica po korakih
- Implementacija našega prvega skripta WebDriver - Vadnica # 10 za selenium WebDriver
- Kako ravnati z opozorili / pojavnimi okni v programu Selenium WebDriver - Vodič za selenij št. 16
- Celotna namestitev in namestitev WebDriverja z Eclipse - Vadnica za selen št. 9
- Preverite vidnost spletnih elementov z različnimi vrstami ukazov WebDriver - Vadnica za selen št. 14
- Vadnica za GeckoDriver Selenium: Kako uporabljati GeckoDriver v projektih Selenium