Какие exceptions может бросить Selenium? Что они означают и как их обрабатывать?
🔹 Основные исключения Selenium
NoSuchElementException
Элемент не найден на странице
Проверять локатор, использовать WebDriverWait
TimeoutException
Явное ожидание (WebDriverWait
) не дождалось элемента/условия
Увеличить таймаут, проверить условие
NoSuchWindowException
Окно/вкладка не существует или уже закрыта
Проверять доступные окна driver.window_handles
NoSuchFrameException
iframe
не найден
Проверить наличие фрейма перед switch_to.frame()
ElementNotVisibleException
(устаревший, теперь чаще ElementNotInteractableException
)
Элемент есть, но не виден
Использовать WebDriverWait
с visibility_of_element_located
ElementNotInteractableException
Элемент найден, но с ним нельзя взаимодействовать (например, скрыт)
Ждать, пока элемент станет кликабельным
StaleElementReferenceException
Элемент найден ранее, но DOM обновился (например, после перезагрузки)
Находить элемент заново перед действием
InvalidSelectorException
XPath или CSS некорректный
Исправить локатор
WebDriverException
Общая ошибка работы WebDriver (например, нет соединения с драйвером)
Проверить драйвер/браузер
JavascriptException
Ошибка при выполнении execute_script
Проверить JS-код
MoveTargetOutOfBoundsException
Попытка переместить курсор за пределы страницы
Проверить координаты
NoAlertPresentException
Попытка переключиться на alert, которого нет
Проверять WebDriverWait(alert_is_present())
SessionNotCreatedException
Драйвер не может создать сессию (часто из-за несовпадения версий ChromeDriver/браузера)
Обновить драйвер/браузер
ElementClickInterceptedException
При клике другой элемент перекрывает нужный
Ждать, пока элемент не освободится
🔹 Примеры обработки исключений в Python
1. Простая обработка
from selenium.common.exceptions import NoSuchElementException
try:
element = driver.find_element("id", "login")
except NoSuchElementException:
print("Элемент не найден!")
2. С явным ожиданием
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
try:
element = WebDriverWait(driver, 5).until(
EC.presence_of_element_located((By.ID, "login"))
)
except TimeoutException:
print("Элемент не появился в течение 5 секунд")
3. Отлов нескольких исключений
from selenium.common.exceptions import (
NoSuchElementException,
StaleElementReferenceException,
)
try:
element = driver.find_element("id", "login")
element.click()
except (NoSuchElementException, StaleElementReferenceException) as e:
print(f"Ошибка при работе с элементом: {e}")
📌 Итог:
Selenium кидает десятки разных исключений, но на практике самые частые — это NoSuchElementException
, TimeoutException
, StaleElementReferenceException
и ElementNotInteractableException
.
Обрабатывать их лучше через try/except
и явные ожидания (WebDriverWait).
Last updated
Was this helpful?