Писал ли автотесты с нуля (голые скрипты)?

«Писал ли автотесты с нуля (голые скрипты)?» — вопрос из категории Other, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, неоднократно. Например, на последнем проекте по тестированию веб-приложения я с нуля написал фреймворк для UI-автотестов на Python с использованием Selenium WebDriver и Pytest.

Пример базового теста для проверки логина, написанного с чистого листа:

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class TestLogin:

    @pytest.fixture(scope="function")
    def driver(self):
        # Инициализация драйвера с опциями
        options = webdriver.ChromeOptions()
        options.add_argument("--headless")  # для CI
        driver = webdriver.Chrome(options=options)
        driver.implicitly_wait(10)
        yield driver
        driver.quit()

    def test_successful_login(self, driver):
        """Проверка успешного входа с валидными данными."""
        driver.get("https://app.example.com/login")

        # Шаги тест-кейса, реализованные в коде
        driver.find_element(By.ID, "username").send_keys("standard_user")
        driver.find_element(By.ID, "password").send_keys("correct_password")
        driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()

        # Явное ожидание и проверка (assert)
        welcome_message = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.ID, "welcome-header"))
        )
        assert "Dashboard" in welcome_message.text
        assert "/dashboard" in driver.current_url

Что это включает:

  1. Настройка окружения: Установка WebDriver, управление зависимостями через requirements.txt (pytest, selenium, webdriver-manager).
  2. Проектирование структуры: Организация Page Object Model (POM), вынесение локаторов и методов в отдельные классы.
  3. Написание поддерживаемого кода: Использование фикстур Pytest, явных ожиданий, понятных ассертов и логирования.
  4. Интеграция в CI/CD: Настройка скриптов для запуска в headless-режиме в Jenkins/GitLab CI.