specflow selenium webdriver end end example
Пример коришћења Спецфлов & Селениум Вебдривер: крај до краја:
У ово Бесплатна серија обуке Спецфлов , до Кратки увод о Спецфлов-у је дато у нашем претходном водичу.
У овом чланку видећемо пример коришћења БДД спецификација заснованих на Спецфлов-у и тестови ће се изводити путем Селениум Вебдривер-а.
Тестови могу бити једноставни као тестирање функционалности пријаве за пријаву. Управо то, описаћемо те тестове помоћу Спецфлов-а, а имплементације Корака користиће покретачки програм и наредбе Селениум и НУнит као оквир за утврђивање.
Такође ћемо користити Спецфлов покретач заснован на НУнит-у (за разлику од Спецруна који није отворени извор и уводи случајно кашњење у бесплатној верзији).
Шта ћете научити:
Видео лекције: Спецфлов и селен
Погледајте видео водич о Спецфлов-у и Селенијуму:
ка питања и одговори на разговору за посао
Хајде да почнемо.
Да започнемо, креирајмо Унит тест Пројецт у Висуал Студио-у и инсталирајмо следеће предуслове:
# 1) Направите пројекат јединичног теста
Инсталирајте Нугет пакет за Нунит и Спецфлов.
Install-Package Specflow.NUnit
# 2) Инсталирајте Селениум-ов Вебдривер за Цхроме прегледач.
Ово се може инсталирати и преко конзоле Нугет Пацкаге Манагер преко наредбе у наставку.
Install-Package Selenium.WebDriver.ChromeDriver
# 3) Инсталирајте библиотеке Селениум Вебдривер и помагаче за чекање Селениум за додавање очекиваних услова чекања.
Install-Package Selenium.WebDriver Install-Package DotNetSeleniumExtras.WaitHelpers
# 4) Сада уклоните датотеку тест.цс из пројекта који је аутоматски креиран.
Овај корак радимо да бисмо избегли забуну јер ћемо за Спецфлов користити датотеке карактеристика и датотеке дефиниције корака.
# 5) Направите фасцикле за функције и дефиниције корака за чување датотека за имплементацију карактеристика и корака.
Ово није обавезан корак, али је користан за организовање функција и примена корака у одвојеним директоријумима.
# 6) На крају горњих корака, структура решења и пакети.цонфиг треба да изгледају као што је приказано доле.
Имплементација карактеристика и корака
Сада кренимо са датотеком карактеристика и стварном имплементацијом корака.
О својству - Пример функције биће тестирање / потврђивање функционалности претраживања Иоутубе веб странице. Тражићемо кључну реч и тврдити да је корисник преусмерен на страницу резултата претраге.
Додајте нову датотеку са карактеристикама и назовите је као ИоутубеСеарцхФеатуре.феатуре
Додајте сценариј функционалности претраживања и опис функције као што је приказано испод:
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
Горњи сценарио очекује да тест:
- Идите на Иоутубе веб локацију: За ово ће бити потребан оквир за аутоматизацију Веба као што је Селениум, који ће користити Вебдривер за навигацију до веб странице у прегледачу.
- Потражите кључну реч: Овај корак ће укључивати тражење одговарајућих елемената за унос и тастера како бисте унели кључну реч и извршили претрагу.
- Тврдите да су резултати претраге приказани и да се корисник налази на страници резултата: Овај корак ће укључивати тврдње око провере да ли је корисник слетео на исправну страницу.
Сада да видимо примене корака сваког од корака.
Пре тога, хајде да схватимо како ћемо интегрисати логику / код Селениум у постојећу дефиницију Спецфлов.
Селен или било који други алат (или јединице за тестирање блокова / макете / управљачки програми итд.) су у основи посредни део извршења корака, али кључна ствар коју треба разумети је начин интеграције оба ова оквира.
Спецфлов омогућава корисницима да напишу спецификације теста. Не диктира алат који треба користити. Стога је програмер теста слободан да изабере онолико алата за тестирање колико жели да зависи од случаја употребе који се решава.
Да бисмо користили селен у овом сценарију, потребно нам је следеће:
- Примерак ВебДривер-а (користићемо ЦхромеДривер ради једноставности), који ће омогућити кориснику да стварно крене до веб странице помоћу прегледача према имплементацији управљачког програма.
- Неколико декларација ВебЕлемент (и може се урадити само као део имплементација корака) које су потребне за интеракцију са корисником и прослеђивање уноса и извршавање радњи итд.
- Неколико тврдњи о наслову прозора, УРЛ-овима итд. Које се могу извршити на инстанци управљачког програма.
Створићемо инстанцу ЦхромеВебдривер-а у датотеци Степ Имплементатионс.
Стога, креирајмо датотеку Дефиниција корака. Као што смо видели у прошлом чланку, Спецфлов пружа механизам за аутоматско генерисање дефиниција корака (који се касније могу прилагодити / изменити по потреби).
- Дођите до датотеке са карактеристикама, кликните десним тастером миша и одаберите „Генериши дефиниције корака“.
- Направите нову датотеку у фасцикли СтепДефинитионс као што смо раније креирали и дајте јој назив ИоутубеСеарцхФеатуреСтепс.цс
- Уверите се да су сви кораци сценарија на одговарајући начин везани за дефиниције корака.
Савет - Измена дефиниција аутоматски генерисаних корака:
Сада ако пажљиво посматрате, дефиниција корака која је генерисана за наш корак кључне речи за претрагу, тј. „Унео сам Индију као кључну реч за претрагу“ аутоматски генерисани код, не идентификује / раздваја кључну реч за претрагу и стога је не параметерише.
[Given(@&'I have entered India as search keyword')] public void GivenIHaveEnteredIndiaAsSearchKeyword() { ScenarioContext.Current.Pending(); }
Али то није оно што желимо. Потребна нам је параметризација кључне речи за претрагу, у супротном, за свако претраживање кључне речи мораћемо да направимо прилагођену дефиницију корака.
Дакле, да видимо, како да ову дефиницију корака модификујемо у општију, што ће омогућити параметеризацију кључне речи за претрагу. То се може постићи једноставним подударањем регуларних израза.
Погледајте доњи узорак кода. Кључну реч за претрагу заменили смо помоћу подударања регуларних израза, тј. „ (. *) ”Ово што ће урадити је да ће заменити вредност било које кључне речи коју ћете проследити из Сценарија и подесити вредност кључне речи за претрагу у улазном параметру под називом„ сеарцхСтринг ”у доњем узорку кода.
[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
Оба ова корака укључују интеракцију са инстанцом управљачког програма. Први корак се отвара у прозору прегледача и води до веб локације иоутубе
Други корак тражи дугме за унос претраживања и уводи „Индија“ као кључну реч за претрагу.
Испод је примена оба ова корака:
[[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); }
За први корак, уочите тврдњу да осигурава успешну навигацију до иоутубе-а тако што ћете проверити наслов прозора.
Белешка: Постоје различити начини постављања тврдњи на различите веб елементе или својства управљачког програма, али крајњи циљ овог водича је само илустрација на најједноставнији начин.
У другом кораку додали смо динамичко чекање користећи Очекивани услови што ће осигурати да је оквир за претрагу видљив пре него што код покуша да унесе кључну реч за претрагу.
Такође, сеарцхСтринг чувамо у претрага приватног пољаКључна реч. То је учињено тако да се сеарцхКеиворд може користити и у другим имплементацијама Корака.
Савет - Преношење података преко степеница
Прослеђивање / чување података овим приступом (тј. Кроз променљиве класе) је једно од средстава путем којих се подаци могу делити у везивању корака.
Постоје и други начини да се то уради, као што и Спецфлов пружа динамички објект речника назван СценариоЦонтект. Више детаља о томе видећемо у наредним чланцима.
# 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
У овом кораку управо проверавамо из својстава управљачког програма да ли УРЛ и наслов странице садрже кључну реч за претрагу или не.
Код за овај корак приказан је испод:
[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)); }
Извршење
Покушајмо сада да извршимо Сценариј и видимо резултате. Након извршавања сценарија, сви кораци сценарија извршават ће се секвенцијално. Тест ће бити отварање прегледача, навигација до веб странице и извршавање неке радње.
Резултат теста се може видети кликом на дугме „Излаз“ из резимеа теста који показује успех / неуспех сваког појединачног корака.
Савети
Кораци средњег неуспеха
У случају да Сценарио има посредне кораке који не успију, имајте на уму да у тим сценаријима Спецфлов једноставно неће извршити ниједан преостали Корак тог Сценарија и резултат теста ће означити као неуспешан.
најбоља компанија за опоравак података са тврдог диска
Покретање тестова са НУнит адаптером
За овај Пример смо извршили наше тестове помоћу покретачког програма Спецфлов.НУнит (који смо инсталирали преко Нугет Пацкаге Манагер).
Ово се на неколико начина разликује, као што је приказано у наставку од Спецрун тркача који смо користили у претходном чланку.
- Покретач Спецфлов.НУнит је отвореног кода.
- Не уводи никакво одлагање током извршавања тестова.
Закључак
У овом чланку видели смо пример интегрисања селена у оквир Спецфлов кроз једноставан тест сценарија видео претраге у апликацији Иоутубе.
Током интеграције селена, такође смо прошли кроз начин дељења података кроз различите везе кроз поља приватне класе. Такође смо покрили извођење теста на НУнит тркачу против Спецрун тркача и детаљно упоредили оба.
Цоде Филес
ИоутубеСеарцхФеатуре.феатуре
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
ИоутубеСеарцхФеатуреСтепс.цс
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; } } } }
Пазите на наш предстојећи водич да бисте сазнали више о заједничким везама, кукама и поновној употреби корака у Спецфлов-у!
ПРЕВ Туториал |. | СЛЕДЕЋА Лекција
Препоручено читање
- Водич за краставац селениј: Интеграција Јава Селениум ВебДривер краставца
- Увод у Селениум ВебДривер - Водич за селен бр. 8
- Интеграција Јенкинса са Селениум ВебДривер: Водич корак по корак
- Примена наше прве скрипте за ВебДривер - Водич бр. 10 за Селениум ВебДривер
- Како се рукује упозорењима / искачућим прозорима у програму Селениум ВебДривер - Водич за селен # 16
- Целокупно подешавање и инсталирање ВебДривер-а помоћу програма Ецлипсе - Водич за селен бр. 9
- Проверите видљивост веб елемената помоћу различитих типова ВебДривер команди - Селен Туториал # 14
- Водич за ГецкоДривер Селениум: Како се користи ГецкоДривер у пројектима Селениум