webdriver listeners selenium
Шта су слушаоци ВебДривер-а? Зашто су нам потребни слушаоци у тестирању аутоматизације селена? Овај водич детаљно одговара на ова питања примерима примера кода:
Слушаоци, као што и само име говори, „слушају“ било који догађај који је прописан у коду Селениум. На пример, ако желите да знате шта се дешава пре него што кликнете било који елемент; пре и након што дођете до елемента или шта се дешава када се избаци изузетак и тест не успе, слушаоци добро дођу.
Практична употреба слушалаца у тестирању аутоматизације селена може бити евидентирање редоследа радњи и снимање екрана кад и када се изузетак баци. Ово омогућава лако отклањање грешака у каснијим фазама извршавања теста.
=> Овде погледајте СВЕ туторијале о селену.
Шта ћете научити:
Имплементација слушалаца Вебдривер-а
Постоје углавном две врсте слушалаца:
- Слушаоци веб-драјвера
- Слушаоци ТестНГ-а
Прво ћемо разумети како слушаоци Вебдривера раде. У овом водичу наш фокус ће бити на преслушавачу догађаја Вебдривер-а.
Зашто користимо прислушкивач догађаја Вебдривер?
Уз помоћ Вебдривера, успели смо да покренемо мноштво догађаја у прегледачу и веб елементима. Он бележи све догађаје који су покренути током извршења и може нам помоћи у отклањању грешака када је извршење завршено.
Постоје два начина на која можемо имплементирати слушатеље догађаја Вебдривер:
- ВебДриверЕвентЛистенер који је интерфејс који има неке унапред дефинисане методе за праћење догађаја Вебдривер. То захтева од нас да спроведемо СВЕ методе предефинисане у Интерфејсу.
- Класа АбстрацтВебДриверЕвентЛистенер што нам пружа могућност примене само оних метода за које смо заинтересовани.
# 1) Интерфејс ВебДриверЕвентЛистенер
Предефинисане методе коришћене за примену интерфејса ВебДриверЕвентЛистенер наведене су у наставку:
(и) воид бефореЦхангеВалуеОф (ВебЕлемент арг0, ВебДривер арг1, ЦхарСекуенце () арг2)
Овај метод се активира када на веб елементу изводимо операцију сендКеис () или цлеар (). (На пример, дривер.финдЕлемент (Би.ид („Пријава“)). Цлеар ()) и покреће се ПРЕ НЕГО ШТО извођење операције на Веб елементу.
Параметри:
arg0= Web Element arg1=driver
(ии) воид афтерЦхангеВалуеОф (ВебЕлемент арг0, ВебДривер арг1, ЦхарСекуенце () арг2)
Овај метод се активира када на веб елементу изводимо операцију сендКеис () или цлеар (). (На пример, дривер.финдЕлемент (Би.ид („Пријава“)). Цлеар ()) и покреће се ПОСЛЕ извођење операције на Веб елементу.
Параметри:
arg0= Web Element arg1=driver
(иии) воид бефореЦлицкОн (ВебЕлемент арг0, ВебДривер арг1)
Ова метода се покреће ПРЕ НЕГО ШТО кликнемо на било који веб елемент.
Параметри:
arg0= Web Element arg1=driver
(ив) воид афтерЦлицкОн (ВебЕлемент арг0, ВебДривер арг1)
који је најбољи софтвер за уклањање шпијунског софтвера
Ова метода се покреће ПОСЛЕ кликнемо на било који веб елемент.
Параметри:
arg0= Web Element arg1=driver
(в) воид бефореНавигатеТо (Стринг арг0, ВебДривер арг1)
Овај метод се активира када користимо навигате (). То (Стринг УРЛ) (На пример, навигате (). То („хттпс: // ввв.гоогле.цом ”)) И покреће се ПРЕ НЕГО ШТО навигација до УРЛ адресе.
Параметри:
arg0= URL arg1=driver
(ви) воид афтерНавигатеТо (Стринг арг0, ВебДривер арг1)
Овај метод се активира када користимо навигате (). То (Стринг УРЛ) (На пример, навигате (). То („хттпс: // ввв.гоогле.цом ”)) И покреће се ПОСЛЕ навигација до УРЛ адресе.
Параметри:
arg0= URL arg1=driver
(вии) воид бефореНавигатеБацк (ВебДривер арг0)
Ова метода се покреће када користимо наредбу навигате (). Бацк (). Се одвија ПРЕ НЕГО ШТО преусмеравање корисника на претходну страницу.
Параметри:
arg0=driver
(виии) воид афтерНавигатеБацк (ВебДривер арг0)
Ова метода се покреће када користимо наредбу навигате (). Бацк (). Се одвија ПОСЛЕ преусмеравање корисника на претходну страницу.
Параметри:
arg0=driver
(ик) воид бефореНавигатеФорвард (ВебДривер арг0)
Ова метода се покреће када користимо наредбу навигате (). Форвард (). Се одвија ПРЕ НЕГО ШТО преусмеравање корисника на следећу страницу.
Параметри:
arg0=driver
(к) воид афтерНавигатеБацк (ВебДривер арг0)
Ова метода се покреће када користимо наредбу навигате (). Форвард (). Се одвија ПОСЛЕ преусмеравање корисника на следећу страницу.
Параметри:
arg0=driver
(ки) воид бефореНавигатеРефресх (ВебДривер арг0)
Овај метод се активира када користимо наредбу навигате (). Рефресх (). Се одвија ПРЕ НЕГО ШТО освежавање тренутне странице.
Параметри:
arg0=driver
(кии) воид афтерНавигатеРефресх (ВебДривер арг0)
Овај метод се активира када користимо наредбу навигате (). Рефресх (). Се одвија ПОСЛЕ освежавање тренутне странице.
Параметри:
arg0=driver
(киии) воид бефореФиндБи (од арг0, ВебЕлемент арг1, ВебДривер арг2)
Овај метод се активира када користимо наредбу дривер.финдЕлемент (Би.ид („Неки ИД или било који други локатор“)) . Се одвија ПРЕ НЕГО ШТО пронађите веб елемент.
Параметри:
arg0=locator arg1=Web Element arg2=driver
(кив) воид афтерФиндБи (Од арг0, ВебЕлемент арг1, ВебДривер арг2)
Овај метод се активира када користимо наредбу дривер.финдЕлемент (Би.ид („Неки ИД или било који други локатор“)) . Се одвија ПОСЛЕ пронађите веб елемент.
Параметри:
arg0=locator arg1=Web Element arg2=driver
(кв) воид онЕкцептион (Арг0 за бацање, ВебДривер арг1)
Ова метода се баца кад год се изузме изузетак. На пример, ако Вебдривер не може да пронађе елемент, покренуће овај метод и извршиће било који код који је записан у њему.
Параметри:
arg0=Exception arg1= driver
(кви) воид бефореАлертАццепт (ВебДривер арг0)
Ова метода се активира кад год се на екрану прикаже оквир за упозорење и покреће се удесно ПРЕ НЕГО ШТО кликом на дугме „ОК ор АЦЦЕПТ“.
Параметри:
arg0=driver
(квии) воид афтерАлертАццепт (ВебДривер арг0)
Ова метода се активира кад год се на екрану прикаже оквир за упозорење и покреће се удесно ПОСЛЕ кликом на дугме „ОК ор АЦЦЕПТ“.
Параметри:
arg0=driver
(квиии) воид бефореАлертДисмисс (ВебДривер арг0)
Ова метода се активира кад год се на екрану прикаже оквир за упозорење и покреће се удесно ПРЕ НЕГО ШТО кликом на дугме „ОТКАЖИ“.
Параметри:
arg0=driver
(кик) воид афтерАлертДисмисс (ВебДривер арг0)
Ова метода се активира кад год се на екрану прикаже оквир за упозорење и покреће се удесно ПОСЛЕ кликом на дугме „ОТКАЖИ“.
Параметри:
arg0=driver
Ово су све методе које су доступне са ВебДриверЕвентЛистенер. Постоје још две методе бефореСцрипт и афтерСцрипт, али нећемо их покривати у овом упутству.
Кораци за примену слушалаца уз помоћ интерфејса „ВебДриверЕвентЛистенер“ у Ецлипсе:
најбољи ДВД риппер за Виндовс 10
Корак 1: Направите пакет са именом „Слушаоци“. Унутар тог пакета креирајте класу под називом „ ВебдриверЛистенерс ”И нека спроведе „ВебДриверЕвентЛистенер“ .
Кориснички интерфејс би требао изгледати доле:
Задржите показивач миша изнад црвене линије са грешком, Ецлипсе би требало да баци доњи предлог за увоз „ВебДриверЕвентЛистенер“. Кликните на Увези.
Изашла је грешка на ВебДриверЕвентЛистенер, али видећете доњу грешку на класи „ВебДриверЛистенерс“. Пређите курсором преко грешке и видећете предлог за додавање непримењених метода. Кликните на њу и видећете да су све методе наведене и описане горе.
Имајте на уму да смо додали линију Систем.оут.принтлн свакој методи у сврху демонстрације.
Пример кода-1
package Listeners; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.events.WebDriverEventListener; public class WebDriverListeners implements WebDriverEventListener { @Override public void afterAlertAccept(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Alert Accept '+arg0.toString() ); } @Override public void afterAlertDismiss(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Alert Dismiss '+ arg0); } @Override public void afterChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('After value change of' +arg0); } @Override public void afterClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('After clicked'+arg0); } @Override public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('After Find By'+arg1); } @Override public void afterNavigateBack(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Navigate Back'); } @Override public void afterNavigateForward(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('After Navigate Forward'); } @Override public void afterNavigateRefresh(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('On Navigating Refresh'); } @Override public void afterNavigateTo(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('On Navigating To'+arg0); } @Override public void afterScript(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('After Script'); } @Override public void beforeAlertAccept(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Alert Accept'); } @Override public void beforeAlertDismiss(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Alert Dismiss'); } @Override public void beforeChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('Before Change Value of'+arg0); } @Override public void beforeClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Click on'+arg0); } @Override public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('Before Find By'+arg0); } @Override public void beforeNavigateBack(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Navigate Back'); } @Override public void beforeNavigateForward(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Navigate Forward'); } @Override public void beforeNavigateRefresh(WebDriver arg0) { // TODO Auto-generated method stub System.out.println('Before Navigate Refresh'); } @Override public void beforeNavigateTo(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Navigate To'+arg0); } @Override public void beforeScript(String arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Script'); } @Override public void onException(Throwable arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('On Exception'+arg0); } }
Корак 2: Направите Листенерс_Тестс класе и уверите се да она има главни метод унутар класе. Нека прошири класу ВебДриверЛистенерс тако да класа слушалац може да изврши операцију над командама прегледача прописане за одређене догађаје.
Копирајте и налепите доњи код у разред Листенерс_Тестс. Покрените доњи код попут Јава апликације.
Пример кода-2
package Listeners; import java.util.Arrays; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.Proxy; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.events.EventFiringWebDriver; public class Listeners_Tests extends WebDriverListeners{ static WebElement e; static ChromeDriver driver; public static void main(String() args) throws InterruptedException { // TODO Auto-generated method stub System.setProperty('webdriver.chrome.driver', 'E:\chromedriver.exe'); /*Setting the capabilities of Chrome Driver*/ try { DesiredCapabilities capabilities = DesiredCapabilities.chrome(); Proxy proxy = new Proxy(); String proxyServer = String.format('AProxyIDontWantToDisplay', System.getenv('proxy.username'), System.getenv('proxy.password')); proxy.setHttpProxy(proxyServer); capabilities.setCapability('proxy', proxy); ChromeOptions options = new ChromeOptions(); options.addArguments(Arrays.asList ('--no-sandbox','--ignore-certificate-errors','--homepage=about:blank','--no-first-run')); options.addArguments('disable-infobars'); capabilities.setCapability(ChromeOptions.CAPABILITY, options); driver = new ChromeDriver(capabilities); } catch (Exception e) { throw new Error(e); } /*---- Creating the instance of EventFiringWebDriver Class----*/ EventFiringWebDriver eventRecorder = new EventFiringWebDriver(driver); /*---- Creating the instance of parent class 'WebdriverListeners' class----*/ WebDriverListeners eCapture = new WebDriverListeners(); /* The below step registers the listeners for logging purpose*/ eventRecorder.register(eCapture); //Event One System.out.println('This is recording Event-One'); eventRecorder.navigate().to('https://www.google.com'); //Event Two System.out.println('This is recording Event-Two'); eventRecorder.findElement(By.xpath('//a(text()='Sign in')')).click(); //Event Three System.out.println('This is recording Event-Three'); eventRecorder.findElement(By.id('identifierId')).clear(); Thread.sleep(5000); //Event Four System.out.println('This is recording Event-Four'); eventRecorder.findElement(By.id('identifierId')).sendKeys('abc@gmail.com'); Thread.sleep(5000); //Event Five System.out.println('This is recording Event-Five'); eventRecorder.navigate().back(); //Event Six System.out.println('This is recording Event-Six'); eventRecorder.navigate().forward(); //Event Seven System.out.println('This is recording Event-Seven'); eventRecorder.navigate().refresh(); //Event Eight System.out.println('This is recording Event-Eight'); eventRecorder.get('https://www.irctc.co.in/eticketing/loginHome.jsf'); //Event Nine System.out.println('This is recording Event-Nine'); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Ten System.out.println('This is recording Event-Ten'); alert.accept(); } catch (Exception e) { } Thread.sleep(3000); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Eleven System.out.println('This is recording Event-Eleven'); alert.dismiss(); } catch (Exception e) { } //Intentionally giving wrong id so it triggers onException Listener--> Event Twelve System.out.println('This is recording Event-Twelve'); eventRecorder.findElement(By.id('loginbutn')).click(); } }
Након што је трчање успешно завршено, проверите садржај пријављен у конзолу. Ићи ћемо на сваки догађај наведен у горњем коду.
Фрагмент бр. 1 конзоле
Догађај-1: Ово бележи догађај пре НавигатеТо и афтерНавигатеТо и извршава радње написане у два блока у складу с тим.
Догађај 2: Ово бележи догађај преФиндБи и афтерФиндБи и извршава радње написане у два блока у складу с тим. Догађај након ова два догађаја покрива догађаје бефореЦлицк и афтерЦлицк.
Догађај 3: Ово бележи догађаје бефореЦхангеВалуеОф и афтерЦхангеВалуе.
како подесити мавен у помрачењу
Догађај 4: Ово је исто као догађај-3
Догађај 5: Ово бележи догађаје пре НавигатеБацк и афтерНавигатеБацк.
Догађај 6: Ово бележи догађаје преНавигатеФорвард и афтерНавигатеФорвард.
Догађај 7: Ово бележи догађаје преНавигатеРефресх и афтерНавигатеРефресх.
Догађај 8: Ово је исто као догађај-1
Догађај 9: Ово је исто као догађај-2
Фрагмент бр. 2 конзоле
Догађај 10: Ово бележи догађаје попут бефореАлертАццепт и афтерАлертАццепт.
Догађај 11: Ово бележи догађаје попут бефореАлертДисмисс и афтерАлертДисмисс.
Догађај 12: Ово бележи догађаје попут онЕкцептион и баца поруку.
Надам се да ће вам кратки опис слушалаца дати идеју о томе како слушаоци Вебдривер-а раде. Као што смо раније рекли да уз помоћ ВебДриверЕвентЛистенер морамо применити све методе доступне са овим интерфејсом.
Међутим, уз помоћ класе АбстрацтВебДриверЕвентЛистенер можемо одабрати које догађаје желимо да применимо.
# 2) Класа АбстрацтВебДриверЕвентЛистенер
Кораци за примену слушалаца помоћу класе „АбстрацтВебДриверЕвентЛистенер“:
Корак 1
Направите предмет “ АбстрацтВебДриверЛистенер 'И нека продужи разред' АбстрацтВебДриверЕвентЛистенер '
Као што видите, за разлику од „ ВебДриверЕвентЛистенер ”, Ова класа када се прошири не доноси грешку да би додала непримењене методе. Можете одабрати које методе желите да примените у свој пројекат.
Копирајте и налепите доњи код:
Пример кода-3
package Listeners; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.events.AbstractWebDriverEventListener; public class AbstractWebDriverListeners extends AbstractWebDriverEventListener{ public void afterChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('After value change of' +arg0); } public void afterClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('After clicked'+arg0); } public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('After Find By'+arg1); } public void beforeChangeValueOf(WebElement arg0, WebDriver arg1, CharSequence() arg2) { // TODO Auto-generated method stub System.out.println('Before Change Value of'+arg0); } public void beforeClickOn(WebElement arg0, WebDriver arg1) { // TODO Auto-generated method stub System.out.println('Before Click on'+arg0); } public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) { // TODO Auto-generated method stub System.out.println('Before Find By'+arg0); } }
Корак 2
Направите нову класу са именом „ АбстрацтЛистенерс_Тест “И у њему креирајте инстанцу„ АбстрацтВебДриверЛистенерс ' класа.
Копирајте и залепите доњи код унутар ове класе.
Пример кода-4
package Listeners; import java.util.Arrays; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.Proxy; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.support.events.EventFiringWebDriver; public class AbstractListeners_Tests extends WebDriverListeners{ static WebElement e; static ChromeDriver driver; public static void main(String() args) throws InterruptedException { // TODO Auto-generated method stub System.setProperty('webdriver.chrome.driver', 'E:\chromedriver.exe'); /*Setting the capabilities of Chrome Driver*/ try { DesiredCapabilities capabilities = DesiredCapabilities.chrome(); Proxy proxy = new Proxy(); String proxyServer = String.format('AProxyIDontWantToDisplay', System.getenv('proxy.username'), System.getenv('proxy.password')); proxy.setHttpProxy(proxyServer); capabilities.setCapability('proxy', proxy); ChromeOptions options = new ChromeOptions(); options.addArguments(Arrays.asList ('--no-sandbox','--ignore-certificate-errors','--homepage=about:blank','--no-first-run')); options.addArguments('disable-infobars'); capabilities.setCapability(ChromeOptions.CAPABILITY, options); driver = new ChromeDriver(capabilities); } catch (Exception e) { throw new Error(e); } /*---- Creating the instance of EventFiringWebDriver Class----*/ EventFiringWebDriver eventRecorder = new EventFiringWebDriver(driver); /*---- Creating the instance of parent class 'AbstractWebdriverListeners' class----*/ AbstractWebDriverListeners eCapture = new AbstractWebDriverListeners(); /* The below step registers the listeners for logging purpose*/ eventRecorder.register(eCapture); //Event One System.out.println('This is recording Event-One'); eventRecorder.navigate().to('https://www.google.com'); //Event Two System.out.println('This is recording Event-Two'); eventRecorder.findElement(By.xpath('//a(text()='Sign in')')).click(); //Event Three System.out.println('This is recording Event-Three'); eventRecorder.findElement(By.id('identifierId')).clear(); Thread.sleep(5000); //Event Four System.out.println('This is recording Event-Four'); eventRecorder.findElement(By.id('identifierId')).sendKeys('abc@gmail.com'); Thread.sleep(5000); //Event Five System.out.println('This is recording Event-Five'); eventRecorder.navigate().back(); //Event Six System.out.println('This is recording Event-Six'); eventRecorder.navigate().forward(); //Event Seven System.out.println('This is recording Event-Seven'); eventRecorder.navigate().refresh(); //Event Eight System.out.println('This is recording Event-Eight'); eventRecorder.get('https://www.irctc.co.in/eticketing/loginHome.jsf'); //Event Nine System.out.println('This is recording Event-Nine'); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Ten System.out.println('This is recording Event-Ten'); alert.accept(); } catch (Exception e) { } Thread.sleep(3000); eventRecorder.findElement(By.id('loginbutton')).click(); try { Alert alert = eventRecorder.switchTo().alert(); // check if alert exists // TODO find better way alert.getText(); //Event Eleven System.out.println('This is recording Event-Eleven'); alert.dismiss(); } catch (Exception e) { } //Intentionally giving wrong id so it triggers onException Listener--> Event Twelve System.out.println('This is recording Event-Twelve'); eventRecorder.findElement(By.id('loginbutn')).click(); } }
Ова класа такође има раније забележене догађаје, али с обзиром на то да смо нашу класу слушача ограничили на примену само шест догађаја, она ће одбацити друге и приказати само евиденцију за поменуте.
Поглед прозора конзоле
Као што видите жуто означена подручја на горњој слици, само методе које су примењене у АбстрацтВебДриверЛистенерс Предавање је покренуто.
Закључак
Слушаоци ВебДривер-а су интерфејси који преслушавају догађај прегледача и одговарају на њега. Ако га примените уз помоћ ВебДриверЕвентЛистенер, морате применити све методе укључене у овај интерфејс
Ако имплементирате ВебДривер Листенер уз помоћ класе АбстрацтВебДриверЕвентЛистенер, можете одабрати методе које желите да примените.
=> Посетите овде да бисте научили селен из огреботина.
Препоручено читање
- Водич за краставац селениј: Интеграција Јава Селениум ВебДривер краставца
- Увод у Селениум ВебДривер - Водич за селен бр. 8
- Водич за ЦхромеДривер Селениум: Тестови Селениум Вебдривер-а на Цхроме-у
- Примена наше прве скрипте за ВебДривер - Водич бр. 10 за Селениум ВебДривер
- 30+ најбољих водича за селен: научите селен на стварним примерима
- Честа питања о селену
- Како се рукује упозорењима / искачућим прозорима у програму Селениум ВебДривер - Водич за селен # 16
- Имплицитно и експлицитно чекање у Селениум ВебДривер-у (врсте селенијских чекања)