Auto Selenium Guide

Профессиональный гайд по автоматизации тестирования с Selenium на Python

Введение в автоматизацию с Selenium

Selenium — мощный open-source инструмент для автоматизации веб-браузеров. Используется в:

Рекомендация: Используйте Selenium 4.15+ — поддержка W3C, CDP, относительные локаторы.

Установка и настройка

1. Python и pip

Скачайте с python.org (рекомендуется 3.10+)

2. Установка Selenium

pip install selenium

3. WebDriver Manager (авто-драйверы)

pip install webdriver-manager
from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver

driver = webdriver.Chrome(ChromeDriverManager().install())

4. Драйверы (если вручную)

БраузерДрайверСсылка
ChromeChromeDriverChrome for Testing
FirefoxGeckoDriverGitHub
EdgeEdgeDriverMicrosoft

Локаторы: поиск элементов

Приоритет выбора локатора определяет стабильность тестов.

ПриоритетЛокаторПримерСтабильность
1IDBy.ID, "email"★★★★★
2NAMEBy.NAME, "password"★★★★☆
3CSSBy.CSS_SELECTOR, ".btn-login"★★★★☆
4XPathBy.XPATH, "//button[contains(text(),'Войти')]★★★☆☆
from selenium.webdriver.common.by import By

email = driver.find_element(By.NAME, "email")
button = driver.find_element(By.CSS_SELECTOR, "button[type='submit']")
link = driver.find_element(By.PARTIAL_LINK_TEXT, "Забыли")

Основные команды

Навигация:
driver.get("https://example.com")
driver.refresh()
driver.back()
driver.forward()
print(driver.title)
print(driver.current_url)
Действия с элементами:
element.send_keys("text")
element.clear()
element.click()
element.submit()
element.text
element.get_attribute("value")
Ожидания (WebDriverWait):
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 20)
element = wait.until(EC.element_to_be_clickable((By.ID, "submit")))
Избегайте time.sleep() — используйте только явные ожидания!

Page Object Model (POM)

Чистая архитектура: разделение логики страниц и тестов.

page/login_page.py

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.url = "https://example.com/login"
    
    def open(self):
        self.driver.get(self.url)
        return self
    
    def login(self, email, password):
        self.driver.find_element(By.NAME, "email").send_keys(email)
        self.driver.find_element(By.NAME, "password").send_keys(password)
        self.driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
        return DashboardPage(self.driver)

CI/CD интеграция

GitHub Actions

name: Selenium Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      - run: pip install selenium pytest webdriver-manager
      - run: pytest tests/ --headless --junitxml=report.xml
Headless + CI:
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)