Как автоматизируешь негативный сценарий валидации формы?

«Как автоматизируешь негативный сценарий валидации формы?» — вопрос из категории Веб-тестирование, который задают на 24% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При автоматизации негативных сценариев я проверяю, что система корректно обрабатывает невалидные данные и показывает понятные сообщения об ошибках. Вот мой подход на примере теста регистрации с использованием Selenium WebDriver и POM:

  1. Определяю тестовые данные для каждого негативного кейса:

    • Пустые обязательные поля.
    • Неверный формат email.
    • Пароль, не соответствующий политике (слишком короткий, без цифр).
    • Несовпадающие пароли в полях "Пароль" и "Подтверждение".
  2. Создаю параметризованные тесты. Это позволяет запустить все сценарии одним методом.

Пример на Python (pytest + Selenium):

import pytest
from selenium.webdriver.common.by import By
from pages.registration_page import RegistrationPage

# Набор тестовых данных: (email, password, confirm_password, expected_error)
TEST_DATA = [
    ("", "StrongPass123", "StrongPass123", "Email is required"),
    ("invalid-email", "StrongPass123", "StrongPass123", "Enter a valid email"),
    ("test@example.com", "short", "short", "Password must be at least 8 characters"),
    ("test@example.com", "StrongPass123", "DifferentPass456", "Passwords do not match"),
]

@pytest.mark.parametrize("email, pwd, confirm_pwd, expected_error", TEST_DATA)
def test_negative_registration_scenarios(driver, email, pwd, confirm_pwd, expected_error):
    """Параметризованный тест негативных сценариев регистрации."""
    reg_page = RegistrationPage(driver)
    reg_page.open()

    # Заполняем форму невалидными данными
    reg_page.enter_email(email)
    reg_page.enter_password(pwd)
    reg_page.confirm_password(confirm_pwd)
    reg_page.submit_form()

    # Проверяем, что форма НЕ была отправлена (осталась на странице)
    assert reg_page.is_page_opened(), "Form was submitted unexpectedly."

    # Проверяем, что появилось ожидаемое сообщение об ошибке
    actual_error = reg_page.get_error_message()
    assert expected_error in actual_error, f"Expected error '{expected_error}', got '{actual_error}'"

    # Дополнительно: проверяем, что валидные данные в полях не сбросились (если это требуется)
    if email:
        assert reg_page.get_email_field_value() == email
  1. Ключевые проверки для негативных сценариев:
    • Форма не отправляется (браузер остается на той же странице или не происходит перехода).
    • Появляется целевое сообщение об ошибке рядом с соответствующим полем или в общем блоке.
    • Визуальное выделение ошибочного поля (часто добавляется CSS-класс с красной обводкой).
    • Корректность санитизации данных (например, проверка на SQL-инъекции или XSS возвращает общую ошибку валидации, а не детали серверной ошибки).