> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/teoriya-avtomatizirovannogo-testirovaniya/selenium/dlya-chego-ispolzuyut-javascriptexecutor-privedite-primery..md).

# Для чего используют JavaScriptExecutor? Приведите примеры.

В **Selenium** есть объект **JavaScriptExecutor**, который позволяет напрямую выполнять **JavaScript-код в браузере** через WebDriver.\
Его используют, когда стандартных методов Selenium недостаточно или они работают нестабильно.

***

### 🔹 Когда используют JavaScriptExecutor?

1. **Скролл страницы или элемента**, если Selenium не может добраться.
2. **Клик по элементу**, если `element.click()` не срабатывает.
3. Получение/установка значений атрибутов и скрытых полей.
4. Работа с DOM напрямую.
5. Выполнение кастомных JavaScript-функций.
6. Получение информации о состоянии страницы (`document.readyState`).

***

### 🔹 Примеры использования в Python

#### 1. Скролл страницы вниз

```python
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
```

***

#### 2. Скролл до элемента

```python
element = driver.find_element("id", "footer")
driver.execute_script("arguments[0].scrollIntoView(true);", element)
```

***

#### 3. Клик по элементу (если обычный click() не работает)

```python
button = driver.find_element("id", "submit")
driver.execute_script("arguments[0].click();", button)
```

***

#### 4. Получение значения атрибута

```python
element = driver.find_element("id", "username")
value = driver.execute_script("return arguments[0].getAttribute('value');", element)
print(value)
```

***

#### 5. Установка значения в input

```python
input_box = driver.find_element("id", "username")
driver.execute_script("arguments[0].value='QA_Automation';", input_box)
```

***

#### 6. Проверка готовности страницы

```python
state = driver.execute_script("return document.readyState")
if state == "complete":
    print("Страница полностью загружена")
```

***

#### 7. Выполнение кастомного JavaScript

```python
title = driver.execute_script("return document.title;")
print("Заголовок страницы:", title)
```

***

### 🔹 Когда JavaScriptExecutor реально нужен?

* Когда элементы динамические и стандартный `WebDriver` не справляется.
* При работе с **SPA (React, Angular, Vue)**, где часть UI скрыта или меняется без перезагрузки.
* Когда нужно **ускорить взаимодействие** с DOM.

❗ Но важно: использовать JS стоит **только там, где Selenium не может справиться сам**, иначе тесты будут зависеть от специфики браузера и кода страницы.
