Изградња оквира за управљање подацима, кључним речима и хибридним селенским оквиром

Овај блог објашњава шта је оквир Селениум, његове предности и како применити оквире вођене подацима, кључне речи и хибридни оквир у селену.

Претходна у овој серији су вам изложили основне концепте у тестирању селена.Међутим, на овом блогу ћу вам рећи како да користите оквир Селениум за оптимизацију структуре кода и ово ће вас приближити да постанете .

Шта је оквир селена?

Селениум фрамеворк је структура кода за поједностављивање одржавања кода и бољу читљивост кода. Оквир укључује разбијање целокупног кода на мање делове кода, који тестирају одређену функционалност.



Код је структуриран тако да је „скуп података“ одвојен од стварног „тест случаја“ који ће тестирати функционалност веб апликације. Такође може бити структуриран на начин на који се тест случајеви које треба извршити позивају (позивају) из спољне апликације (попут .цсв).

руковање изузетцима у орацле сачуваној процедури

Постоји велики број оквира, али 3 најчешће коришћена оквира Селениум су:



О овим оквирима ће се разговарати са демонстрацијом на овом блогу. Али пре него што наставим даље, дозволите ми да вам кажем зашто оквир Селениум мора да постоји и какве ћете користи имати од њиховог коришћења.

Зашто нам је потребан оквир селена?

Без постављеног оквира, постојаће један тест случај који ће обухватати целокупну функционалност теста. Застрашујуће је то што овај јединствени тестни случај може да повећа до милион редова кода. Дакле, прилично је очигледно да ће тако тежак тест бити тешко прочитати. Чак и ако касније желите да измените било коју функционалност, биће вам тешко да измените код.

Будући да ће примена оквира резултирати мањим, али вишеструким деловима кода, постоје разне користи.



Предности селенског оквира

  • Повећана поновна употреба кода
  • Побољшана читљивост кода
  • Већа преносивост
  • Смањена скриптаодржавање

Сад кад знате основе оквира, дозволите ми да детаљно објасним сваки од њих.

Дата Дривен Фрамеворк

Оквир вођен подацима у Селенијуму је техника одвајања „скупа података“ од стварног „тест случаја“ (кода). Овај оквир у потпуности зависи од улазних података о испитивању. Подаци о тесту се достављају из спољних извора као што су екцел датотека, .ЦСВ датотека или било која база података.

дата дривен фрамеворк - селениум фрамеворк - едурека

Будући да је тест случај одвојен од скупа података, можемо лако да модификујемо тест одређене функције без вршења велепродајних промена у вашем коду. На пример, ако желите да измените код за функционалност пријаве, тада можете да измените управо то, уместо да морате да измените било који други зависни део у истом коду.

Поред тога, такође можете лако контролисати колико података треба тестирати. Можете лако повећати број тестних параметара додавањем додатних поља за корисничко име и лозинку у екцел датотеку (или друге изворе).

На пример, ако морам да проверим пријаву на веб страницу, тада могу да чувам скуп акредитива за корисничко име и лозинку у екцел датотеци и да их проследим коду да бих извршио аутоматизацију у прегледачу у засебној датотеци Јава класе.

Коришћење Апацхе ПОИ са Селениум ВебДривер

ВебДривер не подржава директно читање екцел датотека. Отуда користимо Апацхе ПОИ за читање / писање у било који Мицрософт Оффице документ. Апацхе ПОИ (скуп ЈАР датотека) можете преузети са овде . Преузмите зип датотеку или тар датотеку према вашим захтевима и ставите их заједно са сетом Селениум ЈАР-ова.

који су 6 начина за употребу ове кључне речи?

Побринуће се за координацију између главног кода и скупа података ТестНГ добављачи података, која је библиотека која долази као део датотека Апацхе ПОИ ЈАР. У демо сврхе креирао сам екцел датотеку под називом „ЛогинЦредентиалс“ у којој су корисничка имена и лозинке смештени у различите колоне.

Погледајте доњи код да бисте разумели тест случај. То је једноставан код за тестирање функционалности пријаве апликације за резервацију лета.

