TestNG Слушатели в Selenium

⚡ Умное резюме

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

  • Что делают слушатели: Они придерживаются TestNG Такие события, как начало, прохождение, неудача и пропуск, используются для организации процессов регистрации или формирования отчетов.
  • 🧩 Двенадцать интерфейсов: TestNG Включает в себя такие интерфейсы, как ITestListener, ISuiteListener, IReporter, IInvokedMethodListener и IAnnotationTransformer, для детального управления.
  • 🇧🇷 Два варианта подключения: Прикрепите слушатель с помощью аннотации @Listeners к отдельному классу или зарегистрируйте его один раз в файле testng.xml для каждого набора тестов.
  • 🚀 Selenium Обновление 4: Интерфейс EventFiringWebDriver устарел; теперь для обработки событий на уровне WebDriver используется современный интерфейс WebDriverListener в сочетании с EventFiringDecorator.
  • 🤖 Под углом к ​​искусственному интеллекту: С помощью искусственного интеллекта системы обработки сигналов могут автоматически классифицировать ошибки, добавлять интеллектуальные скриншоты и передавать сигналы нестабильных тестов обратно на панели мониторинга CI в режиме реального времени.

TestNG Слушатели в Selenium

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

  1. Слушатели веб-драйвера
  2. TestNG Слушатели

В этом уроке мы сосредоточимся на TestNG Слушатели, с примечанием о том, как изменились слушатели на уровне WebDriver. Selenium 4.x.

Что такое слушатель в TestNG?

Слушатель — это интерфейс, изменяющий поведение по умолчанию. TestNGКак следует из названия, слушатели «слушают» события, определенные в Selenium Скриптуйте и реагируйте соответствующим образом. Вы используете их, реализовав соответствующий интерфейс Listener и зарегистрировав его в своем тестовом классе или наборе тестов. Listeners позволяют настраивать TestNG Сообщайте о проблемах, прикрепляйте скриншоты и создавайте структурированные журналы.

Типы слушателей в TestNG

TestNG В комплект поставки входит семейство интерфейсов прослушивания, каждый из которых предназначен для определенного этапа жизненного цикла тестирования.

Ниже приведены наиболее часто используемые TestNG слушатели:

  1. IAnnotationTransformer
  2. IAnnotationTransformer2
  3. IНастраиваемый
  4. IConfigurationListener
  5. IExecutionListener
  6. Hookable
  7. IInvokedMethodListener
  8. IInvokedMethodListener2
  9. IMethodInterceptor
  10. Репортер
  11. ISuiteListener
  12. ITestListener

Эти интерфейсы используются в Selenium для создания журналов или настройки TestNG отчеты. В этом уроке мы реализуем ITestListener.

ITestListener Предоставляет следующие методы:

  • onStart – Вызывается при запуске любого теста.
  • onTestSuccess – Сообщается, когда тест пройден успешно.
  • onTestFailure – Вызывается, когда тест не пройден.
  • onTestSkipped – Вызывается, когда тест пропускается.
  • onTestFailedButWithinSuccessPercentage – Этот сигнал используется, когда тест не пройден, но находится в пределах допустимого процента успешного прохождения.
  • onFinish – Вызывается после выполнения всех тестов в классе.

Сценарий тестирования

В этом тестовом сценарии мы автоматизируем процесс входа в систему и реализуем его. ITestListener против этого.

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

Вход в тестовый сценарий URL

  1. Войдите в приложение.

Форма входа в тестовый сценарий

Шаги по созданию TestNG слушатель

Для описанного выше тестового сценария мы будем реализовывать обработчик событий шаг за шагом.

Шаг 1) Создайте класс с именем ListenerTest который реализует ITestListenerНаведите курсор на красную подчеркнутую линию и Eclipse Предложим два быстрых решения, как показано ниже:

Eclipse быстрое исправление для добавления нереализованных методов

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

пакет Listener_Demo;

Импортировать 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.

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

После внесения изменений код выглядит следующим образом:

пакет Listener_Demo;

Импортировать 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 Этот класс будет запущен для входа на демонстрационный сайт.

пакет Listener_Demo;

Импортировать 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) Далее, прикрепите этот обработчик событий к нашему тестовому классу. ТестыСуществует два способа связать класс с интерфейсом слушателя.

Первый способ – использовать @Слушатели аннотация, как показано ниже:

@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.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(ложный);
}
}

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

TestNG Структура проекта «Слушатель»

Шаг 4) Выполнить Тесты класс. Методы внутри ListenerTest вызываются автоматически на основе поведения методов, аннотированных с помощью @Контрольная работа.

Шаг 5) Проверьте вывод, отображаемый в консоли.

Выход Тесты выглядит как:

TestNG Вывод консоли слушателя

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

Начался тестовый пример входа в систему.
Пройденный тестовый случай называется: Login
Начался тестовый случай TestToFail.
Этот метод проверки не сработает.
Название тестового случая, в котором произошла ошибка: TestToFail
ПРОЙДЕНО: Вход в систему
НЕУДАЧА: TestToFail
java.lang.AssertionError: ожидалось [true], но найдено [false]

Использование слушателя для нескольких классов

Если в проекте много тестовых классов, добавление их может быть проблематичным. @Слушатели Добавление аннотаций к каждому из них становится громоздким и чреватым ошибками.

В таком случае создайте testng.xml Зарегистрируйте там слушатель один раз.

тег `listensors` в файле testng.xml для нескольких классов

Этот обработчик событий применяется ко всему набору тестов независимо от количества классов. При запуске XML-файла обработчик срабатывает для каждого класса, объявленного в наборе тестов, и вы можете объединить любое количество классов-обработчиков событий внутри одного и того же тега.

WebDriverListener в Selenium 4 против устаревшего EventFiringWebDriver

В то время как TestNG Слушатели событий реагируют на события жизненного цикла теста, а слушатели WebDriver реагируют на действия драйвера браузера, такие как клик, навигация или вызов findElement. Selenium 3. Типичный подход заключался в следующем: WebDriverEventListener интерфейс подключен через EventFiringWebDriverОба варианта устарели. Selenium 4.x.

Современная замена — это WebDriverListener интерфейс в сочетании с EventFiringDecorator:

Импортировать org.openqa.selenium.WebDriver;
Импортировать 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.

Часто задаваемые вопросы (FAQ)

Слушатель — это интерфейс, который подписывается на события, генерируемые во время 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 атрибут, позволяющий панелям мониторинга изолировать нестабильные тесты без проверки каждой неудачной сборки человеком.

Подведем итог этой публикации следующим образом: