Користећи Јава класу „мицласс“ коју смо креирали у претходном водичу, покушајмо да креирамо ВебДривер скрипту која би:
- дохватите почетну страницу Мерцури Тоурс-а
- проверити његов наслов
- одштампајте резултат поређења
- затворите га пре завршетка читавог програма.
ВебДривер код
Испод је стварни ВебДривер код за логику представљену горњим сценаријем
Напомена: Покрећући Фирефок 35, за коришћење веб управљачког програма морате користити гецко управљачки програм који је креирала Мозилла. Селениум 3.0, гецко и фирефок имају проблема са компатибилношћу и њихово правилно постављање може постати тежак задатак. Ако код не ради, вратите се на Фирефок верзију 47 или нижу. Можете и да покрећете своје скрипте на Цхроме-у. Селен делује ван оквира за Цхроме. Потребно је само да промените 3 реда кода да би скрипта радила са Цхроме-ом или Фирефок-ом
пакет невпројецт;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.фирефок.ФирефокДривер;// коментариши горњи ред и раскоментариши доњи ред да би користио Цхроме// увоз орг.опенка.селениум.цхроме.ЦхромеДривер;јавна класа ПГ1 {јавна статичка воид главна (Стринг [] аргс) {// декларација и инстанција објеката / променљивихСистем.сетПроперти ("вебдривер.гецко.дривер", "Ц: \\ гецкодривер.еке");Управљачки програм за ВебДривер = нови ФирефокДривер ();// коментариши горња 2 реда и коментариши испод 2 реда да би користио Цхроме//Систем.сетПроперти("вебдривер.цхроме.дривер","Г:\\цхромедривер.еке ");// управљачки програм за ВебДривер = нови ЦхромеДривер ();Стринг басеУрл = "хттп://демо.гуру99.цом/тест/невтоурс/";Стринг очекујеТитле = "Добродошли: Мерцури Тоурс";Стринг ацтуалТитле = "";// покрените Фире фок и усмерите га на основни УРЛдривер.гет (басеУрл);// добијемо стварну вредност насловаацтуалТитле = дривер.гетТитле ();/ ** упоредите стварни наслов странице са очекиваним и одштампајте* резултат као "прошао" или "није успео"* /иф (ацтуалТитле.цонтентЕкуалс (очекује се Наслов)) {Систем.оут.принтлн („Тест је положен!“);} остало {Систем.оут.принтлн („Тест није успео“);}// затвори Ватрена лисицадривер.цлосе ();}}
Објашњење кода
Увоз пакета
Да бисте започели, потребно је да увезете следећа два пакета:
- орг.опенка.селениум. * - садржи класу ВебДривер која је потребна за инстанцирање новог прегледача са одређеним управљачким програмом
- орг.опенка.селениум.фирефок.ФирефокДривер - садржи класу ФирефокДривер која је потребна за инстанцирање управљачког програма специфичног за Фирефок у прегледач који је покренула класа ВебДривер
Ако вашем тесту требају сложеније радње, попут приступа другој класи, прављења снимака екрана прегледача или манипулације спољним датотекама, дефинитивно ћете морати да увезете више пакета.
Инстанцирање објеката и променљивих
Обично се тако инстанцира објекат управљачког програма.
Класа ФирефокДривер без параметара значи да ће наш Јава програм покренути задати Фирефок профил. Подразумевани профил Фирефок-а сличан је покретању Фирефока у сигурном режиму (нису учитане екстензије).
Ради практичности, основни УРЛ и очекивани наслов сачували смо као променљиве.
Покретање сесије прегледача
Вебдривер с Гет () метода се користи за лансирање нове сесије прегледача и усмерава га на УРЛ који сте навели као свој параметар.
Добијте стварни наслов странице
Класа ВебДривер има методу гетТитле () која се увек користи за добијање наслова странице тренутно учитане странице.
Упоредите очекиване и стварне вредности
Овај део кода једноставно користи основну Јава-иф-елсе структуру за поређење стварног наслова са очекиваним.
Завршавање сесије прегледача
Метода „ цлосе () “ користи се за затварање прозора прегледача.
Укидање целог програма
Ако ову команду користите без претходног затварања свих прозора прегледача, цео ваш Јава програм ће се завршити док ће прозор прегледача бити отворен.
Покретање теста
Постоје два начина за извршавање кода у Ецлипсе ИДЕ.
- На траци менија програма Ецлипсе кликните Покрени> Покрени.
- Притисните Цтрл + Ф11 да бисте покренули цео код.
Ако сте све урадили исправно, Ецлипсе ће приказати „Тест Пассед!“
Лоцирање ГУИ елемената
Лоцирање елемената у ВебДриверу врши се помоћу методе „ финдЕлемент (Би. Лоцатор ()) “. Део кода „локатор“ је исти као и било који од локатора о којима је претходно било речи у поглављима Селениум ИДЕ ових водича. У ствари, препоручује се да пронађете елементе ГУИ-а помоћу ИДЕ-а и када једном успешно идентификујете, извозите код у ВебДривер.
Ево примера кода Селениум који лоцира елемент према његовом ид-у. Фацебоок се користи као основни УРЛ.
пакет невпројецт;импорт орг.опенка.селениум.Би;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.фирефок.ФирефокДривер;јавна класа ПГ2 {јавна статичка воид главна (Стринг [] аргс) {Систем.сетПроперти ("вебдривер.гецко.дривер", "Ц: \\ гецкодривер.еке");Управљачки програм за ВебДривер = нови ФирефокДривер ();Стринг басеУрл = "хттп://ввв.фацебоок.цом";Ознака низа = "";дривер.гет (басеУрл);тагНаме = дривер.финдЕлемент (Би.ид ("емаил")). гетТагНаме ();Систем.оут.принтлн (тагНаме);дривер.цлосе ();Систем.екит (0);}}
Користили смо методу гетТагНаме () за издвајање назива ознаке одређеног елемента чији је ид „е-пошта“. Када се покрене, овај код треба да буде у стању да правилно идентификује назив ознаке „улаз“ и исписаће га на прозору Ецлипсе-ове конзоле.
Резиме за лоцирање елемената
Варијација | Опис | Узорак |
---|---|---|
Од стране. Назив класе | проналази елементе на основу вредности атрибута „класа“ | финдЕлемент (Би.цлассНаме ("сомеЦлассНаме")) |
Од стране. цссСелецтор | проналази елементе на основу возачевог основног ЦСС Селецтор мотора | финдЕлемент (Би.цссСелецтор ("инпут # емаил")) |
Од стране. ид | лоцира елементе према вредности њиховог атрибута „ид“ | финдЕлемент (Би.ид ("сомеИд")) |
Од стране. линкТект | проналази елемент везе тачним текстом који приказује | финдЕлемент (Би.линкТект ("РЕГИСТРАЦИЈА")) |
Од стране. име | лоцира елементе по вредности атрибута „наме“ | финдЕлемент (Би.наме ("сомеНаме")) |
Од стране. делимичноЛинкТект | лоцира елементе који садрже дати текст везе | финдЕлемент (Би.партиалЛинкТект ("РЕГ")) |
Од стране. Означи име | лоцира елементе према имену ознаке | финдЕлемент (Би.тагНаме ("див")) |
Од стране. кпатх | лоцира елементе путем КСПатх-а | финдЕлемент (Би.кпатх ("// хтмл / боди / див / табле / тбоди / тр / тд [2] / табле / тбоди / тр [4] / тд / табле / тбоди / тр / тд [2] / табле / тбоди / тр [2] / тд [3] / форм / табле / тбоди / тр [5] ")) |
Напомена о коришћењу финдЕлемент (Би.цссСелецтор ())
Би.цссСелецтор () не подржава функцију „садржи“ . Узмите у обзир селениум ИДЕ код испод -
У горе наведеном селениум ИДЕ-у, целокупни тест је положен. Међутим, у скрипти Селениум ВебДривер у наставку, исти тест је генерисао грешку јер ВебДривер не подржава кључну реч „цонтаинс“ када се користи у методи Би.цссСелецтор ().
Цоммон Цоммандс
Инстанцирање веб елемената
Уместо да користимо дугачку синтаксу „дривер.финдЕлемент (Би.лоцатор ())“ сваки пут када приступите одређеном елементу, ми можемо за њега да направимо инстанцу објекта ВебЕлемент. Класа ВебЕлемент садржана је у пакету „орг.опенка.селениум. *“.
Клик на елемент
Кликање је можда најчешћи начин интеракције са веб елементима . Метода цлицк () користи се за симулацију кликања било ког елемента. Следећи пример Селениум Јава показује како је цлицк () коришћен за клик на дугме „Пријави се“ компаније Мерцури Тоурс.
Када користите методу цлицк (), морате имати на уму следеће ствари.
- Не узима ниједан параметар / аргумент.
- Метода аутоматски чека учитавање нове странице, ако је применљиво.
- Елемент на који се кликне мора бити видљив (висина и ширина не смеју бити једнаке нули).
Набавите команде
Наредбе „Гет“ доносе разне важне информације о страници / елементу. Ево неколико важних „гет“ наредби које вам морају бити познате.
Команде | Употреба |
---|---|
гет () Узорак употребе: |
|
гетТитле () Пример примене: |
|
гетПагеСоурце () Пример примене: |
|
гетЦуррентУрл () Пример примене: |
|
гетТект () Узорак употребе: |
|
Кретање кроз команде
Ове наредбе омогућавају освежавање, улазак и пребацивање између различитих веб страница.
навигате (). то () Узорак употребе: |
|
навигате (). рефресх () Пример примене: |
|
навигате (). бацк () Пример примене: |
|
навигате (). форвард () Узорак употребе: |
|
Затварање и напуштање прегледача Виндовс
цлосе () Узорак употребе: |
|
куит () Узорак употребе: |
|
Да бисте јасно илустровали разлику између цлосе () и куит (), покушајте да извршите доњи код. Користи веб страницу која аутоматски отвара прозор након учитавања странице и отвара другу након изласка.
Приметите да је затворен само прозор родитељског прегледача, а не и два искачућа прозора.
Али ако користите куит (), сви прозори ће бити затворени - не само родитељски. Покушајте да покренете доњи код и приметићете да ће се и два горња искачућа прозора аутоматски затворити.
пакет невпројецт;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.фирефок.ФирефокДривер;јавна класа ПГ3 {јавна статичка воид главна (Стринг [] аргс) {Систем.сетПроперти ("вебдривер.гецко.дривер", "Ц: \\ гецкодривер.еке");Управљачки програм за ВебДривер = нови ФирефокДривер ();дривер.гет ("хттп://ввв.попуптест.цом/попуптест2.хтмл");дривер.куит (); // коришћењем КУИТ-а сви прозори ће се затворити}}
Пребацивање између оквира
Да бисмо приступили ГУИ елементима у оквиру, прво би требало да усмеримо ВебДривер да се прво фокусира на оквир или искачући прозор пре него што приступимо елементима у њима. Узмимо, на пример, веб страницу хттп://демо.гуру99.цом/селениум/депрецатед.хтмл
Ова страница има 3 оквира чији су атрибути „наме“ наведени горе. Желимо да приступимо линку „Застарело“ заокруженом горе жутом бојом. Да бисмо то урадили, прво морамо упутити ВебДривер да пређе на оквир „цлассФраме“ помоћу методе „свитцхТо (). Фраме ()“ . Користићемо атрибут наме оквира као параметар за део "фраме ()".
пакет невпројецт;импорт орг.опенка.селениум.Би;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.фирефок.ФирефокДривер;јавна класа ПГ4 {јавна статичка воид главна (Стринг [] аргс) {Систем.сетПроперти ("вебдривер.гецко.дривер", "Ц: \\ гецкодривер.еке");Управљачки програм за ВебДривер = нови ФирефокДривер ();дривер.гет ("хттп://демо.гуру99.цом/селениум/депрецатед.хтмл");дривер.свитцхТо (). фраме ("цлассФраме");дривер.финдЕлемент (Би.линкТект ("Застарело")). цлицк ();дривер.цлосе ();}}
Након извршавања овог кода, видећете да је оквир „цлассФраме“ пребачен на страницу „Застарели АПИ“, што значи да је наш код успешно успео да приступи линку „Застарело“.
Пребацивање између искачућих прозора
ВебДривер омогућава приказивање искачућих прозора попут упозорења, за разлику од Селениум ИДЕ. Да бисмо приступили елементима унутар упозорења (као што је порука коју садржи), морамо да користимо методу "свитцхТо (). Алерт ()" . У доњем коду користићемо ову методу за приступ оквиру за упозорење, а затим ћемо дохватити његову поруку помоћу методе „гетТект ()“ , а затим аутоматски затворити поље за упозорење помоћу „свитцхТо (). Алерт (). Аццепт () " метода.
Прво идите на хттп://јсбин.цом/усидик/1 и ручно кликните на „Иди!“ тамо и сами се уверите у текст поруке.
Хајде да видимо пример селенијског кода да бисмо то урадили-
пакет мипацкаге;импорт орг.опенка.селениум.Би;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.фирефок.ФирефокДривер;јавна класа мицласс {јавна статичка воид главна (Стринг [] аргс) {Систем.сетПроперти ("вебдривер.гецко.дривер", "Ц: \\ гецкодривер.еке");Управљачки програм за ВебДривер = нови ФирефокДривер ();Стринг алертМессаге = "";дривер.гет ("хттп://јсбин.цом/усидик/1");дривер.финдЕлемент (Би.цссСелецтор ("инпут [валуе = \" Го! \ "]")). цлицк ();алертМессаге = дривер.свитцхТо (). алерт (). гетТект ();дривер.свитцхТо (). алерт (). аццепт ();Систем.оут.принтлн (алертМессаге);дривер.куит ();}}
На конзоли Ецлипсе приметите да је одштампана порука упозорења:
Чека
Постоје две врсте чекања.
- Имплицитно чекање - користи се за постављање подразумеваног времена чекања током програма
- Експлицитно чекање - користи се за постављање времена чекања само за одређену инстанцу
Имплицитно сачекајте
- Кодирање је једноставније од експлицитног чекања.
- Обично се декларише у инстанцијском делу кода.
- За увоз ће вам требати само један додатни пакет.
Да бисте почели да користите имплицитно чекање, морали бисте да увезете овај пакет у свој код.
Затим додајте у инстанцијски део вашег кода.
Екплицит Ваит
Експлицитна чекања се обављају помоћу класа ВебДриверВаит и ЕкпецтедЦондитион . За следећи пример Селениум ВебДривер, сачекаћемо до 10 секунди да елемент чији је ид „корисничко име“ постане видљив пре него што пређемо на следећу команду. Ево корака.
Корак 1
Увезите ова два пакета:
Корак 2
Прогласите променљиву ВебДриверВаит. У овом примеру ћемо користити „миВаитВар“ као име променљиве.
3. корак
Користите миВаитВар са ЕкпецтедЦондитионс на деловима где вам је потребно изричито чекање. У овом случају, користићемо експлицитно чекање на уносу „корисничко име“ (Мерцури Тоурс ХомеПаге) пре него што на њега укуцамо текст „туториал“.
Услови
Следеће методе се користе у условним операцијама и операцијама петље -
- исЕнаблед () се користи када желите да проверите да ли је одређени елемент омогућен или не пре извршавања наредбе.
- исДисплаиед () се користи када желите да проверите да ли је одређени елемент приказан или не пре извршавања наредбе.
- исСелецтед () се користи када желите да проверите да ли је изабрано одређено поље за потврду, радио дугме или опција у падајућем оквиру . Не ради на другим елементима.
Коришћење очекиваних услова
Класа ЕкпецтедЦондитионс нуди шири скуп услова које можете користити заједно са методом ВебДриверВаит'с тилл ().
Испод су неке од најчешћих метода ЕкпецтедЦондитионс.
- алертИсПресент () - чека док се не прикаже поље за упозорење.
- елементТоБеЦлицкабле () - Сачека док елемент не буде видљив и истовремено омогућен. Узорак селенијског кода у наставку сачекаће док елемент са не постане видљив и прво омогућен пре него што тај елемент доделите као променљиву ВебЕлемент под називом „тктУсерНаме“.
- фрамеТоБеАваилаблеАндСвитцхТоИт () - Сачека док дати оквир већ буде доступан, а затим се аутоматски пребацује на њега.
Хватање изузетака
Када се користи исЕнаблед (), исДисплаиед () и исСелецтед (), ВебДривер претпоставља да елемент већ постоји на страници. У супротном, бациће НоСуцхЕлементЕкцептион . Да бисмо то избегли, требало би да користимо блок три-цатцх како програм не би био прекинут.
ВебЕлемент тктбок_усернаме = дривер.финдЕлемент (Би.ид ("корисничко име"));покушати{иф (тктбок_усернаме.исЕнаблед ()) {тктбок_усернаме.сендКеис ("туториал");}}цатцх (НоСуцхЕлементЕкцептион нсее) {Систем.оут.принтлн (нсее.тоСтринг ());}
Ако користите експлицитна чекања, врста изузетка коју бисте требали ухватити је „ТимеоутЕкцептион“.
Резиме
- Да бисте почели да користите ВебДривер АПИ, морате да увезете најмање ова два пакета.
- орг.опенка.селениум. *
- орг.опенка.селениум.фирефок.ФирефокДривер
- Гет () метода је еквивалент "отвореног" командом селена ИДЕ је.
- Лоцирање елемената у ВебДриверу врши се помоћу методе финдЕлемент () .
- Следеће опције су доступне за проналажење елемената у ВебДривер-у:
- Од стране. Назив класе
- Од стране. цссСелецтор
- Од стране. ид
- Од стране. линкТект
- Од стране. име
- Од стране. делимичноЛинкТект
- Од стране. Означи име
- Од стране. кпатх
- Би.цссСелецтор () не подржава функцију „садржи“ .
- Инстанцирање елемента можете извршити помоћу класе ВебЕлемент .
- Клик на елемент врши се методом цлицк () .
- ВебДривер пружа следеће корисне наредбе за преузимање :
- добити()
- гетТитле ()
- гетПагеСоурце ()
- гетЦуррентУрл ()
- гетТект ()
- ВебДривер пружа ове корисне команде за навигацију
- навигате (). форвард ()
- навигате (). бацк ()
- Иди на()
- навигате (). рефресх ()
- Методе цлосе () и куит () користе се за затварање прозора прегледача. Цлосе () се користи за затварање једног прозора; док се куит () користи за затварање свих прозора повезаних са родитељским прозором који је контролисао објекат ВебДривер.
- СВИТЦХТО (). Фраме () анд СВИТЦХТО () алерт. () Методе се користе за фокусу директну вебдривер је на раму или упозорење, респективно.
- Имплицитна чекања се користе за подешавање времена чекања током програма, док се експлицитна чекања користе само на одређеним деловима.
- Можете користити исЕнаблед (), исДисплаиед (), исСелецтед (), и комбинацију ВебДриверВаит и ЕкпецтедЦондитионс метода када провере стања елемента. Међутим, они не верификују да ли елемент не постоји.
- Када је позван исЕнаблед (), исДисплаиед () или исСелецтед () док елемент није постојао, ВебДривер ће бацити НоСуцхЕлементЕкцептион .
- Када су позване методе ВебДриверВаит и ЕкпецтедЦондитионс док елемент није постојао, ВебДривер би бацио ТимеоутЕкцептион .
Белешка:
дривер.гет (): Користи се за одлазак на одређену веб локацију, али не одржава историју прегледача и колачиће, тако да не можемо користити дугме напред и назад, ако кликнемо на то, страница неће добити распоред
дривер.навигате (): користи се за одлазак на одређену веб локацију, али одржава историју прегледача и колачиће, тако да можемо користити дугме напред и назад за навигацију између страница током кодирања Тестцасе-а