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

 1# Python
 2pip install selenium
 3poetry add selenium
 4
 5# Java
 6<dependency>
 7    <groupId>org.seleniumhq.selenium</groupId>
 8    <artifactId>selenium-java</artifactId>
 9    <version>4.15.0</version>
10</dependency>
11
12# JavaScript
13npm install selenium-webdriver

Стратегии поиска элементов

  • 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 режимы ускоряют выполнение.