webdriver listeners selenium
Какво представляват слушателите на WebDriver? Защо се нуждаем от слушатели при тестване за автоматизация на селен? Този урок отговаря подробно на тези въпроси с примерни примери за кодове:
Слушателите, както подсказва името, „слушат“ всяко събитие, предписано в кода на Селен. Например, ако искате да знаете какво се случва, преди да щракнете върху който и да е елемент; преди и след като навигирате до елемент или какво се случва, когато се хвърли изключение и тестът се провали, слушателите са полезни.
Практическото използване на слушателите в теста за автоматизация на селен може да бъде да се регистрира реда на действията и да се направи екранна снимка, когато и когато се изключи изключение. Това улеснява лесното отстраняване на грешки в по-късните етапи на тестовото изпълнение.
=> Проверете ВСИЧКИ уроци за селен тук.
Какво ще научите:
Внедряване на слушатели на Webdriver
Има основно два типа слушатели:
- Слушатели на Webdriver
- Слушатели на TestNG
Първо ще разберем как работят слушателите на Webdriver. В този урок фокусът ни ще бъде върху слушателя на събития Webdriver.
Защо използваме Webdriver Слушател на събития?
С помощта на Webdriver можем да задействаме много събития в браузъра и уеб елементите. Той записва всички събития, които се задействат по време на изпълнение и може да ни помогне при отстраняване на грешки, когато изпълнението приключи.
Има два начина, по които можем да внедрим слушателите на събития Webdriver:
- WebDriverEventListener което е интерфейс, който има някои предварително дефинирани методи за проследяване на събитията в Webdriver. Изисква от нас да изпълним ВСИЧКО методите, предварително дефинирани в интерфейса.
- Клас AbstractWebDriverEventListener което ни осигурява възможността да прилагаме само онези методи, от които се интересуваме.
# 1) Интерфейс WebDriverEventListener
Предварително дефинирани методи, използвани за реализиране на интерфейса WebDriverEventListener, са изброени по-долу:
(i) void beforeChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence [] arg2)
Този метод се задейства, когато изпълняваме операцията sendKeys () или clear () на уеб елемента. [Например, driver.findElement (By.id („Login“)). Clear ()] и се задейства ПРЕДИ извършване на операцията върху уеб елемента.
Параметри:
arg0= Web Element arg1=driver
(ii) void afterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence [] arg2)
Този метод се задейства, когато изпълняваме операцията sendKeys () или clear () на уеб елемента. [Например, driver.findElement (By.id („Login“)). Clear ()] и се задейства СЛЕД извършване на операцията върху уеб елемента.
Параметри:
arg0= Web Element arg1=driver
(iii) void beforeClickOn (WebElement arg0, WebDriver arg1)
Този метод се задейства ПРЕДИ ние кликваме върху който и да е уеб елемент.
Параметри:
arg0= Web Element arg1=driver
(iv) void afterClickOn (WebElement arg0, WebDriver arg1)
Този метод се задейства СЛЕД ние кликваме върху който и да е уеб елемент.
кой е най-добрият безплатен рекламен блокер за хром
Параметри:
arg0= Web Element arg1=driver
(v) void beforeNavigateTo (String arg0, WebDriver arg1)
Този метод се задейства, когато използваме navigate (). To (String URL) [Например, navigate (). To („https: // www.google.com ”)] И се задейства ПРЕДИ навигация до URL адреса.
Параметри:
arg0= URL arg1=driver
(vi) void afterNavigateTo (String arg0, WebDriver arg1)
Този метод се задейства, когато използваме navigate (). To (String URL) [Например, navigate (). To („https: // www.google.com ”)] И се задейства СЛЕД навигация до URL адреса.
Параметри:
arg0= URL arg1=driver
(vii) void beforeNavigateBack (WebDriver arg0)
Този метод се задейства, когато използваме командата navigate (). Back (). То се провежда ПРЕДИ пренасочване на потребителя към предишната страница.
Параметри:
arg0=driver
(viii) void afterNavigateBack (WebDriver arg0)
Този метод се задейства, когато използваме командата navigate (). Back (). То се провежда СЛЕД пренасочване на потребителя към предишната страница.
Параметри:
arg0=driver
(ix) void beforeNavigateForward (WebDriver arg0)
Този метод се задейства, когато използваме командата navigate (). Forward (). То се провежда ПРЕДИ пренасочване на потребителя към следващата страница.
Параметри:
arg0=driver
(x) void afterNavigateBack (WebDriver arg0)
Този метод се задейства, когато използваме командата navigate (). Forward (). То се провежда СЛЕД пренасочване на потребителя към следващата страница.
Параметри:
arg0=driver
(xi) void beforeNavigateRefresh (WebDriver arg0)
Този метод се задейства, когато използваме командата navigate (). Refresh (). То се провежда ПРЕДИ освежаване на текущата страница.
Параметри:
arg0=driver
(xii) void afterNavigateRefresh (WebDriver arg0)
Този метод се задейства, когато използваме командата navigate (). Refresh (). То се провежда СЛЕД освежаване на текущата страница.
Параметри:
arg0=driver
(xiii) void beforeFindBy (От arg0, WebElement arg1, WebDriver arg2)
Този метод се задейства, когато използваме командата driver.findElement (By.id („Някакъв идентификатор или друг локатор“)) . То се провежда ПРЕДИ намерете уеб елемента.
Параметри:
arg0=locator arg1=Web Element arg2=driver
(xiv) void afterFindBy (От arg0, WebElement arg1, WebDriver arg2)
Този метод се задейства, когато използваме командата driver.findElement (By.id („Някакъв идентификатор или друг локатор“)) . То се провежда СЛЕД намерете уеб елемента.
Параметри:
arg0=locator arg1=Web Element arg2=driver
(xv) void onException (Изхвърляем arg0, WebDriver arg1)
Този метод се хвърля винаги, когато се хвърли изключение. Например, ако Webdriver не е в състояние да намери елемента, той ще задейства този метод и ще изпълни какъвто и да е код, написан в него.
Параметри:
arg0=Exception arg1= driver
(xvi) void beforeAlertAccept (WebDriver arg0)
Този метод се задейства винаги, когато на екрана е показано поле за предупреждение и се задейства вдясно ПРЕДИ щракване върху бутона „OK или ACCEPT“.
Параметри:
arg0=driver
(xvii) void afterAlertAccept (WebDriver arg0)
Този метод се задейства винаги, когато на екрана е показано поле за предупреждение и се задейства вдясно СЛЕД щракване върху бутона „OK или ACCEPT“.
Параметри:
arg0=driver
(xviii) void beforeAlertDismiss (WebDriver arg0)
Този метод се задейства винаги, когато на екрана е показано поле за предупреждение и се задейства вдясно ПРЕДИ щракване върху бутона „ОТМЕНЯ“.
Параметри:
Въпроси и отговори за интервюта на бизнес анализатор
arg0=driver
(xix) void afterAlertDismiss (WebDriver arg0)
Този метод се задейства винаги, когато на екрана е показано поле за предупреждение и се задейства вдясно СЛЕД щракване върху бутона „ОТМЕНЯ“.
Параметри:
arg0=driver
Това са всички методи, с които се предлага WebDriverEventListener. Има и други два метода beforeScript и afterScript, но няма да разглеждаме тези в този урок.
Стъпки за внедряване на слушатели с помощта на интерфейса “WebDriverEventListener” в Eclipse:
Етап 1: Създайте пакет с име като „Слушатели“. Вътре в този пакет създайте клас, наречен „ Слушатели на Webdriver ”И го оставете да се изпълни “WebDriverEventListener” .
Потребителският интерфейс трябва да изглежда по-долу:
Задръжте курсора на мишката върху червената линия с грешка, Eclipse трябва да хвърли предложението по-долу за импортиране на “WebDriverEventListener”. Щракнете върху Импортиране.
Грешката в WebDriverEventListener е излязла, но ще видите грешката по-долу в класа „WebDriverListeners“. Преместете курсора върху грешката и ще видите предложение за добавяне на неприложени методи. Кликнете върху него и ще видите всички методи, изброени и описани по-горе.
Моля, обърнете внимание, че ние добавихме реда System.out.println към всеки метод за демонстрационни цели.
Примерен код-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: Създайте клас Listeners_Tests и се уверете, че той има основния метод вътре в класа. Оставете го да разшири класа WebDriverListeners, така че класът слушател да може да извърши операция върху командите на браузъра, предписани за определени събития.
Моля, копирайте и поставете кода по-долу в класа Listeners_Tests. Изпълнете кода по-долу като приложението Java.
Примерен код-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 на конзолата
въпроси за интервю за уеб услуги в Java
Събитие-1: Това записва събитието предиNavigateTo и afterNavigateTo и съответно изпълнява действията, записани в двата блока.
Събитие-2: Това записва събитието предиFindBy и afterFindBy и съответно изпълнява действията, записани в двата блока. Събитието след тези две събития обхваща събития beforeClick и afterClick.
Събитие-3: Това записва събития beforeChangeValueOf и afterChangeValue.
Събитие-4: Това е същото като Събитие-3
Събитие-5: Това записва предиNavigateBack и afterNavigateBack събития.
Събитие-6: Това записва събития предиNavigateForward и afterNavigateForward.
Събитие-7: Това записва предиNavigateRefresh и afterNavigateRefresh събития.
Събитие-8: Това е същото като Събитие-1
Събитие-9: Това е същото като Събитие-2
Фрагмент №2 на конзолата
Събитие-10: Това записва събитията като beforeAlertAccept и afterAlertAccept.
Събитие-11: Това записва събитията като beforeAlertDismiss и afterAlertDismiss.
Събитие-12: Това записва събития като onException и изхвърля съобщението.
Надявам се краткото описание на слушателите да ви даде представа за това как работят слушателите на Webdriver. Както казахме по-рано, че с помощта на WebDriverEventListener трябва да внедрим всички методи, налични с този интерфейс.
С помощта на клас AbstractWebDriverEventListener обаче можем да изберем кои събития искаме да реализираме.
# 2) Клас AbstractWebDriverEventListener
Стъпки за внедряване на слушатели, използващи клас „AbstractWebDriverEventListener“:
Етап 1
Създайте клас “ AbstractWebDriverListener 'И го оставете да разшири класа' AbstractWebDriverEventListener '
Както можете да видите, за разлика от „ WebDriverEventListener ”, Този клас при разширение не извежда грешка за добавяне на неприложени методи. Можете да изберете кои методи искате да внедрите във вашия проект.
Копирайте и поставете долния код:
Примерен код-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
Създайте нов клас с името „ AbstractListeners_Test 'И вътре в него създайте екземпляра на' AbstractWebDriverListeners ”Клас.
Копирайте и поставете кода по-долу в този клас.
Примерен код-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(); } }
Този клас също има събитията, записани по-рано, но тъй като сме ограничили нашия клас на слушател да реализира само шест събития, той ще отхвърли други и ще покаже само дневника за споменатите.
Изглед на прозореца на конзолата
Както можете да видите жълто маркираните области в горното изображение, само методите, които са внедрени в AbstractWebDriverListeners Класът е задействан.
Заключение
Слушателите на WebDriver са интерфейсите, които прослушват събитие в браузъра и отговарят на него съответно. Ако го внедрите с помощта на WebDriverEventListener, трябва да внедрите всички методи, свързани с този интерфейс
Ако внедрите WebDriver Listener с помощта на класа AbstractWebDriverEventListener, можете да изберете методите, които искате да внедрите.
=> Посетете тук, за да научите селен от нулата.
Препоръчително четене
- Урок за краставици селен: Интеграция на краставица Java Selenium WebDriver
- Въведение в Selenium WebDriver - Урок № 8 за селен
- Урок за ChromeDriver Selenium: Тестове за Selenium Webdriver в Chrome
- Внедряване на нашия първи скрипт за WebDriver - Урок № 10 за Selenium WebDriver
- 30+ най-добри урока за селен: Научете селен с реални примери
- Често задавани въпроси за селен
- Как да боравим със сигнали / изскачащи прозорци в Selenium WebDriver - Урок за селен # 16
- Неявно и явно чакане в Selenium WebDriver (Видове чакане на селен)