Урок 09. Расширенные практики Selenium (часть 2)
⚡ Кратко: Alert, вкладки, ActionChains и загрузка файлов
Урок продолжает расширенные практики Selenium 4: Alert-диалоги, переключение между вкладками/окнами, ActionChains для сложных взаимодействий (hover, drag&drop), работа с iframe, загрузка файлов.
- Alert:
driver.switch_to.alert→.accept()/.dismiss()/.text/.send_keys() - Вкладки:
driver.window_handles→driver.switch_to.window(handle) - ActionChains:
ActionChains(driver).move_to_element(el).perform()— hover,drag_and_drop(src, tgt).perform() - iframe:
driver.switch_to.frame(el)→ работа внутри →driver.switch_to.default_content() - Загрузка файла:
input[type=file].send_keys(abs_path)— путь должен быть абсолютным
Топ-3 ошибки: 1) Не переключился на alert — NoAlertPresentException. 2) После drag&drop не ожидал EC — тест падает из-за гонки. 3) Забыл switch_to.default_content() после iframe — NoSuchElementException.
📖 О чём этот урок
Этот урок — продолжение расширенных практик Selenium. В уроке 07 мы освоили явные и неявные ожидания, WebDriverWait + EC. Теперь переходим к задачам, где браузер открывает всплывающие окна (Alert), новые вкладки, страница содержит iframe или требуется сложное взаимодействие мышью.
Все эти ситуации встречаются в реальных проектах: подтверждение действий через Alert, redirect на новую вкладку, виджеты внутри iframe (например, Google Maps, Captcha, платёжные формы), drag&drop в Kanban-досках.
Что изучим
- Alert-диалоги:
alert,confirm,prompt— чтение текста, принятие, отмена, ввод - Переключение между вкладками:
window_handles,switch_to.window(),close() - ActionChains: наведение курсора (hover), двойной клик, drag&drop
- Фреймы (iframe):
switch_to.frame(),switch_to.default_content() - Загрузка файлов через
input[type=file]иsend_keys() - Практические задания из лекции: huge_form, math.html, redirect, hover-menu, drag-and-drop, file_input
📚 Что повторить перед изучением
- ← Урок 08: Summary session 4 — повторение расширенных практик
- ← Урок 07: явные ожидания, WebDriverWait + EC
- Локаторы:
By.ID,By.CSS_SELECTOR,By.LINK_TEXT - Фикстуры pytest:
@pytest.fixture,yield - Что такое DOM и почему Alert находится вне DOM-дерева
🎯 Что изучать дальше
- → Урок 10: Summary session 5 — повторение продвинутого Selenium
- Page Object Model (POM) — Урок 11
- Параметризация тестов в pytest (
@pytest.mark.parametrize) - Скриншоты при ошибке:
driver.save_screenshot()