Какие основные сценарии вы проверяете при тестировании поля ввода?

«Какие основные сценарии вы проверяете при тестировании поля ввода?» — вопрос из категории Техники тест-дизайна, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я систематически проверяю поле ввода, используя комбинацию техник тест-дизайна для покрытия функциональности, удобства использования и безопасности.

Базовые сценарии проверки:

  1. Валидные данные

    • Ввод корректных данных, соответствующих спецификации (например, name@example.com для email).
  2. Граничные значения и пределы

    • Минимальная длина: Пустая строка (если поле необязательное), один символ.
    • Максимальная длина: Ввод строки максимально допустимой длины, попытка ввода на 1 символ больше.
    • Граничные значения для чисел: Минимум, максимум, значения чуть ниже/выше границ.
  3. Некорректные (невалидные) данные

    • Запрещенные символы (эмодзи, скрипты, спецсимволы для текстового поля).
    • Неверный формат (дата, email, номер телефона).
    • SQL-инъекции (' OR '1'='1), XSS-пейлоады (<script>alert(1)</script>).
  4. Поведение и интерактивность

    • Копирование (Ctrl+C), вставка (Ctrl+V), вырезание (Ctrl+X).
    • Отмена действий (Ctrl+Z) и повтор (Ctrl+Y).
    • Автозаполнение браузера.
    • Очистка поля (крестик или кнопка "Clear").
  5. Визуальная обратная связь и доступность

    • Отображение плейсхолдера и его исчезновение при фокусе.
    • Подсветка ошибок (цвет рамки, текст сообщения).
    • Навигация с клавиатуры (Tab, Shift+Tab, Enter).
    • Работа со скринридерами (aria-атрибуты).

Пример набора тестов для поля "Email" (Python, pytest):

import pytest

# Валидные данные (Positive tests)
VALID_EMAILS = ["test@example.com", "user.name+tag@domain.co.uk"]
# Невалидные данные (Negative tests)
INVALID_EMAILS = ["", "invalid", "@domain.com", "test@.com", "a" * 256 + "@test.com"]

@pytest.mark.parametrize("email", VALID_EMAILS)
def test_valid_email_accepted(email_input_field, email):
    email_input_field.set_value(email)
    email_input_field.blur()  # Имитация потери фокуса
    assert email_input_field.is_valid() == True
    assert email_input_field.get_error_message() == ""

@pytest.mark.parametrize("email", INVALID_EMAILS)
def test_invalid_email_rejected(email_input_field, email):
    email_input_field.set_value(email)
    email_input_field.blur()
    assert email_input_field.is_valid() == False
    # Проверяем, что сообщение об ошибке отображается и не пустое
    assert len(email_input_field.get_error_message()) > 0