Оквир за аутоматизацију селена: вођен подацима, вођен кључним речима & амп; Хибрид

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

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

Селениум ВебДривер креира углавном три врсте оквира за аутоматизацију ручних тест случајева

  • Оквир за тестирање на основу података
  • Оквир за тестирање на основу кључних речи
  • Хибридни тестни оквир

Оквир вођен подацима у селену

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

За читање или писање Екцел-а, Апацхе пружа врло познату ПОИ библиотеку. Ова библиотека је довољно способна за читање и писање КСЛС и КСЛСКС формата датотека програма Екцел.

ПОИ библиотека омогућава читање КСЛС датотека, имплементацију ХССФ-а .

Да бисте прочитали КСЛСКС, КСССФ имплементација ПОИ библиотеке ће бити избор. Проучимо ове примене детаљно.

О тестирању на основу података већ смо сазнали у нашем претходном водичу

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

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

Ево како изгледа комплетни оквир

Као што видите, то је оквир од 5 корака. Хајде да га детаљно проучимо

Корак 1)

  • Скрипта управљачког програма Екецуте.јава позват ће РеадГуру99ЕкцелФиле.јава
  • РеадГуру99ЕкцелФиле.јава има ПОИ скрипту за читање података из Екцела

Корак 2)

  • РеадГуру99ЕкцелФиле.јава ће читати податке из ТестЦасе.клск
  • Ево како лист изгледа-
  • Према кључним речима написаним у Екцел датотеци, оквир ће извршити операцију на корисничком интерфејсу.
  • На пример, треба да кликнемо на дугме „Пријави се“. Сходно томе, наш Екцел ће имати кључну реч „Кликните“. Сада АУТ може имати стотине тастера на страници, да би идентификовао дугме за пријаву, у Екцел ћемо унети Име објекта као логинБуттон и тип објекта као име (погледајте означени ред на горњој слици). Тип објекта може бити Кспатх, име ЦСС или било која друга вредност

Корак 3) РеадГуру99ЕкцелФиле.јава проследиће ове податке скрипти управљачког програма Екецуте.јава

Корак 4)

  • За све наше веб елементе корисничког интерфејса морамо да направимо спремиште објеката у које ћемо сместити њихов локатор елемената (попут Кспатх, име, ЦСС путања, име класе итд.)
  • Екецуте.јава (наша скрипта управљачког програма) прочитаће читаво Спремиште објеката и сачуваће га у променљивој
  • Да бисмо прочитали ово спремиште објеката, потребна нам је класа РеадОбјецт која има метод гетОбјецтРепоситори да га прочита.

НАПОМЕНА: Можда помислите зашто нам је потребно да креирамо спремиште објеката. Одговор помаже у одржавању кода. На пример, користимо дугме са наме = бтнлогин у 10 различитих тест случајева. У будућности програмер одлучује да промени име из бтнлогин да би га послао. Мораћете да направите промену у свих 10 тест случајева. У случају објектног спремишта, промену ћете извршити само једном у спремишту.

Корак 5)

  • Возач ће проследити податке из Екцел & Објецт Репоситори у класу УИОператион
  • Класа УИОператион има функције за извршавање радњи које одговарају кључним речима као што су КЛИК, СЕТТЕКСТ итд. Које се помињу у екцелу
  • Класа УИОператион је Јава класа која има стварну имплементацију кода за обављање операција на веб елементима

Комплетни пројекат ће изгледати као-

Погледајмо пример:

Тест Сценарио

  • Извршавамо 2 тест случаја
  • Тест случај 1:
  • Иди на хттп://демо.гуру99.цом/В4/
  • Унесите ИД корисника
  • Унесите лозинку
  • Кликните на Ресетуј
  • Тест случај 2:
  • Иди на хттп://демо.гуру99.цом/В4/
  • Унесите ИД корисника
  • Унесите лозинку
  • Кликните на Логин

објект.својства

урл = хттп: //демо.гуру99.цом/В4/

усернаме = уид

лозинка = лозинка

