🔖 Справочник — Alert, вкладки, ActionChains, iframe, загрузка файлов

← К оглавлению урока

⚡ Главные команды

# Alert
alert = wait.until(EC.alert_is_present())
alert.text / alert.accept() / alert.dismiss() / alert.send_keys("txt")

# Вкладки
handles = driver.window_handles
driver.switch_to.window(handles[1])
driver.close()

# ActionChains
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(el).perform()
ActionChains(driver).drag_and_drop(src, tgt).perform()

# iframe
driver.switch_to.frame(iframe_element)
driver.switch_to.default_content()

# Загрузка файла
file_input.send_keys(os.path.abspath("file.txt"))

Alert (switch_to.alert)

Метод / СвойствоОписаниеТип Alert
driver.switch_to.alert Переключиться на текущий Alert (немедленно) все
wait.until(EC.alert_is_present()) Дождаться появления Alert и переключиться (рекомендуется) все
alert.text Получить текст диалогового окна все
alert.accept() Нажать «OK» все
alert.dismiss() Нажать «Cancel» / закрыть confirm, prompt
alert.send_keys("текст") Ввести текст в поле ввода только prompt

Импорт

from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

Вкладки и окна (window_handles)

Свойство / МетодОписание
driver.window_handles Список идентификаторов всех открытых вкладок
driver.current_window_handle Идентификатор текущей активной вкладки
driver.switch_to.window(handle) Переключиться на вкладку по её идентификатору
driver.close() Закрыть текущую вкладку (не quit!)
driver.quit() Закрыть браузер полностью (все вкладки)
driver.execute_script("window.open(url, '_blank');") Открыть новую вкладку через JavaScript

Паттерн — переключение на новую вкладку

# test_tabs.py
original = driver.current_window_handle
# ... действие, открывающее новую вкладку ...
new_tab = [h for h in driver.window_handles if h != original][0]
driver.switch_to.window(new_tab)

ActionChains

Импорт

from selenium.webdriver.common.action_chains import ActionChains
МетодОписание
ActionChains(driver) Создать объект для цепочки действий
.move_to_element(element) Навести курсор на элемент (hover)
.move_to_element_with_offset(el, x, y) Навести курсор со смещением от элемента
.click(element) Кликнуть по элементу
.double_click(element) Двойной клик по элементу
.context_click(element) Правый клик (контекстное меню)
.drag_and_drop(source, target) Перетащить source на target
.drag_and_drop_by_offset(source, x, y) Перетащить source на смещение (x, y) пикселей
.click_and_hold(element) Нажать и удерживать кнопку мыши
.release(element) Отпустить кнопку мыши
.send_keys(keys) Нажать клавиши на клавиатуре
.perform() Выполнить всю накопленную цепочку действий
.reset_actions() Сбросить цепочку без выполнения

Фреймы (switch_to.frame)

МетодОписание
driver.switch_to.frame(element) Переключиться в iframe по WebElement (рекомендуется)
driver.switch_to.frame("name") Переключиться по атрибуту name или id
driver.switch_to.frame(0) Переключиться по индексу (0 — первый фрейм)
driver.switch_to.default_content() Вернуться к основной странице (обязательно после работы с iframe)
driver.switch_to.parent_frame() Вернуться на один уровень вверх (при вложенных iframe)

Загрузка файлов

ОперацияКод
Найти input[type=file] file_input = driver.find_element(By.ID, "file")
Передать путь к файлу file_input.send_keys(os.path.abspath("file.txt"))
Создать временный файл with open("test.txt", "w") as f: f.write("data")
Удалить временный файл os.remove(file_path)

Полный шаблон загрузки файла

# test_upload.py
import os
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com/upload")

# Создаём тестовый файл
file_path = os.path.abspath("test_upload.txt")
with open(file_path, "w") as f:
    f.write("test content")

# Загружаем
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
file_input.send_keys(file_path)

# Отправляем форму
driver.find_element(By.ID, "submit").click()

# Чистим за собой
os.remove(file_path)