1. Основы Python для автоматизатора и конфигурация рабочего окружения
Основы Python для автоматизатора и конфигурация рабочего окружения
Представьте, что вы вручную проверяете форму регистрации на сайте. Вы вводите имя, почту, пароль, нажимаете кнопку и сверяете результат с ожидаемым. На это уходит 30 секунд. Если форм десять, а браузеров три — это уже 15 минут монотонного труда. Автоматизатор тратит те же 15 минут, но не на клики, а на написание кода, который будет выполнять эту работу за секунды неограниченное количество раз. Однако прежде чем первый скрипт откроет окно браузера, необходимо превратить компьютер из «печатной машинки» в полноценную инженерную станцию и освоить Python не как язык для Data Science или бэкенда, а как инструмент управления браузером.
Почему Python стал стандартом в QA Automation
Выбор языка программирования для автоматизации часто сводится к противостоянию Java и Python. Если Java требует строгого соблюдения объектно-ориентированных канонов даже в простейшем скрипте, то Python позволяет начать с лаконичного процедурного стиля. Для тестировщика, переходящего из ручного тестирования, это критически важно: порог входа ниже, а читаемость кода — выше.
В экосистеме Python тесты выглядят как документация. Сравните: в Java вам пришлось бы инициализировать класс и метод, прежде чем вывести строку в консоль. В Python достаточно одной строки. Это свойство «исполняемого псевдокода» делает Python идеальным для поддержки огромных регрессионных наборов, где важно быстро понять, что именно проверяет тест, спустя полгода после его написания.
Подготовка фундамента: установка и изоляция окружения
Первая ошибка начинающего автоматизатора — использование системного интерпретатора Python для всех проектов сразу. В Windows или macOS Python может быть предустановлен, но прямое использование глобальной директории приведет к «конфликту зависимостей». Представьте, что один проект требует библиотеку Selenium версии 3.141, а другой — версии 4.10. Установив одну глобально, вы сломаете вторую.
Интерпретатор и пакетный менеджер
Сердце нашей работы — интерпретатор Python. На текущий момент стандартом является ветка 3.x (версии 3.10 и выше). Вместе с интерпретатором устанавливается pip — менеджер пакетов. Его задача — скачивать библиотеки из внешнего репозитория PyPI (Python Package Index).
Проверить наличие инструментов в системе можно командами:
Виртуальные окружения (venv)
Для решения проблемы конфликтов мы используем виртуальные окружения. Это изолированные копии интерпретатора Python внутри папки вашего проекта.
Когда вы создаете виртуальное окружение через модуль venv, Python копирует бинарный файл интерпретатора и настраивает пути так, чтобы все устанавливаемые библиотеки попадали в локальную папку проекта, а не в системную.
Процесс создания окружения:
python -m venv venv.venv\Scripts\activate
- macOS/Linux: source venv/bin/activateПосле активации в терминале появится префикс (venv), сигнализирующий о том, что теперь любая команда pip install затронет только текущий проект.
Инструментарий: IDE и драйверы
Выбор среды разработки (IDE) напрямую влияет на скорость написания тестов. Для Python-автоматизатора существует два лидера: PyCharm и VS Code.
PyCharm (Community Edition) — это «тяжелая артиллерия». Она из коробки понимает структуру тестов, подсвечивает ошибки в локаторах и предлагает мощный отладчик (debugger). VS Code — более легкий вариант, требующий установки плагинов (Python, Pylance). В рамках обучения мы ориентируемся на PyCharm, так как его статический анализ кода помогает избегать глупых ошибок на ранних этапах.
Selenium WebDriver и менеджеры драйверов
Чтобы Python мог управлять браузером Chrome или Firefox, ему нужен «посредник» — исполняемый файл драйвера (chromedriver или geckodriver). Раньше автоматизаторы скачивали их вручную и прописывали пути в системных переменных. Сегодня это считается плохим тоном.
Современный подход — использование библиотеки webdriver-manager или встроенных средств Selenium 4, которые сами определяют версию вашего браузера и скачивают нужный драйвер в кэш. Это избавляет от ошибки "SessionNotCreatedException", которая возникает каждый раз, когда Chrome обновляется, а старый драйвер перестает с ним работать.
Базовые типы данных через призму тестирования
В автоматизации мы постоянно манипулируем данными: текстом из элементов, числами в корзине, списками найденных ссылок.
Строки (Strings)
Строки — основной тип данных в вебе. Все, что вы достаете из DOM-дерева страницы с помощью метода.text, является строкой.
xpath = f"//button[text()='{button_name}']"
.strip(), .lower(), .replace(): Используются для очистки «грязных» данных с фронтенда (лишние пробелы, переносы строк).Числа (Integers и Floats)
Часто цена на сайте отображается как$1,200.50. Чтобы проверить, что скидка применилась верно, автоматизатор должен:
float.Списки (Lists)
Когда вы ищете не одну кнопку, а все товары в категории (методfind_elements), Selenium возвращает список объектов. Мы используем списки для:
.sort()).Словари (Dictionaries)
Словари идеально подходят для хранения тестовых данных. Например, данные пользователя для регистрации:Это позволяет передавать один объект в функцию регистрации вместо трех отдельных аргументов.
Управляющие конструкции: логика проверок
Автотест — это не просто линейный набор команд. Это алгоритм, который должен уметь принимать решения.
Условные операторы (if/elif/else)
В тестированииif часто используется для обработки опциональных состояний. Например: «Если на странице появилось модальное окно с куки — закрой его, если нет — продолжай». Однако злоупотребление if внутри теста — признак плохой архитектуры. Тест должен быть предсказуемым. Если поведение системы вариативно, лучше разделить это на два разных сценария.Циклы (for/while)
Циклfor — ваш главный помощник при работе с таблицами и списками.
Пример: пройти по всем заголовкам статей в блоге и убедиться, что каждый содержит ключевое слово.
Цикл while в автоматизации используется реже и преимущественно для «умных ожиданий» (хотя в Selenium для этого есть встроенные механизмы, которые мы разберем позже). Например, опрашивать статус платежа в базе данных, пока он не станет "Success", но не дольше 30 секунд.Функции как первый шаг к Page Object Model
Функции позволяют избежать дублирования кода (принцип DRY — Don't Repeat Yourself). Если в каждом тесте вам нужно авторизоваться, вы не копируете 5 строк ввода логина и пароля, а создаете функцию login(driver, user, password).
Важные аспекты функций для QA:
def wait_element(driver, timeout=10):.driver — это экземпляр WebDriver. Это включает автодополнение методов.Обработка исключений: почему тесты падают
В ручном тестировании, если кнопка не нажалась, вы просто пробуете еще раз или понимаете, что это баг. В автотестах любая заминка вызывает Exception.
Для автоматизатора критически важно различать:
Конструкция try...except позволяет элегантно обрабатывать такие ситуации. Например, мы можем попытаться нажать на кнопку, а в блоке except сделать скриншот страницы, чтобы при разборе отчетов сразу увидеть причину падения.
Работа с файловой системой и путями
Автотесты не живут в вакууме. Им нужно:
.env, .yaml, .ini).Использование «захардкоженных» путей вида C:\Users\Admin\Project\file.txt — это гарантия того, что тесты не запустятся ни у кого, кроме вас. Для работы с путями в Python используется библиотека os или современная pathlib.
Библиотека pathlib позволяет строить пути относительно корня проекта:
Такой код будет работать и на Windows, и на Linux в CI/CD контейнере.
Объектно-ориентированное программирование (ООП) в минимальном объеме
Многие новички пугаются ООП, но в автоматизации Selenium оно используется повсеместно. Вам не нужно строить сложные иерархии наследования, но вы должны понимать два столпа:
WebDriver). Страница сайта — это тоже объект (Page Object).BasePage (базовый класс с общими методами: клик, ввод текста, поиск) и наследуем от него конкретные страницы, например LoginPage. Это позволяет не переписывать логику ожидания элементов в каждом новом классе.Пример структуры:
Установка зависимостей и файл requirements.txt
Когда ваш проект готов к передаче коллегам или на сервер, вы должны предоставить список всех необходимых библиотек. В Python это делается через файл requirements.txt.
Создать его можно командой:
pip freeze > requirements.txt
Установить все зависимости на новой машине:
pip install -r requirements.txt
Это обеспечивает воспроизводимость окружения. Если вы используете Selenium 4.15.0, то и на сервере должна стоять именно эта версия, чтобы избежать неожиданного изменения поведения методов.
Практические рекомендации по настройке рабочего места
Для эффективного старта выполните следующие шаги:
.gitignore, чтобы не отправлять в облако папку venv и временные файлы PyCharm (.idea).flake8 или black. Эти инструменты автоматически проверяют ваш код на соответствие стандарту PEP 8. Чистый код легче читать и поддерживать.encoding='utf-8'.Замыкание мысли
Настройка окружения и изучение основ Python — это не просто подготовительный этап, это создание фундамента вашего будущего фреймворка. Качественно изолированное виртуальное окружение, понимание типов данных и умение работать с исключениями отделяют «автора скриптов» от инженера по автоматизации. Помните, что автотест — это программа, которая тестирует другую программу. А значит, к нему применимы все требования качественной разработки: чистота, модульность и устойчивость к изменениям. В следующей главе мы перейдем к изучению того, как эти знания применяются для управления архитектурой самого Selenium WebDriver.