У селенијуму „Чекања“ играју важну улогу у извршавању тестова. У овом упутству ћете научити различите аспекте „Имплицитног“ и „Експлицитног“ чекања у селенијуму.
У овом упутству ћете научити:
- Зашто нам требају чекања на селен?
- Имплицитно сачекајте
- Екплицит Ваит
- Течно чекај
Зашто нам требају чекања на селен?
Већина веб апликација развијена је помоћу Ајак-а и Јавасцрипта. Када прегледач учита страницу, елементи са којима желимо да комуницирамо могу се учитати у различитим временским интервалима.
Не само да то отежава идентификацију елемента, већ ће и ако елемент није лоциран избацити изузетак „ ЕлементНотВисиблеЕкцептион “. Користећи селениум Ваитс, можемо да решимо овај проблем.
Размотримо сценарио у којем у свом тесту морамо користити и имплицитна и експлицитна чекања. Претпоставимо да је имплицитно време чекања постављено на 20 секунди, а експлицитно време чекања на 10 секунди.
Претпоставимо да покушавамо да пронађемо елемент који има неке „очекиване услове “ (експлицитно чекање). Ако се елемент не налази у временском оквиру дефинисаном експлицитним чекањем (10 секунди), користиће временски оквир дефинисан имплицитним чекањем ( 20 секунди) пре бацања „ ЕлементНотВисиблеЕкцептион “.
Чека управљачки програм за селен
- Имплицитно сачекајте
- Екплицит Ваит
Имплицитно чекање у селену
Имплицитно Цекај на селена се користи да каже веб возачу да чекају одређено време пре него што баца "Но такав елемент изузетак". Подразумевана поставка је 0. Једном када подесимо време, веб управљачки програм ће сачекати елемент за то време пре него што избаци изузетак.
Селениум Веб Дривер је позајмио идеју имплицитних чекања од Ватира.
У доњем примеру прогласили смо имплицитно чекање са временским оквиром од 10 секунди. То значи да ће се елемент, уколико се у том временском оквиру не налази на веб страници, изузети.
Да бисте прогласили имплицитно чекање:
Синтакса :
дривер.манаге (). тимеоутс (). имплицитлиВаит (ТимеОут, ТимеУнит.СЕЦОНДС);
пакет гуру.тест99;импорт јава.утил.цонцуррент.ТимеУнит;импорт орг.опенка.селениум.Би;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.цхроме.ЦхромеДривер;импорт орг.тестнг.аннотатионс.Тест;јавни разред АппТест {заштићени управљачки програм за ВебДривер;@Тестпублиц воид гуру99туториалс () баца ИнтерруптедЕкцептион{Систем.сетПроперти ("вебдривер.цхроме.дривер", ". \\ цхромедривер.еке");дривер = нови ЦхромеДривер ();дривер.манаге (). тимеоутс (). имплицитноВаит (10, ТимеУнит.СЕЦОНДС);Стринг еТитле = "Демо Гуру99 страница";Стринг аТитле = "";// покренимо Цхроме и преусмеримо га на основни УРЛдривер.гет ("хттп://демо.гуру99.цом/тест/гуру99хоме/");// Максимизира прозор прегледачадривер.манаге (). виндов (). макимизе ();// добијемо стварну вредност насловааТитле = дривер.гетТитле ();// упоређивање стварног наслова са очекиваним насловомако (аТитле.екуалс (еТитле)){Систем.оут.принтлн („Тест је положен“);}елсе {Систем.оут.принтлн („Тест није успео“);}// затвори прегледачдривер.цлосе ();}}
Објашњење кода
У горњем примеру,
Размотрите следећи код:
дривер.манаге (). тимеоутс (). имплицитноВаит (10, ТимеУнит.СЕЦОНДС);
Имплицитно чекање прихвата 2 параметра, први параметар прихвата време као целобројну вредност, а други параметар прихвата мерење времена у СЕКУНДАМА, МИНУТАМА, МИЛИСЕКОНДИ, МИКРОСЕКУНДАМА, НАНОСЕКУНДАМА, ДАНИМА, САТИМА итд.
Експлицитно чекање у селену
Едитед Цекај на селена се користи да каже Веб Дривер чекати одређеним условима (очекивани услови) или максимално време премашио пре него што пусте "ЕлементНотВисиблеЕкцептион" изузетак. То је интелигентна врста чекања, али се може применити само за одређене елементе. Даје боље опције од имплицитног чекања док чека динамички учитане Ајак елементе.
Једном када прогласимо експлицитно чекање, морамо да користимо „ ЕкпецтедЦондитионс “ или можемо да конфигуришемо колико често желимо да проверавамо стање помоћу Флуент Ваит-а . Ових дана док имплементирамо користимо Тхреад.Слееп () углавном се не препоручује употреба
У примеру испод, креирамо референтно чекање за класу „ ВебДриверВаит “ и инстанцирамо помоћу референце „ ВебДривер “, а дајемо максимални временски оквир од 20 секунди.
Синтакса:
ВебДриверВаит ваит = ново ВебДриверВаит (ВебДриверРефренце, ТимеОут);
пакет гуру.тест99;импорт јава.утил.цонцуррент.ТимеУнит;импорт орг.опенка.селениум.Би;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.ВебЕлемент;импорт орг.опенка.селениум.цхроме.ЦхромеДривер;импорт орг.опенка.селениум.суппорт.уи.ЕкпецтедЦондитионс;импорт орг.опенка.селениум.суппорт.уи.ВебДриверВаит;импорт орг.тестнг.аннотатионс.Тест;јавни разред АппТест2 {заштићени управљачки програм за ВебДривер;@Тестпублиц воид гуру99туториалс () баца ИнтерруптедЕкцептион{Систем.сетПроперти ("вебдривер.цхроме.дривер", ". \\ цхромедривер.еке");дривер = нови ЦхромеДривер ();ВебДриверВаит ваит = нови ВебДриверВаит (управљачки програм, 20);Стринг еТитле = "Демо Гуру99 страница";Стринг аТитле = "";// покренимо Цхроме и преусмеримо га на основни УРЛдривер.гет ("хттп://демо.гуру99.цом/тест/гуру99хоме/");// Максимизира прозор прегледачадривер.манаге (). виндов (). макимизе ();// добијемо стварну вредност насловааТитле = дривер.гетТитле ();// упоређивање стварног наслова са очекиваним насловомако (аТитле.цонтентЕкуалс (еТитле)){Систем.оут.принтлн („Тест је положен“);}елсе {Систем.оут.принтлн („Тест није успео“);}ВебЕлемент гуру99селениумлинк;гуру99селениумлинк = ваит.унтил (ЕкпецтедЦондитионс.висибилитиОфЕлементЛоцатед (Би.кпатх ("/ хтмл / боди / див [1] / сецтион / див [2] / див / див [1] / див / див [1] / див / див / див / див [2] / див [2] / див / див / див / див / див [1] / див / див / а / и ")));гуру99селениумлинк.цлицк ();}}
Објашњење кода
Размотрите следећи код:
ВебЕлемент гуру99селениумлинк;гуру99селениумлинк = ваит.унтил (ЕкпецтедЦондитионс.висибилитиОфЕлементЛоцатед (Би.кпатх ("/ хтмл / боди / див [1] / сецтион / див [2] / див / див [1] / див / див [1] / див / див / див / див [2] / див [2] / див / див / див / див / див [1] / див / див / а / и ")));гуру99селениумлинк.цлицк ();
У овом примеру чекања за ВебДривер, сачекајте да се деси количина времена дефинисана у класи „ ВебДриверВаит “ или „ ЕкпецтедЦондитионс “ у зависности од тога шта се прво догоди.
Горњи Јава код наводи да на елемент чекамо временски оквир од 20 секунди како је дефинисано у класи „ ВебДриверВаит “ на веб страници док се не испуне „ Очекивани услови“ и услов је „ висибилитиофЕлементЛоцатед “.
Следе очекивани услови који се могу користити у Селениум Екплицит Ваит
- алертИсПресент ()
- елементСелецтионСтатеТоБе ()
- елементТоБеЦлицкабле ()
- елементТоБеСелецтед ()
- фрамеТоБеАвалиаблеАндСвитцхТоИт ()
- инвисибилитиОфТхеЕлементЛоцатед ()
- инвисибилитиОфЕлементВитхТект ()
- присуствоОфАллЕлементсЛоцатедБи ()
- присуствоОфЕлементЛоцатед ()
- тектТоБеПресентИнЕлемент ()
- тектТоБеПресентИнЕлементЛоцатед ()
- тектТоБеПресентИнЕлементВалуе ()
- титлеИс ()
- титлеЦонтаинс ()
- висибилитиОф ()
- висибилитиОфАллЕлементс ()
- висибилитиОфАллЕлементсЛоцатедБи ()
- висибилитиОфЕлементЛоцатед ()
Течно чекање у селену
Течно Цекај на селена се користи за дефинисање максималног времена за веб возач чекати стање, као и учесталости са којом желимо да проверимо стање пре него што пусте један "ЕлементНотВисиблеЕкцептион" изузетак. Проверава да ли постоји веб елемент у редовним интервалима док се објекат не пронађе или се не догоди временско ограничење.
Учесталост: Постављање циклуса понављања са временским оквиром за верификацију / проверу стања у редовном интервалу времена
Размотримо сценарио где се елемент учитава у различитим интервалима времена. Елемент се може учитати у року од 10 секунди, 20 секунди или чак више од тога ако прогласимо експлицитно чекање од 20 секунди. Сачекаће до одређеног времена пре него што избаци изузетак. У таквим сценаријима, флуидно чекање је идеално чекање које ће се користити, јер ће ово покушати пронаћи елемент на различитој фреквенцији док га не пронађе или не истекне коначни тајмер.
Синтакса:
Сачекајте сачекајте = ново ФлуентВаит (референца за ВебДривер).витхТимеоут (тимеоут, СЕЦОНДС).поллингЕвери (тимеоут, СЕЦОНДС).приказивање (изузетак.разред);
Горе наведени код је застарео у програму Селениум в3.11 и новијим. Морате да користите
Сачекајте сачекајте = ново ФлуентВаит (референца за ВебДривер).витхТимеоут (Дуратион.офСецондс (СЕЦОНДС)).поллингЕвери (Дуратион.офСецондс (СЕЦОНДС)).приказивање (изузетак.разред);
пакет гуру.тест99;импорт орг.тестнг.аннотатионс.Тест;импорт јава.утил.НоСуцхЕлементЕкцептион;импорт јава.утил.цонцуррент.ТимеУнит;импорт јава.утил.фунцтион.Фунцтион;импорт орг.опенка.селениум.Би;импорт орг.опенка.селениум.ВебДривер;импорт орг.опенка.селениум.ВебЕлемент;импорт орг.опенка.селениум.цхроме.ЦхромеДривер;импорт орг.опенка.селениум.суппорт.уи.ЕкпецтедЦондитионс;импорт орг.опенка.селениум.суппорт.уи.ФлуентВаит;импорт орг.опенка.селениум.суппорт.уи.Ваит;импорт орг.опенка.селениум.суппорт.уи.ВебДриверВаит;импорт орг.тестнг.аннотатионс.Тест;јавни разред АппТест3 {заштићени управљачки програм за ВебДривер;@Тестпублиц воид гуру99туториалс () баца ИнтерруптедЕкцептион{Систем.сетПроперти ("вебдривер.цхроме.дривер", ". \\ цхромедривер.еке");Стринг еТитле = "Демо Гуру99 страница";Стринг аТитле = "";дривер = нови ЦхромеДривер ();// покренимо Цхроме и преусмеримо га на основни УРЛдривер.гет ("хттп://демо.гуру99.цом/тест/гуру99хоме/");// Максимизира прозор прегледачадривер.манаге (). виндов (). макимизе ();// добијемо стварну вредност насловааТитле = дривер.гетТитле ();// упоређивање стварног наслова са очекиваним насловомако (аТитле.цонтентЕкуалс (еТитле)){Систем.оут.принтлн („Тест је положен“);}елсе {Систем.оут.принтлн („Тест није успео“);}Ваит <ВебДривер> ваит = нев ФлуентВаит <ВебДривер> (дривер).витхТимеоут (30, ТимеУнит.СЕЦОНДС).поллингЕвери (5, ТимеУнит.СЕЦОНДС).пријављивање (НоСуцхЕлементЕкцептион.цласс);ВебЕлемент цлицкселениумлинк = ваит.унтил (нова функција <ВебДривер, ВебЕлемент> () {примењује се јавни ВебЕлемент (управљачки програм за ВебДривер) {ретурн дривер.финдЕлемент (Би.кпатх ("/ хтмл / боди / див [1] / сецтион / див [2] / див / див [1] / див / див [1] / див / див / див / див [2 ] / див [2] / див / див / див / див / див [1] / див / див / а / и "));}});// кликните на везу селенацлицкселениумлинк.цлицк ();// затвори ~ прегледачдривер.цлосе ();}}
Објашњење кода
Размотрите следећи код:
Ваит <ВебДривер> ваит = нев ФлуентВаит <ВебДривер> (дривер).витхТимеоут (30, ТимеУнит.СЕЦОНДС).поллингЕвери (5, ТимеУнит.СЕЦОНДС).пријављивање (НоСуцхЕлементЕкцептион.цласс);
У горњем примеру проглашавамо течно чекање са временским ограничењем од 30 секунди, а фреквенција је постављена на 5 секунди игнорисањем „ НоСуцхЕлементЕкцептион “
Размотрите следећи код:
примењује се јавни ВебЕлемент (управљачки програм за ВебДривер) {ретурн дривер.финдЕлемент (Би.кпатх ("/ хтмл / боди / див [1] / сецтион / див [2] / див / див [1] / див / див [1] / див / див / див / див [2 ] / див [2] / див / див / див / див / див [1] / див / див / а / и "));
Направили смо нову функцију за препознавање веб-елемента на страници. (Нпр .: Овде веб елемент није ништа друго до веза Селениум на веб страници).
Фреквенција је постављена на 5 секунди, а максимално време на 30 секунди. Дакле, то значи да ће проверавати да ли постоји елемент на веб страници на сваких 5 секунди у максималном трајању од 30 секунди. Ако се елемент налази у овом временском оквиру, он ће извршити операције у супротном, бациће „ ЕлементНотВисиблеЕкцептион “
Разлика између имплицитног чекања и експлицитног чекања
Имплицитно сачекајте | Екплицит Ваит |
---|---|
|
|
|
|
|
|
Закључак:
Имплицитно, експлицитно и течно чекање су различита чекања која се користе у селенијуму. Употреба ових чекања у потпуности се заснива на елементима који се учитавају у различитим интервалима времена. Увек се не препоручује употреба Тхреад.Слееп () током тестирања наше апликације или изградње нашег оквира.
Овај чланак је написао Цхаитаниа Пујари