Обработка исключений в Selenium Веб-драйвер (типы)

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

Обработка исключений в Selenium WebDriver предотвращает остановку команды, которая завершилась с ошибкой.ping полный тестовый запуск. Java Конструкция try-catch, множественные блоки catch, throw, throws и, наконец, каждая из них предоставляет скрипту свой способ восстановления.

  • 🔘 Определение: Исключение — это ошибка, возникающая во время выполнения программы, и необработанная ошибка приводит к сбою программы.
  • ☑️ Объем: Selenium WebDriver содержит более сорока классов исключений, и каждый из них является потомком класса WebDriverException.
  • ✅ Частые нарушители: Большинство реальных сбоев вызваны исключениями NoSuchElementException, TimeoutException, StaleElementReferenceException и ElementNotInteractableException.
  • 🧪 Обращение: Пара блокировок try-catch изолирует один тип ошибки, несколько блоков catch разделяют несколько типов ошибок, и, наконец, всегда выполняется.
  • 🇧🇷 Эскалация: Ключевые слова throw и throws передают исключение обратно вызывающей стороне, если текущий метод не может его разрешить.
  • 📊 Диагноз: printStackTracФункции e(), toString() и getMessage() предоставляют информацию о сбое с разным уровнем детализации.

Обработка исключений в Selenium WebDriver с блоками try-catch, throw и finally.

Что такое исключение?

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

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

Типы исключений в Selenium Вебдрайвер

Класс WebDriverException является базовым классом иерархии, и каждое исключение ниже наследуется от него. В таблице перечислены все 41 исключение, с которыми вы можете столкнуться, а также условие, которое вызывает каждое из них.

# Исключение Когда это происходит
1 Элементнотвидиблисключение Существующий элемент в DOM имеет параметр "скрытый".
2 ElementNotSelectableException Элемент находится в DOM, но его нельзя выбрать, поэтому взаимодействие с ним невозможно.
3 NoSuchElementException Элемент не удалось найти с помощью локатор в комплект поставки.
4 NoSuchFrameException рама Целевой объект, на который следует переключиться, не существует.
5 Ноалертпрезентексцептион Переход к бдительный Запускается, когда не отображается предупреждение.
6 Носачвиндовексцептион Окно, на которое необходимо переключиться, не существует.
7 StaleElementReferenceException Веб-элемент отсоединен от текущего DOM.
8 SessionNotFoundException WebDriver начинает работу после закрытия браузера.
9 Исключение тайм-аута Команда не была выполнена вовремя — например, искомый элемент не был найден в течение периода ожидания.
10 WebDriverException Базовый класс для других исключений WebDriver; также возникает, когда WebDriver выполняет действия сразу после закрытия браузера.
11 ConnectionClosedException Произошло отключение в драйвере.
12 ElementClickInterceptedException Элемент, получающий события, скрывает элемент, запрошенный для клика.
13 Элементнотинтерактаблеисключение Элемент присутствует в DOM, но взаимодействовать с ним невозможно.
14 ErrorInResponseException Произошла ошибка при взаимодействии с Firefox расширение или удаленный сервер драйверов.
15 ErrorHandler.UnknownServerException Используется в качестве заполнителя, когда сервер возвращает ошибку без стека вызовов. trace.
16 ImeActivationFailedException Активация движка IME не удалась.
17 ImeNotAvailableException Поддержка IME недоступна.
18 InsecureCertificateException Навигация привела к тому, что пользовательский агент нажал на предупреждение сертификатак чему может привести недействительный или просроченный TLS-сертификат.
19 Инвалидаргументексцептион Аргумент не соответствует ожидаемому типу.
20 InvalidCookieDomainException A печенье добавлен в другой домен вместо текущего URL.
21 InvalidCoordinatesException Соответствующая операция взаимодействия недействительна.
22 InvalidElementStateException Команда не может быть завершена, поскольку элемент недопустим.
23 InvalidSessionIdException Указанный идентификатор сессии отсутствует среди активных сессий, следовательно, она не существует или неактивна.
24 InvalidSwitchToTargetИсключение Целевой фрейм или окно, на которое необходимо переключиться, не существует.
25 JavascriptИсключение При выполнении произошла ошибка. JavaСкрипт, предоставленный пользователем.
26 JsonException Запрос на создание сессии отправляется, если сессия ещё не создана.
27 NoSuchAttributeException Атрибут элемента не найден.
28 ДвигаемсяTargetOutOfBoundsException Цель, переданная методу move() из ActionChains, недопустима — например, она находится за пределами документа.
29 NoSuchContextException Программа ContextAware, предназначенная для тестирования мобильных устройств, не может найти запрошенный контекст.
30 NoSuchCookieException В файлах cookie текущего просматриваемого документа не обнаружено ни одного файла cookie, соответствующего указанному пути.
31 NotFoundException Подкласс WebDriverException, возникающий, когда элемент в DOM не существует.
32 RemoteDriverServerException Сервер не отвечает, поскольку описанные возможности не соответствуют требованиям.
33 ScreenshotException Невозможно сделать снимок экрана.
34 SessionNotCreatedException Не удалось успешно создать новую сессию.
35 UnableToSetCookieException Водитель не может установить cookie-файл.
36 UnexpectedTagNameException В классе поддержки не появился ожидаемый веб-элемент.
37 UnhandledAlertException Возникло предупреждение, но WebDriver не может выполнить операцию обработки предупреждения.
38 UnexpectedAlertPresentException Появляется неожиданное предупреждение.
39 UnknownMethodException Запрошенная команда соответствует известной URL но это не тот метод, который подходит именно для этой цели. URL.
40 UnreachableBrowserException Браузер не открывается или по какой-то причине завис.
41 UnsupportedCommandException Удаленный WebDriver не отправляет корректные команды, как ожидалось.

