# Какие exceptions может бросить Selenium? Что они означают и как их обрабатывать?

### 🔹 Основные исключения Selenium

| Exception                                                                                    | Когда возникает                                                                         | Как обрабатывать                                               |
| -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| **`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. Простая обработка

```python
from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element("id", "login")
except NoSuchElementException:
    print("Элемент не найден!")
```

***

#### 2. С явным ожиданием

```python
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. Отлов нескольких исключений

```python
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)**.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/teoriya-avtomatizirovannogo-testirovaniya/selenium/kakie-exceptions-mozhet-brosit-selenium-chto-oni-oznachayut-i-kak-ikh-obrabatyvat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