наслов = бароне

логинБуттон = бтнЛогин

ресетБуттон = бтнРесет

РеадГуру99ЕкцелФиле.јава

пакет екцелЕкпортАндФилеИО;импорт јава.ио.Филе;импорт јава.ио.ФилеИнпутСтреам;импорт јава.ио.ИОЕкцептион;импорт орг.апацхе.пои.хссф.усермодел.ХССФВоркбоок;импорт орг.апацхе.пои.сс.усермодел.Схеет;импорт орг.апацхе.пои.сс.усермодел.Воркбоок;импорт орг.апацхе.пои.кссф.усермодел.КСССФВоркбоок;јавна класа РеадГуру99ЕкцелФиле {јавни лист реадЕкцел (Стринг филеПатх, Стринг филеНаме, Стринг схеетНаме) баца ИОЕкцептион {// Стварање објекта класе Филе за отварање клск датотекеДатотека датотеке = нова датотека (филеПатх + "\\" + филеНаме);// Створимо објекат класе ФилеИнпутСтреам за читање екцел датотекеФилеИнпутСтреам инпутСтреам = нови ФилеИнпутСтреам (датотека);Радна свеска гуру99Воркбоок = нулл;// Пронађите екстензију датотеке тако што ћете поделити име датотеке у субстингу и добити само име екстензијеСтринг филеЕктенсионНаме = филеНаме.субстринг (филеНаме.индекОф ("."));// Провери стање да ли је датотека клск датотекаиф (филеЕктенсионНаме.екуалс (". клск")) {// Ако је датотека клск, онда креирајте објекат класе КСССФВоркбоокгуру99Воркбоок = нова КСССФВоркбоок (инпутСтреам);}// Провери стање да ли је датотека клс датотекаиначе ако (филеЕктенсионНаме.екуалс (". клс")) {// Ако је датотека клс, онда креирајте објекат класе КСССФВоркбоокгуру99Воркбоок = нова ХССФВоркбоок (инпутСтреам);}// Читање листа у радној свесци под његовим називомЛист гуру99Схеет = гуру99Воркбоок.гетСхеет (листНаме);ретурн гуру99Схеет;}}

РеадОбјецт.јава

рад пакета;импорт јава.ио.Филе;импорт јава.ио.ФилеИнпутСтреам;импорт јава.ио.ИОЕкцептион;импорт јава.ио.ИнпутСтреам;импорт јава.утил.Пропертиес;јавни разред РеадОбјецт {Својства п = нова својства ();јавна својства гетОбјецтРепоситори () баца ИОЕкцептион {// Читање датотеке спремишта објекатаИнпутСтреам стреам = нови ФилеИнпутСтреам (нови Филе (Систем.гетПроперти ("усер.дир") + "\\ срц \\ објецтс \\ објецт.пропертиес"));// учитавање свих објекатап.лоад (ток);ретурн п;}}

УИОператион.јава

рад пакета;импорт јава.утил.Пропертиес;импорт орг.опенка.селениум.Би;импорт орг.опенка.селениум.ВебДривер;јавни разред УИОператион {Управљачки програм за ВебДривер;јавни УИОператион (управљачки програм за ВебДривер) {тхис.дривер = управљачки програм;}јавна воид изведба (Својства п, Низ радња, Низ име објекта, Стринг објектТип, вредност низа) баца изузетак {Систем.оут.принтлн ("");прекидач (оператион.тоУпперЦасе ()) {случај "КЛИК":// Извршите кликдривер.финдЕлемент (тхис.гетОбјецт (п, објецтНаме, објецтТипе)). цлицк ();пауза;случај "СЕТТЕКСТ":// Постављање текста на контролудривер.финдЕлемент (тхис.гетОбјецт (п, објецтНаме, објецтТипе)). сендКеис (валуе);пауза;случај "ГОТОУРЛ":// Набавите УРЛ апликациједривер.гет (п.гетПроперти (валуе));пауза;случај "ГЕТТЕКСТ":// Добијање текста елементадривер.финдЕлемент (тхис.гетОбјецт (п, објецтНаме, објецтТипе)). гетТект ();пауза;Уобичајено:пауза;}}/ *** Пронађите елемент помоћу типа објекта и вредности* @парам п* @парам објецтНаме* @парам објецтТипе* @ повратак* @тхровс Изузетак* /привате Би гетОбјецт (Својства п, СтрингНаме објекта, Стринг објецтТипе) баца изузетак {// Пронађи по кпатхиф (објецтТипе.екуалсИгнореЦасе ("КСПАТХ")) {ретурн Би.кпатх (п.гетПроперти (објецтНаме));}// пронађи по класиелсе иф (објецтТипе.екуалсИгнореЦасе ("ЦЛАССНАМЕ")) {ретурн Би.цлассНаме (п.гетПроперти (објецтНаме));}// пронађи по именуелсе иф (објецтТипе.екуалсИгнореЦасе ("НАМЕ")) {ретурн Би.наме (п.гетПроперти (објецтНаме));}// Пронађи цсселсе иф (објецтТипе.екуалсИгнореЦасе ("ЦСС")) {ретурн Би.цссСелецтор (п.гетПроперти (објецтНаме));}// пронађи путем везеелсе иф (објецтТипе.екуалсИгнореЦасе ("ЛИНК")) {ретурн Би.линкТект (п.гетПроперти (објецтНаме));}// пронађи делимичном везомелсе иф (објецтТипе.екуалсИгнореЦасе ("ПАРТИАЛЛИНК")) {ретурн Би.партиалЛинкТект (п.гетПроперти (објецтНаме));} елсе{бацити нови изузетак („Погрешан тип објекта“);}}}

ЕкецутеТест.јава

пакет тестЦасес;импорт јава.утил.Пропертиес;операција увоза.РеадОбјецт;операција увоза.УИОператион;импорт орг.апацхе.пои.сс.усермодел.Ров;импорт орг.апацхе.пои.сс.усермодел.Схеет;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.фирефок.ФирефокДривер;импорт орг.тестнг.аннотатионс.Тест;импорт екцелЕкпортАндФилеИО.РеадГуру99ЕкцелФиле;јавна класа ЕкецутеТест {@Тестпублиц воид тестЛогин () баца изузетак {// ТОДО Аутоматски генерисани квар методеВебДривер вебдривер = нови ФирефокДривер ();РеадГуру99ЕкцелФиле филе = нови РеадГуру99ЕкцелФиле ();РеадОбјецт објект = нови РеадОбјецт ();Својства аллОбјецтс = објецт.гетОбјецтРепоситори ();УИОператион операција = нова УИОператион (вебдривер);// Читање листа кључних речиЛист гуру99Схеет = филе.реадЕкцел (Систем.гетПроперти ("усер.дир") + "\\", "ТестЦасе.клск", "КеивордФрамеворк");// Пронађи број редова у екцел датотециинт ровЦоунт = гуру99Схеет.гетЛастРовНум () - гуру99Схеет.гетФирстРовНум ();// Направите петљу преко свих редова екцел датотеке да бисте је прочиталифор (инт и = 1; и <ровЦоунт + 1; и ++) {// Петља преко свих редоваРед реда = гуру99Схеет.гетРов (и);// Проверите да ли прва ћелија садржи вредност, ако је одговор да, то значи да је то ново име тестцасе-аиф (ров.гетЦелл (0) .тоСтринг (). ленгтх () == 0) {// Испис детаља тестцасе на конзолиСистем.оут.принтлн (ров.гетЦелл (1) .тоСтринг () + "----" + ров.гетЦелл (2) .тоСтринг () + "----" +ров.гетЦелл (3) .тоСтринг () + "----" + ров.гетЦелл (4) .тоСтринг ());// Позив за извођење функције за извођење операције на корисничком интерфејсуоператион.перформ (аллОбјецтс, ров.гетЦелл (1) .тоСтринг (), ров.гетЦелл (2) .тоСтринг (),ров.гетЦелл (3) .тоСтринг (), ров.гетЦелл (4) .тоСтринг ());}елсе {// Одштампајте ново име примерака када је покренутоСистем.оут.принтлн ("Нова тест кутија ->" + ров.гетЦелл (0) .тоСтринг () + "Започето");}}}}

Након извршења, излаз ће изгледати као -

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

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

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

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

Овде у нашем хибридном оквиру не морамо ништа да мењамо у оквиру који покреће кључне речи, овде само треба да заменимо датотеку ЕкецутеТест.јава датотеком ХибридЕкецутеТест.јава.

Ова датотека ХибридЕкецутеТест садржи сав код за кључне речи вођене концептом добављача података.

Изгледаће комплетни сликовни приказ хибридног оквира

ХибридЕкецутеТест.јава

пакет тестЦасес;импорт јава.ио.ИОЕкцептион;импорт јава.утил.Пропертиес;операција увоза.РеадОбјецт;операција увоза.УИОператион;импорт орг.апацхе.пои.сс.усермодел.Ров;импорт орг.апацхе.пои.сс.усермодел.Схеет;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.фирефок.ФирефокДривер;импорт орг.тестнг.аннотатионс.ДатаПровидер;импорт орг.тестнг.аннотатионс.Тест;импорт екцелЕкпортАндФилеИО.РеадГуру99ЕкцелФиле;јавна класа ХибридЕкецутеТест {ВебДривер вебдривер = нулл;@Тест (датаПровидер = "хибридДата")јавна неважећа тестЛогин (Стринг тестцасеНаме, Стринг кључна реч, СтрингНаме објекта, Стринг објецтТипе, Стринг вредност) баца изузетак {// ТОДО Аутоматски генерисани квар методеиф (тестцасеНаме! = нулл && тестцасеНаме.ленгтх ()! = 0) {вебдривер = нови ФирефокДривер ();}РеадОбјецт објект = нови РеадОбјецт ();Својства аллОбјецтс = објецт.гетОбјецтРепоситори ();УИОператион операција = нова УИОператион (вебдривер);// Позив за извођење функције за извођење операције на корисничком интерфејсуоператион.перформ (аллОбјецтс, кеиворд, објецтНаме,објецтТипе, валуе);}@ДатаПровидер (наме = "хибридДата")јавни објект [] [] гетДатаФромДатапровидер () баца ИОЕкцептион {Објект [] [] објект = нулл;РеадГуру99ЕкцелФиле филе = нови РеадГуру99ЕкцелФиле ();// Читање листа кључних речиЛист гуру99Схеет = филе.реадЕкцел (Систем.гетПроперти ("усер.дир") + "\\", "ТестЦасе.клск", "КеивордФрамеворк");// Пронађи број редова у екцел датотециинт ровЦоунт = гуру99Схеет.гетЛастРовНум () - гуру99Схеет.гетФирстРовНум ();објецт = нев Објецт [ровЦоунт] [5];за (инт и = 0; и <ровЦоунт; и ++) {// Петља преко свих редоваРед реда = гуру99Схеет.гетРов (и + 1);// Стварање петље за испис вредности ћелија у низуза (инт ј = 0; ј <ров.гетЛастЦеллНум (); ј ++) {// Штампање података Екцел у конзолиобјект [и] [ј] = ров.гетЦелл (ј) .тоСтринг ();}}Систем.оут.принтлн ("");ретурн објецт;}}

Резиме:

  • Помоћу Селениум ВебДривер можемо створити три врсте тест оквира.
  • То су Дата Дривен, Кеиворд Дривен и Хибрид тест фрамеворк.
  • Оквир заснован на подацима можемо постићи помоћу добављача података компаније ТестНГ.
  • У оквиру вођеном кључним речима кључне речи су записане у неким спољним датотекама, као што је екцел датотека, а јава код ће позвати ову датотеку и извршити тест случајеве.
  • Хибридни оквир је комбинација оквира на основу кључних речи и података.

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

Занимљиви Чланци...