Три фактора доминируют в ежедневной отладке: NoSuchElementException означает ошибку. XPath Если элемент не был отображен, TimeoutException означает слишком короткое время ожидания. AJAX в ответе, и за ним следует исключение StaleElementReferenceException. динамический перерисовать.

Как обрабатывать исключения в Selenium

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

Шаг 1) Попробуйте-поймайте

Этот метод позволяет перехватывать исключения, используя комбинацию ключевых слов try и catch. Команда try отмечает начало блока, а catch размещается в конце блока try, где она обрабатывает исключение.

try
{
// Code
} catch (Exception e) {
// Code for Handling exception
}

Шаг 2) Несколько блоков catch

Существуют различные типы исключений, и один блок кода может вызвать более одного исключения. Использование нескольких блоков catch позволяет обрабатывать каждый тип отдельно с помощью собственного кода. Вы можете использовать более двух блоков catch, и нет ограничений на их количество.

try
{
//Code
} catch (ExceptionType1 e1) {
//Code for Handling Exception 1
} catch (ExceptionType2 e2) {
//Code for Handling Exception 2
}

Шаг 3) Бросок

Когда вам нужно сгенерировать исключение, ключевое слово throw передает его для обработки во время выполнения. Используйте throw, когда вы передаете исключение дальше, вместо того чтобы разрешать его в текущем методе.

public static void anyFunction() throws Exception{

try {
// write your code here
} catch (Exception b) {
// Do whatever you want to perform 
// Throw the Exception back to the system
throw(b);
}
}

Шаг 4) Несколько исключений

В пункте, касающемся исключений, можно упомянуть различные исключения.

public static void anyFunction() throws ExceptionType1, ExceptionType2{

try {
// write your code here
} catch (ExceptionType1 e1) {
// Code to handle exception 1
} catch (ExceptionType2 e2) {
// Code to handle exception 2
}

Шаг 5) Наконец

Ключевое слово finally создает блок под блоком try. Он выполняется независимо от того, произошло ли исключение, что делает его подходящим местом для закрытия драйвера или освобождения дескриптора файла.

try {
//Code
} catch (ExceptionType1 e1) {
//Catch block
} catch (ExceptionType2 e2) {
//Catch block
} catch (ExceptionType3 e3) {
//Catch block
} finally {
//The finally block always executes.
}

Методы отображения информации об исключениях

После перехвата исключения сам объект содержит подробную диагностическую информацию. Для её отображения можно использовать следующие методы:

Способ доставки Что в нем сообщается
printStackTracе () Выводит содержимое стека tracт. е. название исключения и другое полезное описание.
нанизывать() Возвращает текстовое сообщение с указанием названия и описания исключения.
GetMessage () Отображает описание исключения отдельно.

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

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

Все исключения WebDriver не проверяются, поскольку все они наследуют RuntimeException через WebDriverException. Поэтому компилятор никогда не требует блокировок try-catch, что удобно, но также означает, что ошибка локатора без защиты проявляется только при фактическом выполнении теста.

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

Они резко сокращают его, но никогда не удаляют полностью. Явное ожидание решает только проблемы со временем — неправильный локатор, перехваченный клик или закрытая сессия по-прежнему вызывают исключение, которое может обработать только блок catch.

Selenium В версии 4 сохраняется та же иерархия, но конструкторы ожидания теперь принимают значение типа Duration вместо целочисленного значения таймаута, а более строгая проверка аргументов по стандарту W3C означает, что исключение InvalidArgumentException возникает для значений, которые Selenium 3 приняты без нареканий.

Самовосстанавливающиеся локационные двигатели track, в которых селекторы ломаются и заменяются на рабочую альтернативу, что устраняет значительную часть ошибок NoSuchElementException. Аналогичные модели кластеризуют повторяющийся стек. tracТаким образом, действительно новый дефект не будет скрыт среди ненадежных повторных показов.

Copilot изобилует шаблонным кодом — каркасом try-catch, цепочкой catch в правильном порядке, блоком finally, который завершает работу драйвера. Он не может знать, какие исключения генерирует ваше собственное приложение, поэтому проверяйте каждый сгенерированный блок catch.

Они дополняют друг друга. ITestListener централизует логирование и снимки экрана для любого теста, который не прошёл проверку, что позволяет поддерживать чистоту тела теста. Используйте конструкции try-catch только там, где скрипт должен продолжить выполнение после ошибки, а не просто сообщить о ней.

Внутри блока catch или finally преобразуйте драйвер в метод TakesScreenshot и запишите файл перед закрытием сессии. Присвоение имени образу в соответствии с методом тестирования позволяет считывать данные с неудачного запуска CI без воспроизведения ошибки локально.

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