пакет ДатаДривен импорт орг.опенка.селениум.Би импорт орг.опенка.селениум.цхроме.ЦхромеДривер импорт орг.тестнг.Ассерт импорт орг.тестнг.аннотатионс.АфтерМетход импорт орг.тестнг.аннотатионс.ДатаПровидер импорт орг.тестнг.аннотатионс.Тест јавна класа ДДТЕкцел {ЦхромеДривер дривер @Тест (датаПровидер = 'тестдата') публиц воид ДемоПројецт (корисничко име низа, лозинка низа) баца ИнтерруптедЕкцептион {Систем.сетПроперти ('вебдривер.цхроме.дривер', 'Ц: УсерсВардханДовнлоадсцхромедривер.еке') нови ЦхромеДривер () дривер.гет ('хттп://невтоурс.демоаут.цом/') дривер.финдЕлемент (Би.наме ('усерНаме')). сендКеис (корисничко име) дривер.финдЕлемент (Би.наме ('лозинка') )). сендКеис (лозинка) дривер.финдЕлемент (Би.наме ('логин')). цлицк () Тхреад.слееп (5000) Ассерт.ассертТруе (дривер.гетТитле (). матцхес ('Финд а Флигхт: Мерцури Тоурс: '),' Неважећи акредитиви ') Систем.оут.принтлн (' Пријава успешна ')} @АфтерМетход воид ПрограмТерминатион () {дривер.куит ()} @ДатаПровидер (наме =' тестдата ') јавни објекат [] [] ТестДа таФеед () {РеадЕкцелФиле цонфиг = нев РеадЕкцелФиле ('Ц: УсерсВардханворкспацеСелениумЛогинЦредентиалс.клск') инт редови = цонфиг.гетРовЦоунт (0) Објект [] [] акредитиви = нови Објект [редови] [2] за (инт и = 0и

Ако сте приметили одозго, имамо методу названу „ТестДатаФеед ()“. Овом методом креирао сам инстанцу објекта друге класе назване „РеадЕкцелФиле“. Током инстанцирања овог објекта убацио сам пут моје екцел датотеке која садржи податке. Даље сам дефинисао фор петљу за преузимање текста из екцелове радне свеске.

Али, за читање података са датог броја листа, броја колоне и броја реда, позиви се упућују у класу „РеадЕкцелФиле“. Код мог „РеадЕкцелФиле“ је испод.

пакет ДатаДривен импорт јава.ио.Филе импорт јава.ио.ФилеИнпутСтреам импорт орг.апацхе.пои.кссф.усермодел.КСССФСхеет импорт орг.апацхе.пои.кссф.усермодел.КСССФВоркбоок јавна класа РеадЕкцелФиле {КСССФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСФФСКФВСКСФФСФФСФФСКФФСФФСФФСКФФСФФСФФСКФФСФФСФФФСФФСФФСФФСФФСФФФСФФФСВФ екцелПатх) {три {Филе срц = нев Филе (екцелПатх) ФилеИнпутСтреам фис = нев ФилеИнпутСтреам (срц) вб = нев КСССФВоркбоок (фис)} цатцх (Екцептион е) {Систем.оут.принтлн (е.гетМессаге ())}} публиц Стринг гетДата (инт схеетнумбер, инт ров, инт цолумн) {схеет = вб.гетСхеетАт (схеетнумбер) Стринг дата = схеет.гетРов (ров) .гетЦелл (цолумн) .гетСтрингЦеллВалуе () ретурн дата} публиц инт гетРовЦоунт (инт схеетИндек) { инт ред = вб.гетСхеетАт (схеетИндек) .гетЛастРовНум () ред = ред + 1 повратни ред}}

Прво забележите библиотеке које сам увезао. Ја сам увезао Апацхе ПОИ КСССФ библиотеке које се користе за читање / писање података у екцел датотеке. Овде сам креирао конструктор (објекат исте методе) за прослеђивање вредности: броја листа, броја реда и броја колоне. Да бих боље разумео овај оквир, тражим од вас да прођете кроз видео испод, где сам ово структурирано објаснио.

Оквир вођен подацима у програму Селениум ВебДривер | Водич за селен

Сада пређимо на оквир, тј. Оквир вођен кључним речима.

Оквир вођен кључним речима

Оквир вођен кључним речима је техника у којој су све радње и упутства која треба извршити написани одвојено од стварног тест случаја. Сличност коју има са Дата Дривен фрамеворк-ом је та што се операције које треба извршити поново чувају у спољној датотеци попут Екцел листа.

Операције о којима говорим нису ништа друго до методе које треба извршити као део тест случаја. Предност Фрамеворк Дривен фрамеворк-а је у томе што лако можете контролисати функционалности које желите да тестирате. Можете одредити методе које тестирају функционалност апликације у датотеци екцел. Дакле, тестираће се само она имена метода која су наведена у екцелу.

На пример, за пријављивање у веб апликацију можемо да напишемо више метода у главни тест случај, у којем ће сваки тест случај тестирати одређену функционалност. За инстанцирање управљачког програма прегледача може постојати један метод, за проналажење поља корисничког имена и лозинке могу постојати методе, за навигацију до веб странице може постојати други метод итд.

Погледајте доњи код да бисте разумели како изгледа оквир. Редови који су коментарисани у доњем коду служе као објашњење ако не разумете.

пакет КеивордДривен импорт орг.опенка.селениум.цхроме.ЦхромеДривер импорт орг.тестнг.Ассерт импорт орг.тестнг.аннотатионс.Тест импорт јава.утил.цонцуррент.ТимеУнит импорт орг.опенка.селениум.Би импорт орг.опенка.селениум.ВебДривер акције јавне класе {јавни статички управљачки програм ВебДривер јавна статичка празнина опенБровсер () {Систем.сетПроперти ('вебдривер.цхроме.дривер', 'Ц: УсерсВардханДовнлоадсцхромедривер.еке') дривер = нев ЦхромеДривер ()} публиц статиц воид навигате () {дривер .манаге (). тимеоутс (). имплицитлиВаит (10, ТимеУнит.СЕЦОНДС) дривер.гет ('хттп://невтоурс.демоаут.цом')} јавна статичка празнина инпут_Усернаме () {дривер.финдЕлемент (Би.наме (' усерНаме ')). сендКеис (' мерцури ')} публиц статиц воид инпут_Пассворд () {дривер.финдЕлемент (Би.наме (' пассворд ')). сендКеис (' мерцури ')} публиц статиц воид цлицк_Логин () {дривер.финдЕлемент (Би.наме ('логин')). Цлицк ()} @Тест публиц статиц воид верифи_логин () {Стринг пагеТитле = дривер.гетТитле () Ассерт.ассертЕкуалс (пагеТитле, 'Пронађи лет: Мерцури Тоурс : ')} јавна статичка воид цлосеБровсер () {дривер.куит ()}}

Као што видите, различите функционалности које треба тестирати присутне су у одвојеним методама које чекају да буду позване. Сада ће се ове методе позивати из друге класе, на основу присуства имена методе у екцел датотеци. И слично томе, да бих прочитао екцел датотеку и послао резултате, написао сам другу класу. Обоје су приказани у наставку.

Датотека класе која позива методе, је ово.

туторијал за информатику за почетнике пдф
пакет КеивордДривен јавна класа ДриверСцрипт {публиц статиц воид маин (Стринг [] аргс) баца изузетак {// Декларисање путање Екцел датотеке именом Екцел датотеке Стринг сПатх = 'Ц: УсерсВардханворкспацеСелениум Фрамеворкс ДемодатаЕнгине.клск' // овде прослеђујемо Екцел путању и СхеетНаме као аргументе за повезивање са Екцел датотеком РеадЕкцелДата.сетЕкцелФиле (сПатх, 'Схеет1') // За сада се користе Екцел тврде кодиране вредности за Екцел ред и колоне // Тешко кодиране вредности се користе за Екцел ред & колоне за сада // У каснијим поглављима заменићемо ове кодиране вредности варијаблама // Ово је петља за читање вредности колоне 3 (Ацтион Кеиворд) ред по ред за (инт иРов = 1иРов<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

А датотека класе која чита Екцел вредности је ово.

пакет КеивордДривен импорт јава.ио.ФилеИнпутСтреам импорт орг.апацхе.пои.кссф.усермодел.КСССФСхеет импорт орг.апацхе.пои.кссф.усермодел.КСССФВоркбоок импорт орг.апацхе.пои.кссф.усермодел.КСССФЦел јавна класа РеадЕкцел јавна класа РеадЕкцел КСССФСхеет ЕкцелВСхеет привате статиц КСССФВоркбоок ЕкцелВБоок привате статиц КСССФЦелл Целл // Ова метода треба да постави путању датотеке и отвори Екцел датотеку // Проследи Екцел Патх и СхеетНаме као аргументе овој методи јавна статичка празнина сетЕкцелФиле (Стринг Патх, Стринг СхеетНаме) баца Изузетак {ФилеИнпутСтреам ЕкцелФиле = нови ФилеИнпутСтреам (путања) ЕкцелВБоок = нови КСССФВоркбоок (ЕкцелФиле) ЕкцелВСхеет = ЕкцелВБоок.гетСхеет (СхеетНаме)} // Овај метод служи за читање података о тестовима из Екцел ћелије // У томе преносимо параметре / аргументе као редни број и Цол Нум јавни статички низ гетЦеллДата (инт РовНум, инт ЦолНум) баца изузетак {Целл = ЕкцелВСхеет.гетРов (РовНум) .гетЦелл (ЦолНум) Стринг ЦеллДата = Целл.гетСтрингЦеллВалуе () ретурн ЦеллДата}}

Сада пређимо на последњи део овог блока Селениум фрамеворк-а, где ћу вам показати како да направите хибридни фрамеворк.

Хибридни оквир

Хибридни оквир је техника у којој можемо на најбољи начин да искористимо и покретане подацима и кључне речи покретане селенијским оквирима. Користећи примере приказане горе на овом блогу, можемо да изградимо хибридни оквир чувањем метода за извршавање у екцел датотеци (приступ вођен кључним речима) и прослеђивањем ових имена метода Јава Рефлецтион Цласс (приступ вођен подацима) уместо да креира Ако друго петља у класи „ДриверСцрипт“.

Погледајте модификовану класу „ДриверСцрипт“ у доњем исечку кода.Овде се, уместо да се користи више петља Иф / Елсе, приступ вођен подацима користи за читање имена метода из екцел датотеке.

пакет ХибридФрамеворк импорт јава.ланг.рефлецт.Метход јавна класа ДриверСцриптЈава {// Ово је објект класе, декларисан као 'публиц статиц' // Тако да се може користити ван опсега главне [] методе публиц статиц Ацтионс ацтионКеивордс публиц статиц Стринг сАцтионс // Ово је објект класе рефлексије, декларисан као 'публиц статиц' // Тако да се може користити ван опсега главне [] методе публиц статиц Метход метход [] публиц статиц воид маин (Стринг [] аргс) баца изузетак {// Декларисање путање Екцел датотеке именом Екцел датотеке Стринг сПатх = 'Ц: УсерсВардханворкспацеСелениум Фрамеворкс ДемодатаЕнгине.клск' // Овде преносимо Екцел путању и СхеетНаме за повезивање са Екцел датотеком // Овај метод је створена раније РеадЕкцелДата.сетЕкцелФиле (сПатх, 'Схеет1') // За сада се користе Екцел-ови редови и колоне тврдо кодиране вредности // Касније ћемо ове тврдо кодиране вредности користити много ефикасније // Ово је петља за читање вредности реда колоне (Кључна реч акције) би ров // То значи да ће ова петља извршити све кораке поменуте за тест случај у листу Тест Степс фор (инт иРов = 1иРов<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

Да бих боље разумео овај концепт Дата Дривен, Кеиворд Дривен & Хибрид Дривен оквира, захтевам да погледате видео у наставку.

Селениум Фрамеворк користећи Јава | Водич за селен | Онлине тренинг за селен

Надам се да вам је овај блог био користан и да сте вам јасно разумели шта је оквир Селениум, како је користан и како изградити структуру кода помоћу ова 3 оквира Селениум. Пратите још блогова у овој серији.

Ако желите да научите селенијум и изградите каријеру у домени за тестирање, погледајте нашу интерактивну мрежу уживо овде долази са подршком од 24 * 7 која ће вас водити током читавог периода учења. Концепти повезани са „Селенијским оквиром“ детаљно покривају Едурекин курс.

Имате питање за нас? Молимо вас да то споменете у одељку за коментаре и јавићемо вам се.