Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Selenium — фреймворк для автоматизации веб-тестирования
Selenium — это один из самых популярных и старых фреймворков для автоматизации веб-тестирования. Он позволяет автоматизировать действия в браузере: клики, заполнение форм, скролл, проверку текста и другое. Создан в 2004 году и стал индустриальным стандартом.
Как работает Selenium
Selenium управляет браузером через WebDriver — протокол, который позволяет программе отправлять команды браузеру:
- Инициализируешь WebDriver (создаёшь объект драйвера браузера)
- Отправляешь команды (navigate, click, type text)
- WebDriver отправляет команды браузеру
- Браузер выполняет действие
- WebDriver получает результат и возвращает его
Поддерживает все основные браузеры: Chrome, Firefox, Safari, Edge.
Основные компоненты Selenium
Selenium WebDriver
Основной инструмент. Это API, которая позволяет управлять браузером программно. Используется в production-автотестах.
Selenium IDE
Рекордер для записи тестов. Удобен для быстрого создания простых тестов, но не рекомендуется для production-кода.
Selenium Grid
Распределённое выполнение тестов на нескольких машинах одновременно. Позволяет запустить тесты параллельно на разных ОС и браузерах, чтобы сэкономить время.
Пример использования (Python + Selenium)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Инициализируем драйвер Chrome
driver = webdriver.Chrome()
try:
# Переходим на страницу
driver.get("http://example.com/login")
# Ждём загрузки элемента (максимум 10 секунд)
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "login_form"))
)
# Находим поле email и вводим текст
username_field = driver.find_element(By.ID, "username")
username_field.send_keys("user@example.com")
# Находим поле пароля и вводим
password_field = driver.find_element(By.ID, "password")
password_field.send_keys("password123")
# Кликаем на кнопку логина
login_button = driver.find_element(By.XPATH, "//button[@type='submit']")
login_button.click()
# Ждём, что URL изменился
WebDriverWait(driver, 10).until(
EC.url_contains("dashboard")
)
# Проверяем, что мы на странице профиля
assert "dashboard" in driver.current_url
print("Login test passed!")
finally:
# Закрываем браузер
driver.quit()
Основные методы WebDriver
find_element() — найти один элемент по селектору:
element = driver.find_element(By.ID, "button")
element = driver.find_element(By.NAME, "email")
element = driver.find_element(By.CLASS_NAME, "btn-primary")
element = driver.find_element(By.XPATH, "//div[@class='container']")
element = driver.find_element(By.CSS_SELECTOR, ".header > button")
find_elements() — найти все элементы (возвращает список):
elements = driver.find_elements(By.CLASS_NAME, "item")
for element in elements:
print(element.text)
click() — кликнуть по элементу:
button = driver.find_element(By.ID, "submit")
button.click()
send_keys() — ввести текст:
field = driver.find_element(By.ID, "email")
field.send_keys("user@example.com")
clear() — очистить поле:
field.clear()
Явное ожидание (Explicit Wait)
Это ОЧЕНЬ важно! Без ожидания тесты будут нестабильными (flaky):
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
# Ждём, максимум 10 секунд, что элемент видимый
element = wait.until(EC.visibility_of_element_located((By.ID, "modal")))
element.click()
# Ждём, что элемент исчезнет
wait.until(EC.invisibility_of_element_located((By.ID, "loader")))
Преимущества Selenium
- Очень популярен — огромное сообщество, документация, примеры везде
- Поддерживает много языков — Python, Java, C#, Ruby, JavaScript
- Работает со всеми браузерами — Chrome, Firefox, Safari, Edge
- Бесплатный — open-source
- Мощный — для сложных сценариев тестирования
Недостатки Selenium
- Медленнее, чем Playwright или Cypress
- Нестабилен при работе с динамическим контентом без правильных ожиданий
- Требует явных ожиданий, иначе тесты становятся flaky (нестабильными)
- Сложнее в настройке по сравнению с современными альтернативами
Альтернативы
Cypress — более современный, быстрее, но только для JavaScript, работает в браузере. Playwright — ещё быстрее, поддерживает Python/JS/C#, более стабилен, лучше для параллельного выполнения. Puppeteer — для Chrome/Chromium, более низкоуровневый.