Ответ
Я систематически проверяю поле ввода, используя комбинацию техник тест-дизайна для покрытия функциональности, удобства использования и безопасности.
Базовые сценарии проверки:
-
Валидные данные
- Ввод корректных данных, соответствующих спецификации (например,
name@example.comдля email).
- Ввод корректных данных, соответствующих спецификации (например,
-
Граничные значения и пределы
- Минимальная длина: Пустая строка (если поле необязательное), один символ.
- Максимальная длина: Ввод строки максимально допустимой длины, попытка ввода на 1 символ больше.
- Граничные значения для чисел: Минимум, максимум, значения чуть ниже/выше границ.
-
Некорректные (невалидные) данные
- Запрещенные символы (эмодзи, скрипты, спецсимволы для текстового поля).
- Неверный формат (дата, email, номер телефона).
- SQL-инъекции (
' OR '1'='1), XSS-пейлоады (<script>alert(1)</script>).
-
Поведение и интерактивность
- Копирование (Ctrl+C), вставка (Ctrl+V), вырезание (Ctrl+X).
- Отмена действий (Ctrl+Z) и повтор (Ctrl+Y).
- Автозаполнение браузера.
- Очистка поля (крестик или кнопка "Clear").
-
Визуальная обратная связь и доступность
- Отображение плейсхолдера и его исчезновение при фокусе.
- Подсветка ошибок (цвет рамки, текст сообщения).
- Навигация с клавиатуры (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 Ответ 18+ 🔞
А, тестирование полей ввода! Ну это ж святое, блядь. Сидишь, как дурак, и вбиваешь туда всякую хуйню, чтобы понять, не развалится ли всё к ебеням.
Слушай, а ты знаешь, что большинство багов — это просто потому, что программисты нихуя не проверяют, что им в поля пихают? Один раз забыл про SQL-инъекцию — и всё, твоя база данных теперь в публичном доступе, как последняя шлюха. В рот меня чих-пых!
Вот смотри, как я это обычно делаю, чтобы покрыть всё, от функционала до безопасности. Это не просто «ввёл цифры — ок». Это целая наука, ёпта!
С чего начинаю, как конченый зануда:
-
Нормальные данные. Ну тут всё просто. Пишем
vasya@mail.ruв email — и радуемся, что прошло. Скука смертная, но надо. -
А вот тут начинается веселье — границы и пределы.
- Пустота. Отправляю пустое поле. Если оно обязательно — должен быть пиздёц (ошибка). Если нет — тишина и спокойствие.
- Один символ. Буква «ё». Цифра «1». Смотрим, не сломается ли логика валидации.
- Максимальная длина. Вот это прикол! Беру и вставляю текст, который длиннее, чем твоё терпение. На 1 символ больше лимита — и наблюдаю, как поле должно вежливо сказать: «Ну ты чё, мудила, переборщил».
- Числа. Минимум, максимум, и значения чуть-чуть за бортом. Часто баги сидят именно на этих «чуть-чуть».
-
Королевство невалидного говна. Тут я отрываюсь по полной.
- Запрещённые символы. Пихаю эмодзи 😂 в поле «Имя». Или скрипты. Смотрю, не проёбывается ли санитайзация.
- Кривой формат. Дата
99.99.9999, телефон+7-ххх-бля-чёрт. Emailя@сам.дурак. - Атаки, блядь! Мои любимые. Каждый раз ржу, как конь.
- SQL-инъекция:
' OR '1'='1. Если после этого меня пускает без логина — всё, пидарас шерстяной, проект накрылся медным тазом. - XSS:
<script>alert('Ты лох')</script>. Если алерт вылез — фронтендеру можно ебать в сраку, он нихуя не экранировал.
- SQL-инъекция:
-
Поведение и интерактив — проверяю, не тупой ли интерфейс.
- Копипаста (Ctrl+C/V). Вдруг нельзя вставить? Или, наоборот, вставляется лишняя хуйня?
- Отмена (Ctrl+Z). Ввёл херню — отменил. Вернул. Работает?
- Автозаполнение от браузера. Выбираешь из списка — не подставляет ли ерунду?
- Крестик очистки. Нажал — всё стёрлось? А если текст длинный? А если курсор не в конце?
-
Визуал и доступность — для тех, кто не только мышкой тыкает.
- Плейсхолдер. Есть? Исчезает при фокусе? Не съебывает ли куда раньше времени?
- Ошибки. Подсвечивается ли поле красным? Появляется ли внятное сообщение, а не «Error 1488»?
- Клавиатура. Можно ли Tab'ом перейти? Enter'ом отправить?
- Скринридеры. Aria-атрибуты на месте? Или для них наш интерфейс — тёмный лес?
Ну и, собственно, как это выглядит в коде. Блок не трогаю, он святой.
import pytest
# Нормальная почта
VALID_EMAILS = ["test@example.com", "user.name+tag@domain.co.uk"]
# Говно разной степени вонючести
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
Вот так вот, друг. Кажется, что хуйня, но без этого — терпения ноль ебать. Потом пользователь введёт что-то не то, и весь этот карточный домик, который вы называете «фичей», накроется одним ёбаным алертом из консоли.