TestNG Слухачі в Selenium
⚡ Розумний підсумок
Слухачі в Selenium Вебдрайвер є TestNG інтерфейси, що перехоплюють тестові події для налаштування журналів, звітів та дій після збоїв. У цій статті пояснюються методи ITestListener, а також розповідається про виконуваний Java приклад, і пояснює, як Selenium 4 замінив застарілий WebDriverEventListener.

Selenium Скрипти WebDriver часто повинні реагувати на тестові події, такі як успішне виконання твердження, невдалий локатор або пропущений крок. Слухачі роблять це можливим. Загалом, Selenium проекти спираються на дві родини слухачів:
- Слухачі WebDriver
- TestNG Слухачі
У цьому посібнику ми зосередимося на TestNG Слухачі, з приміткою про те, як змінилися слухачі рівня WebDriver у Selenium 4.x.
Що таке слухач у TestNG?
Слухач – це інтерфейс, який змінює поведінку за замовчуванням TestNGЯк випливає з назви, Слухачі «слухають» події, визначені в Selenium скрипт і реагувати відповідно. Ви використовуєте їх, реалізуючи відповідний інтерфейс Listener та реєструючи його у вашому тестовому класі або наборі. Listener дозволяють вам налаштовувати TestNG звіти, додавати скріншоти та створювати структуровані журнали.
Типи слухачів в TestNG
TestNG постачає сімейство інтерфейсів слухачів, кожен з яких орієнтований на різний етап життєвого циклу тестування.
Нижче наведено часто використовувані TestNG слухачі:
- IAnnotationTransformer
- IAnnotationTransformer2
- IConfigurable
- IConfigurationListener
- IExecutionListener
- IHookable
- IIInvokedMethodListener
- IIInvokedMethodListener2
- IMethodInterceptor
- IReporter
- ISuiteListener
- ITestListener
Ці інтерфейси використовуються в Selenium для створення журналів або налаштування TestNG звіти. У цьому посібнику ми реалізуємо ITestListener.
ITestListener розкриває такі методи:
- наСтарті – викликається, коли починається будь-який тест.
- при успішному тестуванні – викликається, коли тест пройдено успішно.
- при збої тесту – викликається, коли тест не проходить.
- приПропущеноТест – викликається, коли тест пропускається.
- onTestFailedButWithinSuccessPercentage – викликається, коли тест не проходить, але знаходиться в межах відсотка успішності.
- на завершенні – викликається після виконання всіх тестів у класі.
Сценарій тесту
У цьому тестовому сценарії ми автоматизуємо процес входу та реалізуємо ITestListener проти нього.
- Запуск Firefox і відкрити сайт https://demo.guru99.com/V4/
- Увійдіть у застосунок.
Кроки для створення a TestNG слухач
Для тестового сценарію вище ми реалізуємо Listener крок за кроком.
Крок 1) Створіть клас під назвою ListenerTest що реалізує ITestListenerНаведіть курсор на червоне підкреслення та Eclipse запропонує два швидких виправлення, як показано нижче:
Натисніть кнопку «Додати нереалізовані методи». До вашого коду буде додано кілька методів-заглушок (без тіла), подібних до цього:
імпорт org.testng.ITestContext;
імпорт org.testng.ITestListener;
імпорт org.testng.ITestResult;
громадський клас ListenerTest implements ITestListener {
@Перевернути
публічна порожнеча onFinish(ITestContext арг0) {
// TODO Автоматично згенерований заглушка методу
}
@Перевернути
публічна порожнеча наПочатку(ITestContext арг0) {
// TODO Автоматично згенерований заглушка методу
}
@Перевернути
публічна порожнеча приНевдалійТестБутиВ межахУспішногоВідсотка(Результат тесту ITestResult арг0) {
// TODO Автоматично згенерований заглушка методу
}
@Перевернути
публічна порожнеча приНевдалійТестуванні(Результат тесту ITestResult арг0) {
// TODO Автоматично згенерований заглушка методу
}
@Перевернути
публічна порожнеча приПропущеноТест(Результат тесту ITestResult арг0) {
// TODO Автоматично згенерований заглушка методу
}
@Перевернути
публічна порожнеча при запускуTest(Результат тесту ITestResult арг0) {
// TODO Автоматично згенерований заглушка методу
}
@Перевернути
публічна порожнеча при успішному тестуванні(Результат тесту ITestResult арг0) {
// TODO Автоматично згенерований заглушка методу
}
}
Тепер давайте змінимо ListenerTest клас. Зокрема, ми заповнимо такі методи: при збої тесту, onTestSkipped, при запуску тесту та при успішному тестуванні.
Зміна проста: кожен метод виводить назву тесту, щоб консоль чітко відображала статус «пройдено», «не пройдено» та «пропущено».
Після модифікації код виглядає так:
імпорт org.testng.ITestContext;
імпорт org.testng.ITestListener;
імпорт org.testng.ITestResult;
громадський клас ListenerTest implements ITestListener {
@Перевернути
публічна порожнеча onFinish(ITestContext Результат) {
}
@Перевернути
публічна порожнеча наПочатку(ITestContext Результат) {
}
@Перевернути
публічна порожнеча приНевдалійТестБутиВ межахУспішногоВідсотка(Результат тесту ITestResult Результат) {
}
// Коли тестовий випадок завершується невдачею, викликається цей метод.
@Перевернути
публічна порожнеча приНевдалійТестуванні(Результат тесту ITestResult Результат) {
System.out.println («Назва невдалого тестового випадку:» + Результат.getName());
}
// Коли тестовий випадок пропускається, викликається цей метод.
@Перевернути
публічна порожнеча приПропущеноТест(Результат тесту ITestResult Результат) {
System.out.println («Назва пропущеного тестового випадку:» + Результат.getName());
}
// Коли запускається тестовий випадок, викликається цей метод.
@Перевернути
публічна порожнеча при запускуTest(Результат тесту ITestResult Результат) {
System.out.println(Результат.getName() + «Тестовий випадок розпочато»);
}
// Коли тестовий випадок пройде успішно, викликається цей метод.
@Перевернути
публічна порожнеча при успішному тестуванні(Результат тесту ITestResult Результат) {
System.out.println («Назва пройденого тестового випадку:» + Результат.getName());
}
}
Крок 2) Створіть ще один клас під назвою Тестові випадки для автоматизації входу. Selenium виконає цей клас для входу на демонстраційний сайт.
імпорт org.openqa.selenium.By;
імпорт org.openqa.selenium.WebDriver;
імпорт org.openqa.selenium.firefox.FirefoxВодій;
імпорт org.testng.Assert;
імпорт org.testng.annotations.Слухачі;
імпорт org.testng.annotations.Тест;
громадський клас Тестові випадки {
веб-драйвер водій = new FirefoxВодій();
// Тест, розроблений для успішного проходження, для перевірки слухачем успішності.
@Тест
публічна порожнеча Вхід() {
драйвер.get(“https://demo.guru99.com/V4/”);
driver.findElement(За.назвою(«ідентифікатор рідини»)).sendKeys(«mngr34926»);
driver.findElement(За.назвою("Пароль")).sendKeys(«amUpenu»);
driver.findElement(За.назвою(«bnLogin»)).клік();
}
// Примусово провалений тест для перевірки слухача невдач.
@Тест
публічна порожнеча ПеревіркаНаНевдачу() {
System.out.println («Цей метод перевірки не спрацював»);
Assert.assertTrue(false);
}
}
Крок 3) Далі, приєднайте цей слухач до нашого тестового класу Тестові випадкиІснує два способи підключення класу до інтерфейсу слухача.
Перший спосіб - використовувати @Слухачі анотацію, як показано нижче:
Ми додаємо цю анотацію вище Тестові випадки клас. Тоді клас виглядає так:
імпорт org.openqa.selenium.By;
імпорт org.openqa.selenium.WebDriver;
імпорт org.openqa.selenium.firefox.FirefoxВодій;
імпорт org.testng.Assert;
імпорт org.testng.annotations.Слухачі;
імпорт org.testng.annotations.Тест;
@Listeners(Listener_Demo.ListenerTest.class)
громадський клас Тестові випадки {
веб-драйвер водій = new FirefoxВодій();
// Перевірка успішності, щоб перевірити слухач успішності.
@Тест
публічна порожнеча Вхід() {
драйвер.get(“https://demo.guru99.com/V4/”);
driver.findElement(За.назвою(«ідентифікатор рідини»)).sendKeys(«mngr34926»);
driver.findElement(За.назвою("Пароль")).sendKeys(«amUpenu»);
driver.findElement(За.назвою(«bnLogin»)).клік();
}
// Примусово провалений тест для перевірки слухача невдач.
@Тест
публічна порожнеча ПеревіркаНаНевдачу() {
System.out.println («Цей метод перевірки не спрацював»);
Assert.assertTrue(false);
}
}
Структура проекту виглядає так:
Крок 4) Виконайте Тестові випадки клас. Методи всередині ListenerTest викликаються автоматично на основі поведінки методів, анотованих як @Тест.
Крок 5) Перевірте вивід, що відображається в консолі.
Вихідні дані Тестові випадки виглядає як:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml
Тестовий випадок входу розпочато
Назва пройденого тестового випадку: Вхід
Тестовий випадок TestToFail розпочато
Цей метод перевірки не спрацював
Назва тестового випадку, який не пройшов: TestToFail
ПРОЙДЕНО: Вхід
НЕВДАЛОСЬ: TestToFail
java.lang.AssertionError: очікувалося [true], але знайдено [false]
Використання слухача для кількох класів
Якщо проєкт має багато тестових класів, додавання @Слухачі анотація до кожного з них стає громіздкою та схильною до помилок.
У такому разі створіть testng.xml файл та зареєструйте там слухач один раз.
Цей слухач потім застосовується до всього набору тестів незалежно від кількості класів. Коли ви запускаєте XML-файл, слухач спрацьовує для кожного класу, оголошеного в наборі, і ви можете об'єднати будь-яку кількість класів слухачів в одному тегу.
WebDriverListener в Selenium 4 проти застарілого EventFiringWebDriver
У той час як TestNG Слухачі реагують на події життєвого циклу тестування, слухачі WebDriver реагують на дії драйвера браузера, такі як клік, навігація або виклик findElement. У Selenium 3 типовим підходом був Слухач подій веб-драйвера інтерфейс, що проходить через кабель Веб-драйвер спрацьовування подійОбидва варіанти застаріли в Selenium 4.x.
Сучасна заміна – це WebDriverListener інтерфейс, поєднаний з Декоратор випалу подій:
імпорт org.openqa.selenium.chrome.ChromeDriver;
імпорт org.openqa.selenium.support.events.EventFiringDecorator;
імпорт org.openqa.selenium.support.events.WebDriverListener;
громадський клас Слухач журналювання implements WebDriverListener {
@Перевернути
публічна порожнеча beforeGet(веб-драйвер драйвер, рядок URL) {
System.out.println («Навігація до» + URL-адреса);
}
}
веб-драйвер сирий = new Драйвер Chrome();
веб-драйвер водій = new Декоратор випалу подій<>(new LoggingListener()).decorate(сире);
Декоратор може обгортати будь-який WebDriver, WebElement або Alert, що є більш гнучким, ніж стара обгортка для запуску подій. Використовуйте WebDriverListener для спостереження з боку браузера та TestNG ITestListener для звітності на рівні комплексу.
Слухачі на базі штучного інтелекту: розумніші журнали та сортування невдач
Modern Selenium Команди все частіше підключають сервіси штучного інтелекту до своїх слухачів, щоб зробити сигнали неперервної взаємодії більш дієвими. Всередині при збої тесту, слухач за допомогою штучного інтелекту може зробити знімок DOM плюс знімок екрана, надіслати їх до моделі, яка повертає ймовірний кластер першопричини, та записати тег назад у TestNG звіт або інструмент, подібний до ReportPortal.
Поширені шаблони, керовані штучним інтелектом, включають:
- Виявлення нестабільного тесту: Слухачі пересилають часові шкали успішного/неуспішного виконання моделі, яка класифікує невдачу як нестабільну, екологічну або реальну регресію.
- Розумні скріншоти: Моделі комп’ютерного зору обрізають, анотують та додають до знімків екрана різницю в інтерфейсі користувача, щоб рецензенти бачили змінену область, а не повний дамп сторінки.
- Самовідновлювальні локатори: A WebDriverListener гачки передЗнайтиЕлемент і просить помічника зі штучним інтелектом запропонувати альтернативний локатор, коли основний кидає NoSuchElementException.
- Резюме природною мовою: An IReporter Реалізація передає результати набору в LLM, який створює одноабзацний стенд-ап резюме.
Рівень слухача — це найчистіше місце для впровадження цих хуків, оскільки він залишається поза логікою тестування та застосовується рівномірно по всьому набору.
Резюме
Слухачі повинні створювати журнали або налаштовувати TestNG повідомляє в Selenium WebDriver.
- TestNG пропонує багато інтерфейсів слухача; виберіть той, який відповідає події, яка вас цікавить.
- Слухачі – це інтерфейси, що використовуються в Selenium Скрипти WebDriver для реагування на події життєвого циклу тестування.
- У навчальному посібнику було продемонстровано ITestListener з успішним та неуспішним тестом.
- Ви можете підключити слухача за допомогою @Слухачі або зареєструйте його один раз у testng.xml для всього люкса.
- Selenium 4.x замінює Веб-драйвер спрацьовування подій з WebDriverListener + Декоратор випалу подій для подій рівня WebDriver.






