TestNG Слухачі в Selenium

⚡ Розумний підсумок

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

  • ❓ Що роблять слухачі: Вони підписані на TestNG події, такі як старт, успішний прохід, невдача та пропуск, для керування перехоплювачами реєстрації або звітності.
  • 🧩 Дванадцять інтерфейсів: TestNG постачає такі інтерфейси, як ITestListener, ISuiteListener, IReporter, IInvokedMethodListener та IAnnotationTransformer для детального контролю.
  • 🛠️ Два режими підключення: Прикріпіть слухач з анотацією @Listeners до окремого класу або зареєструйте його один раз у файлі testng.xml для кожного набору.
  • ???? Selenium Оновлення 4: EventFiringWebDriver застарів; сучасний інтерфейс WebDriverListener разом із EventFiringDecorator тепер забезпечує роботу з перехоплювачами подій рівня WebDriver.
  • 🤖 Кут штучного інтелекту: Слухачі за допомогою штучного інтелекту можуть автоматично класифікувати збої, додавати розумні скріншоти та передавати сигнали нестабільного тестування назад на інформаційні панелі CI в режимі реального часу.

TestNG Слухачі в Selenium

Selenium Скрипти WebDriver часто повинні реагувати на тестові події, такі як успішне виконання твердження, невдалий локатор або пропущений крок. Слухачі роблять це можливим. Загалом, Selenium проекти спираються на дві родини слухачів:

  1. Слухачі WebDriver
  2. TestNG Слухачі

У цьому посібнику ми зосередимося на TestNG Слухачі, з приміткою про те, як змінилися слухачі рівня WebDriver у Selenium 4.x.

Що таке слухач у TestNG?

Слухач – це інтерфейс, який змінює поведінку за замовчуванням TestNGЯк випливає з назви, Слухачі «слухають» події, визначені в Selenium скрипт і реагувати відповідно. Ви використовуєте їх, реалізуючи відповідний інтерфейс Listener та реєструючи його у вашому тестовому класі або наборі. Listener дозволяють вам налаштовувати TestNG звіти, додавати скріншоти та створювати структуровані журнали.

Типи слухачів в TestNG

TestNG постачає сімейство інтерфейсів слухачів, кожен з яких орієнтований на різний етап життєвого циклу тестування.

Нижче наведено часто використовувані TestNG слухачі:

  1. IAnnotationTransformer
  2. IAnnotationTransformer2
  3. IConfigurable
  4. IConfigurationListener
  5. IExecutionListener
  6. IHookable
  7. IIInvokedMethodListener
  8. IIInvokedMethodListener2
  9. IMethodInterceptor
  10. IReporter
  11. ISuiteListener
  12. ITestListener

Ці інтерфейси використовуються в Selenium для створення журналів або налаштування TestNG звіти. У цьому посібнику ми реалізуємо ITestListener.

ITestListener розкриває такі методи:

  • наСтарті – викликається, коли починається будь-який тест.
  • при успішному тестуванні – викликається, коли тест пройдено успішно.
  • при збої тесту – викликається, коли тест не проходить.
  • приПропущеноТест – викликається, коли тест пропускається.
  • onTestFailedButWithinSuccessPercentage – викликається, коли тест не проходить, але знаходиться в межах відсотка успішності.
  • на завершенні – викликається після виконання всіх тестів у класі.

Сценарій тесту

У цьому тестовому сценарії ми автоматизуємо процес входу та реалізуємо ITestListener проти нього.

  1. Запуск Firefox і відкрити сайт https://demo.guru99.com/V4/

Вхід до тестового сценарію URL

  1. Увійдіть у застосунок.

Форма входу до тестового сценарію

Кроки для створення a TestNG слухач

Для тестового сценарію вище ми реалізуємо Listener крок за кроком.

Крок 1) Створіть клас під назвою ListenerTest що реалізує ITestListenerНаведіть курсор на червоне підкреслення та Eclipse запропонує два швидких виправлення, як показано нижче:

Eclipse швидке виправлення для додавання нереалізованих методів

Натисніть кнопку «Додати нереалізовані методи». До вашого коду буде додано кілька методів-заглушок (без тіла), подібних до цього:

пакет Listener_Demo;

імпорт 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, при запуску тесту та при успішному тестуванні.

Зміна проста: кожен метод виводить назву тесту, щоб консоль чітко відображала статус «пройдено», «не пройдено» та «пропущено».

Після модифікації код виглядає так:

пакет Listener_Demo;

імпорт 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 виконає цей клас для входу на демонстраційний сайт.

пакет Listener_Demo;

імпорт 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) Далі, приєднайте цей слухач до нашого тестового класу Тестові випадкиІснує два способи підключення класу до інтерфейсу слухача.

