Selenium
Selenium — это набор инструментов для автоматизации веб-браузеров, который позволяет программно управлять браузером для тестирования веб-приложений.
Компоненты Selenium
- Selenium WebDriver — API для управления браузером
- Selenium IDE — расширение браузера для записи тестов
- Selenium Grid — запуск тестов на нескольких машинах
- Selenium RC — устаревший компонент
Поддерживаемые браузеры
- Chrome — ChromeDriver
- Firefox — GeckoDriver
- Safari — SafariDriver
- Edge — EdgeDriver
- Internet Explorer — IEDriverServer
Пример Selenium теста (Python)
1from selenium import webdriver
2from selenium.webdriver.common.by import By
3from selenium.webdriver.support.ui import WebDriverWait
4from selenium.webdriver.support import expected_conditions as EC
5
6# Инициализация драйвера
7driver = webdriver.Chrome()
8
9try:
10 # Переход на страницу
11 driver.get("https://example.com")
12
13 # Поиск элементов
14 search_box = driver.find_element(By.NAME, "search")
15 search_box.send_keys("selenium")
16
17 # Клик по кнопке
18 search_button = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
19 search_button.click()
20
21 # Ожидание появления результатов
22 wait = WebDriverWait(driver, 10)
23 results = wait.until(
24 EC.presence_of_element_located((By.CLASS_NAME, "search-results"))
25 )
26
27 # Проверка результатов
28 assert "selenium" in results.text.lower()
29
30finally:
31 driver.quit()
Установка Selenium
Стратегии поиска элементов
- By.ID — поиск по ID
- By.NAME — поиск по атрибуту name
- By.CLASS_NAME — поиск по классу CSS
- By.CSS_SELECTOR — CSS селектор
- By.XPATH — XPath выражение
- By.LINK_TEXT — полный текст ссылки
- By.PARTIAL_LINK_TEXT — частичный текст ссылки
Ожидания (Waits)
1# Явные ожидания
2wait = WebDriverWait(driver, 10)
3
4# Ожидание кликабельности элемента
5element = wait.until(EC.element_to_be_clickable((By.ID, "submit")))
6
7# Ожидание видимости элемента
8element = wait.until(EC.visibility_of_element_located((By.ID, "result")))
9
10# Ожидание присутствия текста
11wait.until(EC.text_to_be_present_in_element((By.ID, "status"), "Complete"))
12
13# Неявные ожидания
14driver.implicitly_wait(10) # ждать до 10 секунд для всех элементов
Page Object Model
1class LoginPage:
2 def __init__(self, driver):
3 self.driver = driver
4 self.username_input = (By.ID, "username")
5 self.password_input = (By.ID, "password")
6 self.login_button = (By.CSS_SELECTOR, "button[type='submit']")
7
8 def enter_username(self, username):
9 self.driver.find_element(*self.username_input).send_keys(username)
10
11 def enter_password(self, password):
12 self.driver.find_element(*self.password_input).send_keys(password)
13
14 def click_login(self):
15 self.driver.find_element(*self.login_button).click()
Лучшие практики
- Используйте явные ожидания вместо sleep
- Применяйте Page Object Model
- Предпочитайте ID и name атрибуты
- Избегайте сложных XPath селекторов
- Правильно управляйте lifecycle драйвера
FAQ
Какой браузер лучше использовать для Selenium тестов?
Chrome обычно быстрее и стабильнее. Firefox хорош для кроссбраузерного тестирования. Headless режимы ускоряют выполнение.