webdriver listeners selenium
Що таке слухачі 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 (“Вхід”)). Clear ()) і запускається ДО виконання операції над веб-елементом.
Параметри:
arg0= Web Element arg1=driver
(ii) void afterChangeValueOf (WebElement arg0, WebDriver arg1, CharSequence () arg2)
Цей метод спрацьовує, коли ми виконуємо операцію sendKeys () або clear () над веб-елементом. (Наприклад, driver.findElement (By.id (“Вхід”)). 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 (Throwable arg0, WebDriver arg1)
Цей метод створюється щоразу, коли виникає виняток. Наприклад, якщо Webdriver не може знайти елемент, він ініціює цей метод і буде виконувати будь-який код, написаний всередині нього.
яке програмне забезпечення потрібно для використання Інтернет-телефону?
Параметри:
arg0=Exception arg1= driver
(xvi) void beforeAlertAccept (WebDriver arg0)
Цей метод спрацьовує, коли на екрані відображається вікно попередження та спрацьовує праворуч ДО натиснувши кнопку “OK or ACCEPT”.
Параметри:
arg0=driver
(xvii) void afterAlertAccept (WebDriver arg0)
Цей метод спрацьовує, коли на екрані відображається вікно попередження та спрацьовує праворуч ПІСЛЯ натиснувши кнопку “OK or ACCEPT”.
Параметри:
arg0=driver
(xviii) void beforeAlertDismiss (WebDriver arg0)
Цей метод спрацьовує, коли на екрані відображається вікно попередження та спрацьовує праворуч ДО натиснувши кнопку “СКАСУВАТИ”.
Параметри:
arg0=driver
(xix) void afterAlertDismiss (WebDriver arg0)
Цей метод спрацьовує, коли на екрані відображається вікно попередження та спрацьовує праворуч ПІСЛЯ натиснувши кнопку “СКАСУВАТИ”.
Параметри:
arg0=driver
Це всі доступні методи WebDriverEventListener. Існують ще два методи beforeScript і afterScript, але ми не збираємося висвітлювати їх у цьому посібнику.
Етапи впровадження слухачів за допомогою інтерфейсу “WebDriverEventListener” в Eclipse:
Крок 1: Створіть пакет із назвою “Слухачі”. Всередині цього пакету створіть клас під назвою “ Слухачі веб-драйверів ”І нехай це реалізується “WebDriverEventListener” .
Інтерфейс користувача повинен виглядати нижче:
Наведіть курсор миші на червону лінію з помилкою, Eclipse має подати наведену нижче пропозицію щодо імпорту “WebDriverEventListener”. Клацніть на Імпорт.
Виникла помилка на WebDriverEventListener, але ви побачите нижченаведену помилку в класі “WebDriverListeners”. Наведіть курсор на помилку, і ви побачите пропозицію додати невиконані методи. Натисніть на нього, і ви побачите, що всі методи перераховані та описані вище.
Зверніть увагу, що ми додали рядок System.out.println до кожного методу для демонстрації.
як витягти файли 7z на
Зразок коду-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); } }
Крок No2: Створіть 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 консолі
Подія-1: Це записує подію доNavigateTo та afterNavigateTo, і відповідно виконує дії, записані в двох блоках.
Подія-2: Це реєструє подію доFindBy та afterFindBy і відповідно виконує дії, записані у двох блоках. Подія після цих двох подій охоплює події beforeClick та afterClick.
Подія-3: Це записує події beforeChangeValueOf та afterChangeValue.
Подія-4: Це те саме, що подія-3
Подія-5: Це записує події до NavigateBack та afterNavigateBack.
Подія-6: Це записує події beforeNavigateForward та afterNavigateForward.
Подія-7: Це записує події до NavigateRefresh та afterNavigateRefresh.
Подія-8: Це те саме, що подія-1
Подія-9: Це те саме, що подія-2
Фрагмент №2 консолі
Подія-10: Це реєструє події, такі як beforeAlertAccept та afterAlertAccept.
Подія-11: Це реєструє події, такі як beforeAlertDismiss та afterAlertDismiss.
Подія-12: Це реєструє такі події, як onException, і передає повідомлення.
Сподіваюся, короткий опис слухачів дасть вам уявлення про те, як працюють слухачі веб-драйверів. Як ми вже говорили раніше, за допомогою 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); } }
Крок No2
Створіть новий клас із назвою “ AbstractListeners_Test 'І всередині нього створіть екземпляр' АнотаціяWebDriverListeners ”Клас.
Скопіюйте та вставте наведений нижче код всередину цього класу.
Зразок коду-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(); } }
Цей клас також має події, записані раніше, але оскільки ми обмежили наш клас слухачів реалізацією лише шести подій, він відкине інші та відобразить журнал лише для згаданих.
Вид вікна консолі
Як ви можете бачити жовті позначені області на зображенні вище, лише методи, реалізовані в АнотаціяWebDriverListeners Клас активовано.
Висновок
Слухачі WebDriver - це інтерфейси, які прослуховують подію браузера і відповідно реагують на неї. Якщо ви реалізуєте його за допомогою WebDriverEventListener, вам доведеться реалізувати всі методи, пов'язані з цим інтерфейсом
Якщо ви реалізуєте WebDriver Listener за допомогою класу AbstractWebDriverEventListener, ви можете вибрати методи, які ви хочете реалізувати.
=> Завітайте сюди, щоб вивчити селен з нуля.
Рекомендована література
- Підручник з огірка селену: інтеграція огірка Java Selenium WebDriver
- Вступ до Selenium WebDriver - Підручник з селену №8
- Підручник із селену ChromeDriver: Тести веб-драйверів на селен у Chrome
- Впровадження нашого першого сценарію WebDriver - Підручник № 10 для Selenium WebDriver
- 30+ найкращих підручників із селену: вивчіть селен на реальних прикладах
- Поширені запитання щодо селену
- Як обробляти сповіщення / спливаючі вікна в Selenium WebDriver - Підручник з селену No16
- Неявне та явне очікування в Selenium WebDriver (типи очікувань селену)