Перший спосіб - використовувати @Слухачі анотацію, як показано нижче:

@Listeners(Listener_Demo.ListenerTest.class)

Ми додаємо цю анотацію вище Тестові випадки клас. Тоді клас виглядає так:

пакет Listener_Demo;

імпорт 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);
}
}

Структура проекту виглядає так:

TestNG Структура проекту слухача

Крок 4) Виконайте Тестові випадки клас. Методи всередині ListenerTest викликаються автоматично на основі поведінки методів, анотованих як @Тест.

Крок 5) Перевірте вивід, що відображається в консолі.

Вихідні дані Тестові випадки виглядає як:

TestNG Вивід консолі слухача

[TestNG] Біг:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

Тестовий випадок входу розпочато
Назва пройденого тестового випадку: Вхід
Тестовий випадок TestToFail розпочато
Цей метод перевірки не спрацював
Назва тестового випадку, який не пройшов: TestToFail
ПРОЙДЕНО: Вхід
НЕВДАЛОСЬ: TestToFail
java.lang.AssertionError: очікувалося [true], але знайдено [false]

Використання слухача для кількох класів

Якщо проєкт має багато тестових класів, додавання @Слухачі анотація до кожного з них стає громіздкою та схильною до помилок.

У такому разі створіть testng.xml файл та зареєструйте там слухач один раз.

Тег слухачів testng.xml для кількох класів

Цей слухач потім застосовується до всього набору тестів незалежно від кількості класів. Коли ви запускаєте XML-файл, слухач спрацьовує для кожного класу, оголошеного в наборі, і ви можете об'єднати будь-яку кількість класів слухачів в одному тегу.

WebDriverListener в Selenium 4 проти застарілого EventFiringWebDriver

У той час як TestNG Слухачі реагують на події життєвого циклу тестування, слухачі WebDriver реагують на дії драйвера браузера, такі як клік, навігація або виклик findElement. У Selenium 3 типовим підходом був Слухач подій веб-драйвера інтерфейс, що проходить через кабель Веб-драйвер спрацьовування подійОбидва варіанти застаріли в Selenium 4.x.

Сучасна заміна – це WebDriverListener інтерфейс, поєднаний з Декоратор випалу подій:

імпорт org.openqa.selenium.WebDriver;
імпорт 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.

Поширені запитання

Слухач — це інтерфейс, який підписується на події, що генеруються під час Selenium тестовий запуск. TestNG Слухачі реагують на події життєвого циклу тестування, такі як старт, успішне проходження, невдача та пропуск. Слухачі WebDriver реагують на події драйвера браузера, такі як кліки, навігація та виклики findElement.

ITestListener спрацьовує для окремих методів @Test та надає доступ до onTestStart, onTestSuccess, onTestFailure, onTestSkipped та onFinish. ISuiteListener спрацьовує лише двічі для кожного набору, onStart та onFinish, що робить його ідеальним для налаштування на рівні набору, такого як відкриття файлу звіту.

Ви можете зареєструвати а TestNG слухач двома способами: додати анотацію @Listeners(MyListener.class) над тестовим класом або оголосити тег всередині testng.xml. Підхід XML застосовує слухач до кожного класу в наборі без зміни вихідного коду.

EventFiringWebDriver та WebDriverEventListener застаріли в Selenium 4.x. Рекомендованою заміною є інтерфейс WebDriverListener у поєднанні з EventFiringDecorator, який може обгортати екземпляри WebDriver, WebElement або Alert та пропонує чіткіші точки перехоплення, такі як beforeGet та afterClick.

Використовуйте IReporter, якщо потрібно створити власний звіт після завершення роботи пакету, наприклад, зведення у форматі HTML або JSON. Використовуйте IInvokedMethodListener, якщо вам потрібен перехоплювач до та після кожного методу тестування, включаючи методи конфігурації, такі як @BeforeMethod та @AfterMethod.

Моделі штучного інтелекту можуть збагатити вивід слухача, позначаючи кожен запис журналу ступенем серйозності, генеруючи описи кроків природною мовою та кластеризуючи пов'язані збої. Всередині onTestFailure служба штучного інтелекту може аналізувати знімок екрана та об'єднувати їх у стек. tracе., а потім додайте ймовірну першопричину до TestNG повідомити.

Так. Слухач може передавати історію успішних/неуспішних прогалин до служби штучного інтелекту, яка класифікує провал як нестабільний, екологічний або справжній регрес. Вердикт записується у вигляді TestNG атрибут, щоб панелі інструментів могли поміщати ненадійні тести в карантин без перевірки людиною кожної червоної збірки.

Підсумуйте цей пост за допомогою: