specflow selenium webdriver end end example
Primjer korištenja Specflow & Selenium Webdriver: kraj do kraja:
U ovome Besplatna serija specflow treninga , do Kratki uvod o Specflowu je dato u našem prethodnom vodiču.
U ovom ćemo članku vidjeti kraj do kraja primjera upotrebe BDD specifikacija temeljenih na Specflowu, a testovi će se izvoditi putem Selenium Webdriver.
Testovi mogu biti jednostavni poput testiranja funkcionalnosti prijave za prijavu. Upravo ćemo te testove opisati pomoću Specflow-a, a implementacije Koraka upotrijebit će pokretački program i naredbe Selenium i NUnit kao okvir za tvrdnju.
Također ćemo koristiti Specflow pokretač zasnovan na NUnit-u (za razliku od Specruna koji nije otvoreni izvor i uvodi slučajno kašnjenje u besplatnoj verziji).
Što ćete naučiti:
Video vodič: Specflow i selen
Pogledajte video tutorial o Specflowu i selenu:
što je beta testiranje i kako se koristi
Započnimo.
Da započnemo, stvorimo Unit Test Project u Visual Studiju i instalirajmo sljedeće preduvjete:
# 1) Stvorite projekt jediničnog testiranja
Instalirajte Nuget paket za Nunit i Specflow.
Install-Package Specflow.NUnit
# 2) Instalirajte Selenium Webdriver za Chrome preglednik.
To se može instalirati i putem konzole Nuget Package Manager putem naredbe u nastavku.
Install-Package Selenium.WebDriver.ChromeDriver
# 3) Instalirajte knjižnice Selenium Webdriver i pomagače za čekanje Selenium za dodavanje očekivanih uvjeta čekanja.
Install-Package Selenium.WebDriver Install-Package DotNetSeleniumExtras.WaitHelpers
# 4) Sada uklonite datoteku test.cs iz projekta koji je automatski stvoren.
Ovaj korak radimo kako bismo izbjegli zabunu jer ćemo za Specflow koristiti datoteke značajki i datoteke definicije koraka.
# 5) Stvorite mape za značajke i definicije koraka za pohranu datoteka za implementaciju značajki i koraka.
Ovo nije obvezan korak, ali je koristan za organiziranje značajki i implementacija koraka u zasebne mape.
# 6) Na kraju gornjih koraka, struktura rješenja i paketi.config trebali bi izgledati kao što je prikazano u nastavku.
Implementacija značajke i koraka
Sada krenimo s datotekom značajki i stvarnom implementacijom koraka.
O značajci - Primjer značajke bit će testiranje / potvrđivanje funkcionalnosti pretraživanja web stranice Youtube. Tražit ćemo ključnu riječ i tvrditi da je korisnik preusmjeren na stranicu rezultata pretraživanja.
Dodajte novu datoteku značajke i nazovite je kao YoutubeSearchFeature.feature
Dodajte scenarij funkcionalnosti pretraživanja i opis značajke kao što je prikazano u nastavku:
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
Gornji scenarij očekuje da će test:
- Idite na web stranicu Youtube: To će zahtijevati okvir za automatizaciju weba poput Selenium, koji će koristiti Webdriver za navigaciju do web stranice u pregledniku.
- Potražite ključnu riječ: Ovaj će korak uključivati traženje odgovarajućih elemenata i gumba za unos kako biste ukucali ključnu riječ i izvršili pretraživanje.
- Tvrdite da su rezultati pretraživanja prikazani i da se korisnik nalazi na stranici s rezultatima: Ovaj će korak uključivati tvrdnje oko provjere je li korisnik sletio na ispravnu stranicu.
Pogledajmo sada implementacije koraka svakog od koraka.
Prije toga, shvatimo kako ćemo integrirati selenijsku logiku / kod u postojeću definiciju Specflowa.
Selen ili bilo koji drugi alat (ili jedinice za testiranje jedinice / lažne datoteke / upravljački programi itd.) u osnovi su posredni dio izvedbe koraka, ali ključna stvar koju treba razumjeti je način integracije oba ova okvira.
Specflow omogućuje korisnicima pisanje specifikacija za testiranje. Ne diktira alat koji treba koristiti. Stoga je programer testa slobodan odabrati onoliko alata za testiranje koliko želi ovisiti o slučaju korištenja koji se rješava.
Da bismo koristili selen u ovom scenariju, potrebno nam je sljedeće:
- Primjer WebDrivera (za jednostavnost ćemo koristiti ChromeDriver), koji će omogućiti korisniku da stvarno krene do web stranice pomoću preglednika prema implementaciji upravljačkog programa.
- Nekoliko deklaracija WebElementa (i to se može učiniti samo kao dio implementacija koraka) koje su potrebne za interakciju s korisnikom i prosljeđivanje unosa i izvršavanje radnji itd.
- Nekoliko tvrdnji o naslovu prozora, URL-ovima itd. Koje se mogu izvršiti na instanci upravljačkog programa.
Stvorit ćemo instancu ChromeWebdriver u datoteci Implementacije koraka.
Stoga, kreirajmo datoteku Definicija koraka. Kao što smo vidjeli u prošlom članku, Specflow pruža mehanizam za automatsko generiranje definicija koraka (koji se kasnije mogu prilagoditi / izmijeniti prema potrebi).
- Dođite do datoteke značajke, kliknite desnu tipku miša i odaberite 'Generiraj definicije koraka'.
- Stvorite novu datoteku u mapi StepDefinitions kako smo kreirali ranije i datoteku nazovite YoutubeSearchFeatureSteps.cs
- Osigurajte da su svi koraci scenarija na odgovarajući način vezani uz definicije koraka.
Savjet - Izmjena automatski generiranih definicija koraka:
Sada ako pažljivo promatrate, definicija koraka koja je generirana za naš korak ključne riječi za pretraživanje, tj. 'Unio sam Indiju kao ključnu riječ za pretraživanje' automatski generirani kôd, ne identificira / razdvaja ključnu riječ za pretraživanje i stoga je ne parameterizira.
(Given(@&'I have entered India as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword() { ScenarioContext.Current.Pending(); }
Ali to nije ono što želimo. Trebamo parametrizirati ključnu riječ za pretraživanje, inače ćemo za svako pretraživanje ključne riječi morati stvoriti prilagođenu definiciju koraka.
Pa, pogledajmo, kako modificirati ovu definiciju koraka u općenitiju, koja će omogućiti parameterizaciju ključne riječi za pretraživanje. To se može učiniti jednostavnim podudaranjem regularnih izraza.
Pogledajte donji uzorak koda. Zamijenili smo ključnu riječ za pretraživanje putem podudaranja regularnih izraza, tj. ' (. *) ”Ovo će učiniti da će zamijeniti vrijednost bilo koje ključne riječi koju ćete proslijediti iz Scenarija i postavit će vrijednost ključne riječi za pretraživanje u ulaznom parametru pod nazivom“ searchString ”u donjem uzorku koda.
(Given(@'I have entered (.*) as search keyword')) public void GivenIHaveEnteredIndiaAsSearchKeyword(String searchString) { ScenarioContext.Current.Pending() }
Na taj način zadržava modularni kôd i izbjegava ponavljanje šifre uzorka za svaki korak.
Integracija selena i logika definicije koraka
Sada da vidimo stvarnu integraciju selena sa Specflowom. Nakon što se generiraju definicije koraka, sada ćemo im dodati kôd kako bismo izvršili stvarni testni scenarij.
Pogledajmo gdje možemo smjestiti i inicijalizirati instancu upravljačkog programa Selenium tako da bude dostupna tijekom izvršenja Scenarija. Postavit ćemo upravljački program kao privatno polje generirajuće klase vezanja. Vozač će se inicijalizirati kao dio konstruktora klase.
Na taj način upravljački program ostaje inicijaliziran tijekom cijelog tijeka trajanja testa, jer imamo samo jednu vezujuću datoteku za sve korake (i inicijalizira se prije početka izvođenja testa).
Također imajte na umu da ćemo također implementirati Jednokratno sučelje, kako bi se riješila instanca upravljačkog programa nakon koje više nije potrebna. Postavljanje u metodu Dispose () jamčit će da se, nakon što se objekt klase odbaci, može ukloniti i instanca upravljačkog programa.
Evo kako izgleda kod za deklaraciju i inicijalizaciju instance 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; } } }
Uz gore navedeno, instanca upravljačkog programa može se koristiti kao dio bilo koje implementacije Koraka koja je dio izvršenja scenarija.
Pogledajmo sada implementaciju koraka svakog pojedinog scenarija.
# 1) Rasporedite korake:
Given I have navigated to youtube website And I have entered India as search keyword
Oba ova koraka uključuju interakciju s instancom upravljačkog programa. Prvi se korak otvara prozor preglednika i vodi do web mjesta youtube
Drugi korak traži gumb za unos pretraživanja i unosi 'Indija' kao ključnu riječ za pretraživanje.
Ispod je implementacija oba ova koraka:
((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 primijetite tvrdnju da osigurava uspješnu navigaciju na youtube provjerom naslova prozora.
Bilješka: Mogu biti različiti načini postavljanja tvrdnji na različite web elemente ili svojstva pokretačkog programa, ali krajnji cilj ovog vodiča je samo ilustrirati na najjednostavniji način.
U drugom smo koraku dodali dinamičko čekanje pomoću Očekivani uvjeti koji će osigurati da je okvir za pretraživanje vidljiv prije nego što kôd pokuša unijeti ključnu riječ za pretraživanje.
Također, pohranjujemo searchString u pretraga privatnog poljaKljučna riječ. To je učinjeno kako bi se searchKeyword mogao koristiti i u drugim implementacijama Koraka.
Savjet - prosljeđivanje podataka preko Koraka
Prosljeđivanje / pohranjivanje podataka ovim pristupom (tj. Kroz varijable klase) jedno je od sredstava putem kojih se podaci mogu dijeliti kroz povezivanja koraka.
Postoje i drugi načini da se to učini, kao što Specflow sam pruža dinamički objekt rječnika nazvan ScenarioContext. Više detalja o tome vidjet ćemo u sljedećim člancima.
# 2) Djelujte korak
When I press the search button
Pogledajmo sada stvarnu radnju, a to je klik na gumb Pretraži. Datoteka implementacije koraka potražit će gumb za pretraživanje i kliknuti ga kako bi izvršila korak scenarija.
Kôd za ovaj korak izgleda kako je prikazano u nastavku:
(When(@'I press the search button')) public void WhenIPressTheSearchButton() { var searchButton = chromeDriver.FindElementByCssSelector('button#search-icon-legacy'); searchButton.Click(); }
# 3) Konačno korak potvrde:
Then I should navigate to search results page
U ovom koraku upravo provjeravamo iz svojstava upravljačkog programa da li URL i naslov stranice sadrže ključnu riječ za pretraživanje ili ne.
Kôd za ovaj korak prikazan je u nastavku:
(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šenje
Pokušajmo sada izvršiti Scenarij i vidjeti rezultate. Nakon izvršavanja scenarija, svi koraci scenarija izvršavat će se sekvencijalno. Test će biti otvaranje preglednika, navigacija do web mjesta i izvršavanje neke radnje.
Rezultat testa može se vidjeti klikom na gumb „Izlaz“ iz sažetka testa koji prikazuje uspjeh / neuspjeh svakog pojedinog koraka.
Savjeti
Koraci srednjeg neuspjeha
U slučaju da Scenarij ima posredne korake koji ne uspiju, imajte na umu da u tim scenarijima Specflow jednostavno neće izvršiti preostale korake tog Scenarija te će rezultat testa označiti kao neuspjeli.
java intervju kodiranje pitanja i odgovori
Pokretanje testova s NUnit adapterom
Za ovaj smo primjer izvršili naše testove pomoću pokretačkog programa Specflow.NUnit (koji smo instalirali putem Nuget Package Manager).
Ovo se na nekoliko načina razlikuje, kao što je prikazano u nastavku od pokretača Specrun koji smo koristili u prethodnom članku.
- Pokretač Specflow.NUnit je otvoreni izvor.
- Ne uvodi kašnjenje tijekom izvođenja testova.
Zaključak
U ovom smo članku vidjeli kraj do kraja primjera Integracije selena s okvirom Specflow kroz jednostavan testni scenarij pretraživanja videozapisa u aplikaciji Youtube.
Tijekom integracije selena, također smo prošli kroz način dijeljenja podataka u različitim vezama kroz polja privatne klase. Također smo pokrili provođenje testa na NUnit trkaču protiv Specrun trkača i detaljno usporedili oba.
Datoteke koda
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; } } } }
Pazite na naš predstojeći vodič da biste saznali više o zajedničkim vezama, kukama i ponovnoj upotrebi koraka u Specflowu!
PREV Vodič | SLJEDEĆA Vodič
Preporučena literatura
- Vodič za krastavac selenij: Integracija Java Selenium WebDriver krastavaca
- Uvod u Selenium WebDriver - Vodič za selen br. 8
- Integracija Jenkinsa s Selenium WebDriver: Vodič korak po korak
- Implementacija naše prve skripte WebDriver - Vodič br. 10 za Selenium WebDriver
- Kako postupati s upozorenjima / skočnim prozorima u programu Selenium WebDriver - Vodič za selenij br. 16
- Cjelokupno postavljanje i instaliranje WebDriver-a s Eclipseom - Vodič za selen br. 9
- Provjerite vidljivost web elemenata pomoću različitih tipova naredbi WebDriver - Vodič za selenij # 14
- Vodič za GeckoDriver Selenium: Kako koristiti GeckoDriver u projektima Selenium