top 10 selenium exceptions
Руковање изузецима Селениум ВебДривер Коришћењем оквира за руковање изузецима - Водич за селен # 19
Добијање изузетка у коду за аутоматизацију је врло често. „Изузетак“ је, како та реч означава, посебан или необичан случај.
Извршење кода за аутоматизацију обично се можда неће извршити онако како се очекивало због многих фактора који су укључени у извршавање, као што су проблеми са стабилношћу мреже, проблеми са Интернетом, стабилност сервера итд. Изнимке можемо добити због недовољног времена чекања или нетачне синтаксе, параметра итд.
У последњем упутству за ВебДривер сазнали смо о 3 различите врсте важних веб елемената попут Веб табеле, оквири и динамички елементи и њихови механизми руковања у скрипту селена
Пре него што наставите са Фрамеворк туториалима у овоме Тренинг селена серије, овде у овом упутству ћемо научити о врсте изузетака и како поступати са изузецима у Јава и Селениум скриптама . Програмери / тестери користе оквир за руковање изузецима за руковање изузетком у скриптама селена.
Шта ћете научити:
- Шта је изузетак?
- Предности и недостаци приступа Авоид-Хандле
- Врсте изузетака у Јави и Селенијуму
- Изузетак руковање
- Уобичајени изузеци у програму Селениум ВебДривер
- Избегавање и руковање уобичајеним изузецима
- # 1) орг.опенка.селениум.НоСуцхЕлементЕкцептион
- # 2) орг.опенка.селениум.НоСуцхВиндовЕкцептион
- # 3) орг.опенка.селениум.НоСуцхФрамеЕкцептион
- # 4) орг.опенка.селениум.НоАлертПресентЕкцептион
- # 5) орг.опенка.селениум.ИнвалидСелецторЕкцептион
- # 6) орг.опенка.селениум.ЕлементНотВисиблеЕкцептион
- # 7) орг.опенка.селениум.ЕлементНотСелецтаблеЕкцептион
- # 8) орг.опенка.селениум.ТимеоутЕкцептион
- # 9) орг.опенка.селениум.НоСуцхСессионЕкцептион
- # 10) орг.опенка.селениум.СталеЕлементРеференцеЕкцептион
- Закључак
- Препоручено читање
Шта је изузетак?
Изузетак су догађаји због којих се Јава програм нагло завршава без давања очекиваних резултата. Јава пружа оквир у којем корисник може да се бави изузецима.
Процес руковања изузецима назива се Обрада изузетака.
Изузетке треба решавати јер прекидају нормалан ток извршавања програма. Једна од важних намера руковања изузецима је спречавање ове прекида и наставак извршавања програма. Понекад ћете можда желети да извршите низ радњи у случају да се догоди одређени изузетак.
Када се догоди изузетак, креира се објекат изузетака који се технички назива „ Бацање изузетка ’ и додајемо Покушај да ухватиш блокови попут,
try { // Protected code } catch (ExceptionName e) { // Catch block }
# 1) Комад кода који може довести до изузетка додаје се унутар блока Три.
#два) Изјава Цатцх хвата изузетак и узима га као параметар.
# 3) Када се не изузме изузетак, извршава се наредба три, а не наредба цатцх.
Пример : Када скрипта селена закаже због погрешног локатора, програмер би требао бити у стању да разуме разлог неуспеха и то се лако може постићи ако се изузетак правилно рукује у програму.
Према мом искуству, најбоље је покушати да избегнем изузеће ВебДривер кад год је то могуће и ухватим заиста изузетне случајеве. Користите три / цатцх за руковање стварима које пођу по злу и које су ван моје контроле.
Избегавај оне које могу ухватити друге!
како додати елементе низа у јави
Ово је најбоља стратегија која ми је помогла.
На пример, размотрите тест страницу којој је потребно више него обично време за учитавање на тест серверу. Добиваћемо честе изузетке током обављања радњи на овој страници. Уместо да ово сваки пут само ухватимо, можемо
- Додајте наредбу чекања и покушајте да избегнете изузетак
- Користите „Пробај / ухвати“ за руковање у случају да се догодио заиста изузетан случај
Тиме се смањују шансе за изузетке.
Предности и недостаци приступа Авоид-Хандле
Предности | Мане |
---|---|
1) Овај приступ смањује шансе за добијање изузетака. | 1) Повећава редове кодова јер додајете додатни код да бисте избегли изузетке |
Ако се изузетак и даље ухвати, то би био заиста изузетан случај који вреди проверити | 2) Требало би боље разумети АПИ веб управљачког програма, наредбе и изузетке |
Смањите време за отклањање грешака. Код за аутоматизацију је намењен проналажењу грешака и не желите да видите превише нежељених 3) изузетака и пронађите разлоге иза којих се крије сваки од њих | |
4) У блоку Цатцх бавите се валиднијим случајевима | |
5) Смањите лажне кварове | |
6) Јаснији извештај |
У овом упутству ћемо разговарати Избегавајте и држите се приступ за 10 најчешћих изузетака у програму Селениум ВебДривер. Пре тога, стекнимо основно разумевање блокова за руковање изузецима и Три / Цатцх.
Врсте изузетака у Јави и Селенијуму
У наставку смо описали типове изузетака и различите начине на које можемо користити оквир за руковање изузецима у скриптама селена.
Постоје три врсте изузетака:
- Чекирани изузетак
- Неозначени изузетак
- Грешка
Хијерархија класа изузетака и грешака:
# 1) Означени изузетак: Означени изузетак обрађује се током времена компајлирања и даје грешку компилације ако није ухваћен и обрађен током времена компајлирања.
Пример : ФилеНотФоундЕкцептион , ИОЕкцептион итд.
# 2) Неозначени изузетак: У случају непровереног изузетка, компајлер нема мандат за руковање. Компајлер игнорише током времена компајлирања.
Пример : АрраиИндекоутОфБоундЕкцептион
# 3) Грешка: Када је сценарио фаталан и програм се не може опоравити, ЈВМ баца грешку. Блок три-цатцх не може да реши грешке. Чак и ако корисник покуша да обради грешку помоћу блока Три цатцх, не може се опоравити од грешке.
Пример : Грешка у тврдњи , ОутОфМемориЕррор итд.
Изузетак руковање
Покушајте и ухватите блок:
покушај да ухватиш блокови се обично користе за руковање изузецима. Врста изузетака је декларисана у блоку цатцх који се очекује. Када изузетак дође у покушају блока, одмах се контрола креће ка блоку цатцх.
Пример :
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); }
За један покушај блока може бити више блокова улова, у зависности од врсте изузетка.
Пример :
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); } catch(FileNotFoundException file){ file.printStackTrace(); }
баца Изузетак:
баца Кључна реч у Јави користи се за избацивање изузетка уместо да се њиме рукује. Сви проверени изузеци могу се бацати методама.
Пример :
public static void main(String() args) throws IOException { BufferedReader br=new BufferedReader(new FileReader('Data')); while ((line = br.readLine()) != null) { System.out.println(line); } }
коначно блокирати:
коначно , блок се извршава без обзира на извршење блока три-цатцх и извршава се одмах након завршетка три / цатцх блока.
У основи се затварање датотеке, веза са базом података итд. Могу затворити у коначно блоку.
Пример :
try { br = new BufferedReader(new FileReader('Data')); } catch(IOException ie) { ie.printStackTrace(); } Finally { br.close(); }
У горњем примеру, БуфферРеадер ток је затворен у коначно блок. бр.цлосе () ће се увек извршавати без обзира на извршење блока три анд цатцх.
Белешка : коначно блок може постојати без икаквог блока цатцх. Није неопходно увек имати блок цатцх.
Може бити много блокова улова, али може се користити само један коначно блок.
Бацљиво : Тхровабле је родитељска класа за грешке и изузетке. Генерално, тешко је баратати грешкама у јави. Ако програмер није сигуран у вези са врстом грешке и изузетком, саветује се употреба класе Тхровабле која може ухватити и грешку и изузетак.
Пример :
try { br = new BufferedReader(new FileReader('Data')); } catch (Throwable t) { t.printStackTrace(); }
Уобичајени изузеци у програму Селениум ВебДривер
Селен има свој сет изузетака. Док развија селенске скрипте, програмер мора да обради или избаци те изузетке.
Испод је неколико примера изузетака у селену:
Све класе изузетака током извођења у Селениум ВебДривер спадају у суперкласу ВебДриверЕкцептион.
Иако под ВебДриверЕкцептион постоји много класа изузетака, обично видимо доње.
- НоСуцхЕлементЕкцептион
- НоСуцхВиндовЕкцептион
- НоСуцхФрамеЕкцептион
- НоАлертПресентЕкцептион
- ИнвалидСелецторЕкцептион
- ЕлементНотВисиблеЕкцептион
- ЕлементНотСелецтаблеЕкцептион
- ТимеоутЕкцептион
- НоСуцхСессионЕкцептион
- СталеЕлементРеференцеЕкцептион
Детаљи :
ЕлементНотВисиблеЕкцептион : Ако селен покушава да пронађе елемент, али тај елемент није видљив на страници
НоАлертПресентЕкцептион : Ако корисник покуша да обради оквир упозорења, али упозорење није присутно.
НоСуцхАттрибутеЕкцептион : Док покушавам да добијем вредност атрибута, али атрибут није доступан у ДОМ-у.
НоСуцхЕлементЕкцептион : Овај изузетак је због приступа елементу који није доступан на страници.
ВебДриверЕкцептион : Изузетак долази када код не може да покрене ВебДривер.
Избегавање и руковање уобичајеним изузецима
Размотримо приступ Избегавај и рукуј за горе поменуте изузетке:
# 1) орг.опенка.селениум.НоСуцхЕлементЕкцептион
Ова најчешће виђена класа изузетака је подкласа од НотФоундЕкцептион класа. Изузетак се јавља када ВебДривер не може да пронађе и лоцира елементе.
Обично се то дешава када тестер упише нетачан локатор елемената у методу финдЕлемент (Би, би).
Узмите у обзир да је у доњем примеру тачан ид за поље за текст био „прво поље“, али га је тестер погрешно поменуо као „прво поље“. У овом случају, ВебДривер не може да пронађе елемент и орг.опенка.селениум.НоСуцхЕлементЕкцептион биће бачен
driver.findElement(By.id('submit')).click(); Exception Handling: try { driver.findElement(By.id('submit')).click(); } catch (NoSuchElementException e)
У овом случају, изузетак се баца чак и ако елемент није учитан.
Избегавање и руковање : Покушајте да дате команду за чекање.
Пример: Доле наведена команда чека 10 секунди на присуство веб елемента са ид-ом „субмит“. Затим покушава да кликне на њега. Ако је елемент доступан, али клик и даље не успева, ухваћен је изузетак.
Коришћење одложеног времена је уобичајена пракса у аутоматизацији тестова да би се направила пауза између корака. Додавањем опције Три / Цатцх осигуравамо да се програм наставља чак и ако чекање није могло помоћи.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.presenceOfElementLocated(By.id('submit'))); try { driver.findElement(By.id('submit')).click(); } catch (WebDriverException e) { System.out.println(“An exceptional case.”); } } catch (TimeOutException e) { System.out.println(“WebDriver couldn’t locate the element”); }
# 2) орг.опенка.селениум.НоСуцхВиндовЕкцептион
НоСуцхВиндовЕкцептион долази испод НотФоундЕкцептион класа. Ово се баца када ВебДривер покуша да се пребаци на неважећи прозор.
Код у наставку може да баци орг.опенка.селениум.НоСуцхВиндовЕкцептион ако ручка прозора не постоји или ако није доступна за пребацивање.
дривер.свитцхТо (). виндов (хандле_1);
Избегавање и руковање : Користили бисмо кваке за прозоре да бисмо добили скуп активних прозора, а затим извршили радње на истим.
У доњем примеру, за сваку ручицу прозора извршава се пребацивање управљачког програма на. Стога су смањене шансе за преношење погрешног параметра прозора.
продајни системи за ипад
for (String handle : driver.getWindowHandles()) { try { driver.switchTo().window(handle); } catch (NoSuchWindowException e) { System.out.println(“An exceptional case”); } }
# 3) орг.опенка.селениум.НоСуцхФрамеЕкцептион
Када ВебДривер покушава да се пребаци на неважећи оквир, баца се НоСуцхФрамеЕкцептион у класи НотФоундЕкцептион.
Код у наставку може да баци орг.опенка.селениум.НоСуцхФрамеЕкцептион ако оквир „фраме_11“ не постоји или није доступан.
дривер.свитцхТо (). фраме (“фраме_11”);
Изузетак руковање:
try { driver.switchTo().frame('frame_11'); } catch (NoSuchFrameException e)
У овом случају, изузетак се баца чак и ако оквир није учитан.
Избегавање и руковање : Покушајте да дате команду за чекање.
У примеру испод, ВебДривер чека 10 секунди да оквир буде доступан. Ако је оквир доступан и даље постоји изузетак, онда је ухваћен.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.frameToBeAvaliableAndSwitchToIt(frame_11)); try { driver.switchTo().frame('frame_11'); } catch (WebDriverException e) { System.out.println(“An exceptional case”); } } catch (TimeOutException e) { System.out.println(“WebDriver couldn’t locate the frame”); }
# 4) орг.опенка.селениум.НоАлертПресентЕкцептион
НоАлертПресентЕкцептион испод НотФоундЕкцептион баца се када ВебДривер покуша да се пребаци на упозорење које није доступно.
орг.опенка.селениум.НоАлертПресентЕкцептион биће бачено Ако испод позива за аутоматизацију позиви аццепт () раде на класи Алерт () када упозорење још није на екрану.
дривер.свитцхТо (). алерт (). аццепт ();
Изузетак руковање:
try { driver.switchTo().alert().accept(); } catch (NoSuchAlertException e)
У овом случају, изузетак се избацује чак и ако упозорење није учитано у потпуности.
Избегавање и руковање : Увек користите експлицитно или течно чекање одређеног времена у свим случајевима када се очекује упозорење. Ако је упозорење доступно и још увек постоји изузетак, оно је ухваћено.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.alertIsPresent()); try { driver.switchTo().alert().accept(); } catch (NoAlertPresentException e) { System.out.println(“An exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver couldn’t locate the Alert”); }
# 5) орг.опенка.селениум.ИнвалидСелецторЕкцептион
Овај подразред од НоСуцхЕлементЕкцептион класа се јавља када је селектор нетачан или синтаксички неважећи. Овај изузетак се често јавља када се користи КСПАТХ локатор.
Размотрите доњи пример:
цлицкКСПатхБуттонАндВаит („// дугме (@ тип =’ дугме)) (100) “);
Ово би бацило ИнвалидСелецторЕкептион јер је синтакса КСПАТХ нетачна.
Избегавање и руковање : Да бисмо то избегли, требало би да проверимо коришћени локатор јер је локатор вероватно нетачан или је синтакса погрешна. Коришћење Фиребуга за проналажење кпатх-а може смањити овај изузетак.
Испод кода показује како се њиме рукује помоћу функције Три / Цатцх
try { clickXPathButtonAndWait('//button(@type='button')'); } catch (InvalidSelectorException e) { }
# 6) орг.опенка.селениум.ЕлементНотВисиблеЕкцептион
ЕлементНотВисиблеЕкцептион класа је подкласа од ЕлементНотИнтерацтаблеЕкцептион класа. Овај изузетак се избацује када ВебДривер покушава да изврши радњу на невидљивом веб елементу са којим се не може ступити у интеракцију. Односно, веб елемент је у скривеном стању.
На пример, у доњем коду, ако је тип дугмета са ид-ом „субмит“ „скривен“ у ХТМЛ-у, орг.опенка.селениум.ЕлементНотВисиблеЕкцептион биће бачен.
driver.findElement(By.id('submit')).click(); Exception Handling: try { driver.findElement(By.id('submit')).click(); } catch (ElementNotVisibleException e)
У овом случају изузетак се избацује чак и ако се страница није у потпуности учитала.
Избегавање и руковање : Постоје два начина за то. Можемо користити и чекање да се елемент у потпуности добије.
Доле наведени код чека 10 секунди на елемент. Ако је елемент видљив, а изузетак је и даље бачен, он се хвата.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.visibilityOfElementLocated(By.id(”submit”)); try { driver.findElement(By.id('submit')).click(); } catch (WebDriverException e) { System.out.println(“Exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver couldn’t find this element visible”); }
# 7) орг.опенка.селениум.ЕлементНотСелецтаблеЕкцептион
Овај изузетак потпада под ИнвалидЕлементСтатеЕкцептион класа . ЕлементНотСелецтаблеЕкцептион означава да је веб елемент присутан на веб страници, али да га није могуће одабрати.
На пример, доњи код може бацити ЕлементНотСелецтаблеЕкцептион ако је ид „брзи“ онемогућен.
Изаберите падајући мени = ново Изаберите (дривер.финдЕлемент (Би.ид („брзи“)));
Изузетак руковање:
покушати {
Изаберите падајући мени = ново Изаберите (дривер.финдЕлемент (Би.ид („брзи“)));
} цатцх (ЕлементНотСелецтаблеЕкцептион е)
У овом случају, изузетак се избацује чак и ако елемент постане омогућен након неког времена.
Избегавање и руковање : Можемо додати наредбу чекати да причека док елемент не постане кликтан. Ако и даље постоји изузетак, он је ухваћен.
try { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions. elementToBeClickable(By.id(”swift”)); try { Select dropdown = new Select(driver.findElement(By.id('swift'))); } catch (WebDriverException e) { System.out.println(“Exceptional case”); } } catch (TimeOutException e) System.out.println(“WebDriver found that this element was not selectable.”); }
# 8) орг.опенка.селениум .ТимеоутЕкцептион
Овај изузетак се дешава када довршење наредбе траје више од времена чекања. Чекања се углавном користе у ВебДриверу да би се избегао изузетак ЕлементНотВисиблеЕкцептион.
Понекад се тест страница можда неће у потпуности учитати пре следеће наредбе у програму. Ако ВебДривер покуша да пронађе елемент на веб страници пре него што се страница у потпуности учита, баца се изузетак ЕлементНотВисиблеЕкцептион. Да би се избегао овај изузетак, додају се наредбе за чекање.
Међутим, ако се компоненте не учитају ни након чекања, изузетак орг.опенка.селениум .ТимеоутЕкцептион биће бачен.
дривер.манаге (). тимеоутс (). имплицитлиВаит (10, ТимеУнит.СЕЦОНДС);
дривер.гет („хттпс://ввв.софтваретестингхелп.цом“);
У горе наведеном програму додаје се имплицитно чекање од 10 секунди. Ако је страница ввв.софтваретестингхелп.цом не учита се за 10 секунди, тада ће се бацити ТимеоутЕкцептион.
Избегавање и руковање : Да бисмо то избегли, можемо ручно да проверимо просечно време учитавања странице и прилагодимо чекање
Или можемо додати експлицитно чекање користећи ЈаваСцрипт извршитељ док се страница не учита.
У доњем примеру се користи извршитељ ЈаваСцрипт-а. Након навигације по страници, позивамо ЈаваСцрипт ретурн доцумент.реадиСтате 20 секунди док се не врати „цомплете“.
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); wait.until(webDriver -> ((JavascriptExecutor)webDriver).executeScript('return document.readyState').equals('complete')); driver.get('https://www.softwaretestinghelp.com');
# 9) орг.опенка.селениум.НоСуцхСессионЕкцептион
Овај изузетак се избацује када се метода позове након што је ВебДривер.куит () напустио прегледач. То се може догодити и због проблема са веб прегледачем, попут отказивања, а ВебДривер не може извршити ниједну наредбу помоћу инстанце управљачког програма.
Да бисте видели овај изузетак, доњи код се може извршити.
дривер.куит ()
Изаберите падајући мени = ново Изаберите (дривер.финдЕлемент (Би.ид („брзи“)));
Избегавање и руковање : Увек одаберите најновију стабилну верзију прегледача да бисте покренули тестове Селениум Вебдривер.
Овај изузетак се може смањити коришћењем дривер.куит () по завршетку свих тестова. Не покушавајте да их користите након сваког теста. То може довести до проблема када је инстанца управљачког програма ништавна и предстојећи тестови покушавају да је користе без иницијализације.
Доле наведени код креира ВебДривер инстанцу у анотацији @БефореСуите ТестиНГ и уништава је у анотацији @АфтерСуите ТестиНГ
@BeforeSuite public void setUp() throws MalformedURLException { WebDriver driver = new FirefoxDriver(); } @AfterSuite public void testDown() { driver.quit(); }
# 10) орг.опенка.селениум.СталеЕлементРеференцеЕкцептион
Овај изузетак каже да веб елемент више није присутан на веб страници.
Ова грешка није исто што и ЕлементНотВисиблеЕкцептион.
СталеЕлементРеференцеЕкцептион се баца када је у програму креиран објекат за одређени веб елемент без икаквог проблема, али; овај елемент више није присутан у прозору. То се може догодити ако постоји
- Прелазак на другу страницу
- ДОМ је освежен
- Прекидач за оквир или прозор
ВебЕлемент фирстНаме = дривер.финдЕлемент (Би.ид („име“));
дривер.свитцхТо (). виндов (Цхилд_Виндов);
елемент.сендКеис („Аарон“);
У горњем коду направљен је објекат фирстНаме, а затим је промењен прозор. Затим ВебДривер покушава да откуца „Аарон“ у поље обрасца. У овом случају се баца СталеЕлементРеференцеЕкцептион.
Избегавање и руковање : Потврдите да покушавамо да извршимо акцију у исправном прозору. Да бисмо избегли проблеме због освежавања ДОМ-а, можемо да користимо Динамиц Кспатх
Размотримо још један пример.
Рецимо да је „ид“ поља за корисничко име „усернаме_1“ и КСПатх ће бити // * (@ ид = ’име_1?) . Када поново отворите страницу, „ид“ се може променити и рећи „ 'име _11 ’. У овом случају, тест неће успети јер ВебДривер није могао да пронађе елемент. У овом случају, СталеЕлементРеференцеЕкцептион ће бити бачен.
У овом случају можемо користити динамички кпатх попут,
try { driver.findElement(By.xpath(“//*(contains(@id,firstname’))”)).sendKeys(“Aaron”); } catch (StaleElementReferenceException e)
У горњем примеру се користи динамички КСПАТХ и ако се изузетак и даље пронађе, он је ухваћен.
Закључак
Руковање изузецима је суштински део сваког јава програма као и скрипта селена. Можемо да изградимо робустан и оптималан код руковање изузетком на паметне начине . Такође је најбоља пракса да се изузеци обрађују у скрипти која ће вам пружити бољи извештај када програм из било ког разлога закаже.
Овде смо покушали да покријемо процес и оквир руковања изузецима који је потребан да се примени у скриптама селена.
Имајте на уму да није обавезно увек обрађивати изузетак у а покушај да ухватиш блокирати. Такође можете бацити изузетак у зависности од захтева у скрипти.
Изузетак не треба занемарити јер крше извршавање програма. У овом упутству смо прошли кроз различите изузетке и начине како да смањимо шансе за њихово добијање ручним проверама и кодовима.
Додавањем чекања могу се контролисати неки случајеви попут „НоСуцхЕлементЕкцептион“, „ЕлементНотФоундЕкцептион“, „ЕлементНотВисиблеЕкцептион“.
Следећи водич # 20 : У предстојећем упутству разговарали бисмо о доступни су различити типови оквира за тестирање . Такође бисмо проучавали предности и недостатке коришћења младог оквирног приступа у тестирању аутоматизације. Детаљно бисмо разговарали о тестном оквиру вођеном подацима.
Пошаљите своја питања у вези са руковањем изузецима у програму Селениум ВебДривер, ако их имате.
Препоручено читање
- Јава изузеци и руковање изузецима са примерима
- Како се рукује упозорењима / искачућим прозорима у програму Селениум ВебДривер - Водич за селен # 16
- Водич за АутоИт - Аутоматско преузимање, инсталирање и основна скрипта за АутоИт
- Водич за краставац селениј: Интеграција Јава Селениум ВебДривер краставца
- Интеграција селена са ЈМетером
- Увод у Селениум ВебДривер - Водич за селен бр. 8
- 30+ најбољих водича за селен: научите селен на стварним примерима
- Прилика за хонорарно хонорарно ангажовање стручњака за селен