TestNG Слушатели в Selenium
⚡ Умное резюме
Слушатели в Selenium WebDriver — это TestNG Интерфейсы, перехватывающие тестовые события для настройки журналов, отчетов и действий после сбоя. В этой статье объясняются методы ITestListener и приводится пример работающего приложения. Java например, и разъясняет, как Selenium В версии 4 был заменен устаревший WebDriverEventListener.

Selenium Скриптам WebDriver часто необходимо реагировать на события тестирования, такие как успешно пройденное утверждение, неудачная проверка локатора или пропущенный шаг. Слушатели позволяют это сделать. В целом, Selenium В основе этих проектов лежат две группы слушателей:
- Слушатели веб-драйвера
- TestNG Слушатели
В этом уроке мы сосредоточимся на TestNG Слушатели, с примечанием о том, как изменились слушатели на уровне WebDriver. Selenium 4.x.
Что такое слушатель в TestNG?
Слушатель — это интерфейс, изменяющий поведение по умолчанию. TestNGКак следует из названия, слушатели «слушают» события, определенные в Selenium Скриптуйте и реагируйте соответствующим образом. Вы используете их, реализовав соответствующий интерфейс Listener и зарегистрировав его в своем тестовом классе или наборе тестов. Listeners позволяют настраивать TestNG Сообщайте о проблемах, прикрепляйте скриншоты и создавайте структурированные журналы.
Типы слушателей в TestNG
TestNG В комплект поставки входит семейство интерфейсов прослушивания, каждый из которых предназначен для определенного этапа жизненного цикла тестирования.
Ниже приведены наиболее часто используемые TestNG слушатели:
- IAnnotationTransformer
- IAnnotationTransformer2
- IНастраиваемый
- IConfigurationListener
- IExecutionListener
- Hookable
- IInvokedMethodListener
- IInvokedMethodListener2
- IMethodInterceptor
- Репортер
- ISuiteListener
- ITestListener
Эти интерфейсы используются в Selenium для создания журналов или настройки TestNG отчеты. В этом уроке мы реализуем ITestListener.
ITestListener Предоставляет следующие методы:
- onStart – Вызывается при запуске любого теста.
- onTestSuccess – Сообщается, когда тест пройден успешно.
- onTestFailure – Вызывается, когда тест не пройден.
- onTestSkipped – Вызывается, когда тест пропускается.
- onTestFailedButWithinSuccessPercentage – Этот сигнал используется, когда тест не пройден, но находится в пределах допустимого процента успешного прохождения.
- onFinish – Вызывается после выполнения всех тестов в классе.
Сценарий тестирования
В этом тестовом сценарии мы автоматизируем процесс входа в систему и реализуем его. ITestListener против этого.
- Запуск Firefox и откройте сайт https://demo.guru99.com/V4/
- Войдите в приложение.
Шаги по созданию TestNG слушатель
Для описанного выше тестового сценария мы будем реализовывать обработчик событий шаг за шагом.
Шаг 1) Создайте класс с именем ListenerTest который реализует ITestListenerНаведите курсор на красную подчеркнутую линию и Eclipse Предложим два быстрых решения, как показано ниже:
Нажмите «Добавить нереализованные методы». В ваш код будет добавлено несколько методов-заглушек (без тела), примерно так:
Импортировать org.testng.ITestContext;
Импортировать org.testng.ITestListener;
Импортировать org.testng.ITestResult;
открытый класс ListenerTest инвентарь ITestListener {
@Override
общественная пустота onFinish(ITestContext arg0) {
// TODO Автоматически сгенерированный заглушка метода
}
@Override
общественная пустота onStart(ITestContext arg0) {
// TODO Автоматически сгенерированный заглушка метода
}
@Override
общественная пустота onTestFailedButWithinSuccessPercentage(ITestResult arg0) {
// TODO Автоматически сгенерированный заглушка метода
}
@Override
общественная пустота onTestFailure(ITestResult arg0) {
// TODO Автоматически сгенерированный заглушка метода
}
@Override
общественная пустота onTestSkipped(ITestResult arg0) {
// TODO Автоматически сгенерированный заглушка метода
}
@Override
общественная пустота onTestStart(ITestResult arg0) {
// TODO Автоматически сгенерированный заглушка метода
}
@Override
общественная пустота onTestSuccess(ITestResult arg0) {
// TODO Автоматически сгенерированный заглушка метода
}
}
Теперь давайте внесем изменения. ListenerTest класс. В частности, мы заполним следующие методы: onTestFailure, onTestSkiped, onTestStart и onTestSuccess.
Изменение простое: каждый метод выводит название теста, чтобы в консоли четко отображались статусы «пройдено», «не пройдено» и «пропущено».
После внесения изменений код выглядит следующим образом:
Импортировать org.testng.ITestContext;
Импортировать org.testng.ITestListener;
Импортировать org.testng.ITestResult;
открытый класс ListenerTest инвентарь ITestListener {
@Override
общественная пустота onFinish(ITestContext Результат) {
}
@Override
общественная пустота onStart(ITestContext Результат) {
}
@Override
общественная пустота onTestFailedButWithinSuccessPercentage(ITestResult Результат) {
}
// При сбое теста вызывается этот метод.
@Override
общественная пустота onTestFailure(ITestResult Результат) {
System.out.println («Название тестового случая, в котором тест не пройден:» + Result.getName());
}
// Если тестовый случай пропущен, вызывается этот метод.
@Override
общественная пустота onTestSkipped(ITestResult Результат) {
System.out.println («Название пропущенного тестового случая:» + Result.getName());
}
// Этот метод вызывается при запуске тестового примера.
@Override
общественная пустота onTestStart(ITestResult Результат) {
System.out.println(Result.getName() + «Тестовый пример запущен»);
}
// Этот метод вызывается, если тестовый случай пройден успешно.
@Override
общественная пустота onTestSuccess(ITestResult Результат) {
System.out.println («Название пройденного тестового примера:» + Result.getName());
}
}
Шаг 2) Создайте еще один класс с именем Тесты для автоматизации входа в систему. Selenium Этот класс будет запущен для входа на демонстрационный сайт.
Импортировать org.openqa.selenium.By;
Импортировать org.openqa.selenium.WebDriver;
Импортировать org.openqa.selenium.firefox.FirefoxДрайверы;
Импортировать org.testng.Assert;
Импортировать org.testng.annotations.Listeners;
Импортировать org.testng.annotations.Test;
открытый класс Тесты {
Вебдрайвер драйвер = новый FirefoxВодитель();
// Тест предназначен для проверки успешного выполнения и подтверждения срабатывания обработчика событий.
@Контрольная работа
общественная пустота Авторизоваться() {
драйвер.получить(«https://demo.guru99.com/V4/»);
driver.findElement(By.name(«uid»)).sendKeys(“mngr34926”);
driver.findElement(By.name("пароль")).sendKeys(“amUpenu”);
driver.findElement(By.name(“btnLogin”)).click();
}
// Тест принудительно завершился с ошибкой, чтобы проверить обработчик ошибок.
@Контрольная работа
общественная пустота TestToFail() {
System.out.println («Этот метод тестирования не сработает»);
Assert.assertTrue(ложный);
}
}
Шаг 3) Далее, прикрепите этот обработчик событий к нашему тестовому классу. ТестыСуществует два способа связать класс с интерфейсом слушателя.
Первый способ – использовать @Слушатели аннотация, как показано ниже:
Мы добавляем эту аннотацию выше Тесты класс. Тогда класс будет выглядеть следующим образом:
Импортировать org.openqa.selenium.By;
Импортировать org.openqa.selenium.WebDriver;
Импортировать org.openqa.selenium.firefox.FirefoxДрайверы;
Импортировать org.testng.Assert;
Импортировать org.testng.annotations.Listeners;
Импортировать org.testng.annotations.Test;
@Listeners(Listener_Demo.ListenerTest.class)
открытый класс Тесты {
Вебдрайвер драйвер = новый FirefoxВодитель();
// Тест проходит, чтобы проверить успешность срабатывания обработчика событий.
@Контрольная работа
общественная пустота Авторизоваться() {
драйвер.получить(«https://demo.guru99.com/V4/»);
driver.findElement(By.name(«uid»)).sendKeys(“mngr34926”);
driver.findElement(By.name("пароль")).sendKeys(“amUpenu”);
driver.findElement(By.name(“btnLogin”)).click();
}
// Тест принудительно завершился с ошибкой, чтобы проверить обработчик ошибок.
@Контрольная работа
общественная пустота TestToFail() {
System.out.println («Этот метод тестирования не сработает»);
Assert.assertTrue(ложный);
}
}
Структура проекта выглядит так:
Шаг 4) Выполнить Тесты класс. Методы внутри ListenerTest вызываются автоматически на основе поведения методов, аннотированных с помощью @Контрольная работа.
Шаг 5) Проверьте вывод, отображаемый в консоли.
Выход Тесты выглядит как:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml
Начался тестовый пример входа в систему.
Пройденный тестовый случай называется: Login
Начался тестовый случай TestToFail.
Этот метод проверки не сработает.
Название тестового случая, в котором произошла ошибка: TestToFail
ПРОЙДЕНО: Вход в систему
НЕУДАЧА: TestToFail
java.lang.AssertionError: ожидалось [true], но найдено [false]
Использование слушателя для нескольких классов
Если в проекте много тестовых классов, добавление их может быть проблематичным. @Слушатели Добавление аннотаций к каждому из них становится громоздким и чреватым ошибками.
В таком случае создайте testng.xml Зарегистрируйте там слушатель один раз.
Этот обработчик событий применяется ко всему набору тестов независимо от количества классов. При запуске XML-файла обработчик срабатывает для каждого класса, объявленного в наборе тестов, и вы можете объединить любое количество классов-обработчиков событий внутри одного и того же тега.
WebDriverListener в Selenium 4 против устаревшего EventFiringWebDriver
В то время как TestNG Слушатели событий реагируют на события жизненного цикла теста, а слушатели WebDriver реагируют на действия драйвера браузера, такие как клик, навигация или вызов findElement. Selenium 3. Типичный подход заключался в следующем: WebDriverEventListener интерфейс подключен через EventFiringWebDriverОба варианта устарели. Selenium 4.x.
Современная замена — это WebDriverListener интерфейс в сочетании с EventFiringDecorator:
Импортировать org.openqa.selenium.chrome.ChromeDriver;
Импортировать org.openqa.selenium.support.events.EventFiringDecorator;
Импортировать org.openqa.selenium.support.events.WebDriverListener;
открытый класс LoggingListener инвентарь WebDriverListener {
@Override
общественная пустота beforeGet(Вебдрайвер драйвер, строка url) {
System.out.println («Переход к» + url);
}
}
Вебдрайвер сырой = новый ChromeDriver();
Вебдрайвер драйвер = новый EventFiringDecorator<>(новый LoggingListener()).decorate(raw);
Этот декоратор может оборачивать любой WebDriver, WebElement или Alert, что делает его более гибким, чем старый обёрточный декоратор, запускаемый событиями. Используйте WebDriverListener для обеспечения возможности наблюдения на стороне браузера и TestNG ITestListener для составления отчетов на уровне пакета программ.
Слушатели на основе ИИ: более интеллектуальные журналы событий и сортировка сбоев.
Современные Selenium Команды все чаще интегрируют сервисы искусственного интеллекта в свои устройства прослушивания, чтобы сделать сигналы когнитивной интеграции более полезными для принятия решений. Внутри onTestFailureС помощью ИИ слушатель может получить снимок DOM-дерева и скриншот, отправить их модели, которая вернет вероятную группу источников проблемы, и записать тег обратно в модель. TestNG отчет или такой инструмент, как ReportPortal.
К распространенным моделям поведения, основанным на искусственном интеллекте, относятся:
- Обнаружение нестабильных тестов: Слушатели пересылают в модель данные о прохождении/непрохождении теста, которые классифицируются как нестабильные, вызванные внешними факторами или являющиеся реальной регрессией.
- Умные скриншоты: Модели компьютерного зрения обрезают, аннотируют и сравнивают скриншоты пользовательского интерфейса, чтобы рецензенты видели измененную область, а не полную копию страницы.
- Самовосстанавливающиеся локаторы: A WebDriverListener крючки beforeFindElement и просит помощника на основе ИИ предложить альтернативный локатор, когда основной дает сбой. NoSuchElementException.
- Краткие изложения на естественном языке: An Репортер В процессе реализации результаты выполнения набора тестов передаются в LLM-систему, которая формирует краткое резюме в один абзац.
Слой слушателей — наиболее подходящее место для внедрения этих обработчиков, поскольку он находится вне логики тестирования и применяется единообразно ко всему набору тестов.
Резюме
Прослушиватели необходимы для создания журналов или настройки TestNG отчеты в Selenium ВебДрайвер.
- TestNG Предлагается множество интерфейсов для прослушивания событий; выберите тот, который соответствует интересующему вас событию.
- Слушатели — это интерфейсы, используемые в Selenium Скрипты WebDriver реагируют на события жизненного цикла теста.
- В обучающем видеоролике было продемонстрировано ITestListener с проходным и непройденным тестом.
- Вы можете прикрепить слушатель с помощью @Слушатели или зарегистрировать его один раз в testng.xml для всего номера.
- Selenium 4.x заменяет EventFiringWebDriver с WebDriverListener + EventFiringDecorator для событий уровня WebDriver.






