Python: Selenium

Теория: Настройка

Перед началом работы с Selenium устанавливается язык Python. Он используется для написания тестов и взаимодействия с браузером через WebDriver. Проверка установки выполняется командой:

python --version

Если выводится версия вроде Python 3.14.2, Python уже установлен. Если система отвечает, что команда не найдена, Python скачивается с официального сайта python.org. При установке выбирается пункт Add Python to PATH - без этого терминал не сможет запускать команды Python.

Инструмент uv и создание виртуального окружения

Hexlet-проекты используют uv — быстрый менеджер для Python-окружений и зависимостей. Если он ещё не установлен, поставьте его один раз:

pip install uv

Дальше все команды выполняются через uv. Он сам создаёт виртуальное окружение и управляет пакетами:

uv venv --python 3.14 .venv

Команда создаёт папку .venv рядом с проектом. Активация окружения остаётся привычной, потому что uv использует стандартный механизм venv.

Windows:

.venv\Scripts\activate

macOS и Linux:

source .venv/bin/activate

После активации в начале строки терминала появится отметка (.venv). Это значит, что библиотеки ставятся внутрь проекта. Проверить путь к активированному Python можно командами:

where python

Они должны указывать на интерпретатор внутри каталога .venv.

Установка зависимостей

После создания виртуального окружения устанавливаются библиотеки, которые понадобятся для работы с автотестами. Основные — selenium, pytest и allure-pytest.

  • selenium управляет браузером и выполняет действия на странице: открывает сайт, кликает по элементам, вводит текст, проверяет результат.
  • pytest запускает тесты, управляет их порядком и выводит отчёты о результатах.
  • allure-pytest создаёт наглядные отчёты с шагами тестов, скриншотами и метками, что удобно при командной работе.

Все дальнейшие зависимости добавляются через uv add — команда сразу обновляет pyproject.toml и uv.lock:

uv add selenium pytest allure-pytest

Проверить установленные пакеты можно командой:

uv pip list

uv add автоматически создаёт и обновляет pyproject.toml и uv.lock. Эти файлы фиксируют версии пакетов и попадают под контроль версий. На другой машине достаточно выполнить:

uv sync

uv создаст виртуальное окружение (если нужно) и установит зависимости строго по lock-файлу.

После установки зависимостей можно проверить работу Selenium, открыв браузер вручную через Python-интерпретатор:

## Импорт библиотеки для управления браузером
from selenium import webdriver

## Запуск браузера Chrome через драйвер
driver = webdriver.Chrome()

## Открытие страницы
driver.get("https://example.com")

## Закрытие браузера и завершение сессии
driver.quit()

Если окно браузера открылось и закрылось без ошибок, все зависимости установлены корректно.

Структура проекта для автотестов

Когда все зависимости установлены, создаётся структура проекта. От неё зависит, насколько удобно будет писать, поддерживать и запускать тесты. В простом виде структура выглядит так:

selenium-tests/
├── venv/
├── tests/
│   ├── test_login.py
│   ├── test_registration.py
│   └── conftest.py
├── pages/
│   ├── login_page.py
│   └── registration_page.py
├── utils/
│   └── helpers.py
├── reports/
├── pyproject.toml
├── uv.lock
└── pytest.ini

Папка tests содержит файлы с тестами. Каждый тест — это отдельная функция, начинающаяся с test_. Например, test_login.py может содержать проверку авторизации:

from selenium import webdriver


def test_login_page_opens():
    driver = webdriver.Chrome()
    driver.get("https://example.com/login")
    assert "Login" in driver.title
    driver.quit()

Папка pages используется, если проект построен по паттерну Page Object. В каждом файле описывается отдельная страница сайта — элементы интерфейса и действия с ними. Такой подход делает тесты короче и понятнее.

Файл conftest.py хранит фикстуры Pytest. Например, создание и закрытие драйвера для каждого теста:

import pytest
from selenium import webdriver


@pytest.fixture
def browser():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

Теперь каждый тест можно писать компактно:

def test_open_main_page(browser):
    browser.get("https://example.com")
    assert "Example Domain" in browser.title

Папка utils хранит вспомогательные функции: обработку данных, создание скриншотов, генерацию тестовых пользователей. Папка reports используется для отчётов Allure. После запуска тестов команда

pytest --alluredir=reports

соберёт данные, а готовый отчёт откроется командой

allure serve reports

Файл pytest.ini хранит настройки фреймворка: путь к тестам, уровень логов, параметры запуска. Сами зависимости и их версии лежат в pyproject.toml и uv.lock, которые обновляет uv.

Настройка запуска тестов с Pytest

После установки зависимостей и создания структуры проекта настраивается запуск тестов. Для этого используется Pytest - фреймворк, который автоматически находит тесты, выполняет их и выводит подробный отчёт.

Pytest ищет все файлы, имена которых начинаются с test_ или заканчиваются на _test.py. Внутри таких файлов запускаются функции, начинающиеся с test_. Например:

def test_open_main_page():
    assert 2 + 2 == 4

Если выполнить в терминале команду

uv run pytest

Pytest пройдёт по всем подкаталогам проекта, найдёт файлы тестов и выведет результат:

============================= test session starts =============================
collected 1 item

tests/test_open_main_page.py .                                            [100%]

============================== 1 passed in 0.45s =============================

Точка (.) означает успешное выполнение теста. Если тест упадёт, в консоли появится сообщение с причиной ошибки и строкой, на которой она произошла.

Для удобства создаётся файл настроек pytest.ini в корне проекта:

[pytest]
testpaths = tests
addopts = -v --tb=short

Параметр testpaths указывает директорию, где искать тесты. Опция -v включает подробный режим (verbose), а --tb=short делает вывод ошибок короче и понятнее.

Чтобы каждый тест автоматически открывал и закрывал браузер, в проект добавляется фикстура. В файле conftest.py:

import pytest
from selenium import webdriver


@pytest.fixture
def browser():
    driver = webdriver.Chrome()
    yield driver
    driver.quit()

Теперь в тестах можно использовать аргумент browser, не создавая драйвер вручную:

def test_example(browser):
    browser.get("https://example.com")
    assert "Example" in browser.title

Запуск выполняется командой:

uv run pytest

Запуск и отчёты

Pytest умеет не только запускать тесты, но и сохранять результаты. Чтобы передать данные в Allure, используется дополнительный параметр:

uv run pytest --alluredir=reports

После завершения тестов в папке reports появятся файлы с информацией о каждом запуске: имя теста, статус, длительность, причина ошибки.

Allure преобразует эти данные в наглядный отчёт. Для этого используется команда:

allure serve reports

Она открывает интерактивную страницу в браузере, где показаны пройденные и упавшие тесты, шаги выполнения, скриншоты и логи. Такой отчёт удобно использовать при командной работе или передаче результатов тестирования.

Pytest также позволяет запускать не все тесты сразу, а выборочно. Это удобно, когда нужно быстро проверить одну часть сценария. Например, запуск только одного файла:

uv run pytest tests/test_login.py

или одной функции внутри файла:

uv run pytest tests/test_login.py::test_valid_login

Фильтрация помогает экономить время при отладке. Вместо полного прогона всех автотестов можно запускать только нужные проверки.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845