HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Одна из основных составляющих современного интернета - формы. Они используются во многих сценариях:</p>
1 <p>Одна из основных составляющих современного интернета - формы. Они используются во многих сценариях:</p>
2 <ul><li>Заказ товара</li>
2 <ul><li>Заказ товара</li>
3 <li>Заказ услуги</li>
3 <li>Заказ услуги</li>
4 <li>Подписка на рассылку</li>
4 <li>Подписка на рассылку</li>
5 <li>Отправка сообщений в чат</li>
5 <li>Отправка сообщений в чат</li>
6 <li>Прохождение тестов</li>
6 <li>Прохождение тестов</li>
7 <li>Регистрация и вход на сайт</li>
7 <li>Регистрация и вход на сайт</li>
8 </ul><p>Это лишь часть того, где используются формы. Это единственный способ прямого взаимодействия с пользователем на сайте или в приложении. По этой причине тестирование форм выходит на передний план, так как невозможность пользоваться сайтом критичнее, чем небольшая ошибка в стилях.</p>
8 </ul><p>Это лишь часть того, где используются формы. Это единственный способ прямого взаимодействия с пользователем на сайте или в приложении. По этой причине тестирование форм выходит на передний план, так как невозможность пользоваться сайтом критичнее, чем небольшая ошибка в стилях.</p>
9 <p>В этом уроке разберем, из чего состоят формы, и как их тестировать. Важно понимать, что невозможно протестировать все возможные варианты значений в большой форме, например, из 20-30 полей. Количество комбинаций разных вариантов в таких формах может быть очень большим.</p>
9 <p>В этом уроке разберем, из чего состоят формы, и как их тестировать. Важно понимать, что невозможно протестировать все возможные варианты значений в большой форме, например, из 20-30 полей. Количество комбинаций разных вариантов в таких формах может быть очень большим.</p>
10 <p>По этой причине мы будем рассматривать общие рекомендации и самые частые проблемы, которые позволят не тестировать форму на все возможные комбинации, а сразу находить проблемные места.</p>
10 <p>По этой причине мы будем рассматривать общие рекомендации и самые частые проблемы, которые позволят не тестировать форму на все возможные комбинации, а сразу находить проблемные места.</p>
11 <h2>Формы в HTML</h2>
11 <h2>Формы в HTML</h2>
12 <p>Формы в HTML - большая тема, которая включает десятки тегов и атрибутов. Но мы остановимся на общей концепции элементов и том, чем они отличаются друг от друга. В этом разделе рассмотрим следующие элементы:</p>
12 <p>Формы в HTML - большая тема, которая включает десятки тегов и атрибутов. Но мы остановимся на общей концепции элементов и том, чем они отличаются друг от друга. В этом разделе рассмотрим следующие элементы:</p>
13 <ul><li>Поля ввода</li>
13 <ul><li>Поля ввода</li>
14 <li>Чекбоксы и радиокнопки</li>
14 <li>Чекбоксы и радиокнопки</li>
15 <li>Список</li>
15 <li>Список</li>
16 <li>Кнопка</li>
16 <li>Кнопка</li>
17 </ul><p>Если вы заинтересованы в более подробном изучении работы этих элементов, а также в вёрстке, для вас в конце урока будет ссылка на интенсив по вёрстке веб-приложений.</p>
17 </ul><p>Если вы заинтересованы в более подробном изучении работы этих элементов, а также в вёрстке, для вас в конце урока будет ссылка на интенсив по вёрстке веб-приложений.</p>
18 <p>Рассмотрим поля формы на примере формы заказа товара:</p>
18 <p>Рассмотрим поля формы на примере формы заказа товара:</p>
19 <h3>Поля ввода</h3>
19 <h3>Поля ввода</h3>
20 <p>Базовый элемент формы - поле для ввода текста. Внешне они могут быть разными, но их принцип один - дать пользователю однострочное поле для ввода информации. Такие поля используются для ввода небольшой информации: имя, фамилия, Email, номер телефона.</p>
20 <p>Базовый элемент формы - поле для ввода текста. Внешне они могут быть разными, но их принцип один - дать пользователю однострочное поле для ввода информации. Такие поля используются для ввода небольшой информации: имя, фамилия, Email, номер телефона.</p>
21 <p>В современном стандарте HTML5 появилось много типов полей, которыми можно пользоваться:</p>
21 <p>В современном стандарте HTML5 появилось много типов полей, которыми можно пользоваться:</p>
22 <ul><li>Текст</li>
22 <ul><li>Текст</li>
23 <li>Email</li>
23 <li>Email</li>
24 <li>Числовое значение</li>
24 <li>Числовое значение</li>
25 <li>Дата</li>
25 <li>Дата</li>
26 <li>Пароль</li>
26 <li>Пароль</li>
27 - </ul><p>Эти поля не просто позволяют определить, что нужно ввести. Кроме того, по ним браузеры автоматически проверяют корректость введенных значений. Такая проверка называется<strong>валидацией</strong>или<strong>validation</strong>. Если значение в поле не соответствует ожидаемому, то высвечивается ошибка - форма не прошла валидацию.</p>
27 + </ul><p>Эти поля не просто позволяют определить, что нужно ввести. Кроме того, по ним браузеры автоматически проверяют корректность введенных значений. Такая проверка называется<strong>валидацией</strong>или<strong>validation</strong>. Если значение в поле не соответствует ожидаемому, то высвечивается ошибка - форма не прошла валидацию.</p>
28 <p>Представим, что в нашей форме поле Email обязательное и для него указана правильная HTML-разметка. Теперь проверку поля забирает на себя браузер. Если не ввести информацию или ввести некорректный Email, то получится такой результат:</p>
28 <p>Представим, что в нашей форме поле Email обязательное и для него указана правильная HTML-разметка. Теперь проверку поля забирает на себя браузер. Если не ввести информацию или ввести некорректный Email, то получится такой результат:</p>
29 <p>Это касается всей формы. Она размечена с учетом всех правил HTML, поэтому валидируется браузером перед отправкой на сервер. Это удобно, так как отнимает меньше сил по проверке каждого обязательного поля.</p>
29 <p>Это касается всей формы. Она размечена с учетом всех правил HTML, поэтому валидируется браузером перед отправкой на сервер. Это удобно, так как отнимает меньше сил по проверке каждого обязательного поля.</p>
30 <p>Иногда в целях дизайна разработчики указывают специальные атрибуты, чтобы не валидировать форму встроенными средствами браузера. Тогда все валидации и вывод ошибок разработчики делают сами. Это позволяет точнее настроить внешний вид ошибок и их описание. Например, вот как выглядит форма с отключенной валидацией браузером:</p>
30 <p>Иногда в целях дизайна разработчики указывают специальные атрибуты, чтобы не валидировать форму встроенными средствами браузера. Тогда все валидации и вывод ошибок разработчики делают сами. Это позволяет точнее настроить внешний вид ошибок и их описание. Например, вот как выглядит форма с отключенной валидацией браузером:</p>
31 <p>Такой подход позволяет лучше контролировать ошибки. Но это накладывает больше ответственности на разработчика, так как для всех типов полей необходимо самостоятельно написать обработчик, который проверит корректность данных. С другой стороны можно проверить абсурдные варианты, например, имя "asjfhalskdfhlkhasdf", так как браузер его пропустит, ведь это текст и поле не пустое.</p>
31 <p>Такой подход позволяет лучше контролировать ошибки. Но это накладывает больше ответственности на разработчика, так как для всех типов полей необходимо самостоятельно написать обработчик, который проверит корректность данных. С другой стороны можно проверить абсурдные варианты, например, имя "asjfhalskdfhlkhasdf", так как браузер его пропустит, ведь это текст и поле не пустое.</p>
32 <p>При тестировании полей для ввода определите, какой элемент перед вами и исходя из этого тестируйте невозможные варианты:</p>
32 <p>При тестировании полей для ввода определите, какой элемент перед вами и исходя из этого тестируйте невозможные варианты:</p>
33 <ul><li>Для числового поля попробуйте ввести буквы</li>
33 <ul><li>Для числового поля попробуйте ввести буквы</li>
34 <li>В полях для ввода имени введите Email</li>
34 <li>В полях для ввода имени введите Email</li>
35 <li>В поле для телефона введите имя</li>
35 <li>В поле для телефона введите имя</li>
36 </ul><p>Некоторые поля изначально рассчитаны на определенное количество символов. Например, мобильный номер телефона состоит из 11 цифр. Попробуйте ввести большее или меньшее количество цифр.</p>
36 </ul><p>Некоторые поля изначально рассчитаны на определенное количество символов. Например, мобильный номер телефона состоит из 11 цифр. Попробуйте ввести большее или меньшее количество цифр.</p>
37 <p>Всегда старайтесь вводить нелогичные комбинации:</p>
37 <p>Всегда старайтесь вводить нелогичные комбинации:</p>
38 <ul><li>Поле для ввода цены - введите отрицательное значение</li>
38 <ul><li>Поле для ввода цены - введите отрицательное значение</li>
39 <li>Адрес доставки - введите адрес из вымышленной вселенной</li>
39 <li>Адрес доставки - введите адрес из вымышленной вселенной</li>
40 </ul><h3>Чекбоксы и радиокнопки</h3>
40 </ul><h3>Чекбоксы и радиокнопки</h3>
41 <p>Это похожие по структуре элементы, у которых есть одно важное отличие: чекбоксы позволяют выбрать несколько вариантов, а радиокнопки - только один:</p>
41 <p>Это похожие по структуре элементы, у которых есть одно важное отличие: чекбоксы позволяют выбрать несколько вариантов, а радиокнопки - только один:</p>
42 <p>В нашей форме с помощью чекбоксов сделаны варианты:</p>
42 <p>В нашей форме с помощью чекбоксов сделаны варианты:</p>
43 <ul><li>Связаться за день до доставки</li>
43 <ul><li>Связаться за день до доставки</li>
44 <li>Сохранить информацию для будущих заказов</li>
44 <li>Сохранить информацию для будущих заказов</li>
45 </ul><p>Пользователь может выбрать оба варианта, один или ни одного. Для чекбоксов отсутствие выбора - это тоже выбор.</p>
45 </ul><p>Пользователь может выбрать оба варианта, один или ни одного. Для чекбоксов отсутствие выбора - это тоже выбор.</p>
46 <p>Радиокнопки позволяют выбрать только один вариант ответа. В данном случае мы можем выбрать между оплатой карты и оплатой наличными. Их валидация происходит чаще, так как пользователю нужно выбрать один из вариантов взаимодействия. В практике часто встречается ситуация, что одна из радиокнопок сразу выбрана при загрузке формы.</p>
46 <p>Радиокнопки позволяют выбрать только один вариант ответа. В данном случае мы можем выбрать между оплатой карты и оплатой наличными. Их валидация происходит чаще, так как пользователю нужно выбрать один из вариантов взаимодействия. В практике часто встречается ситуация, что одна из радиокнопок сразу выбрана при загрузке формы.</p>
47 <p>В этом случае четких правил по валидации нет. В вашем проекте может быть обязательный выбор чекбокса или нескольких и отсутствовать валидация у радиокнопок.</p>
47 <p>В этом случае четких правил по валидации нет. В вашем проекте может быть обязательный выбор чекбокса или нескольких и отсутствовать валидация у радиокнопок.</p>
48 <p>При тестировании нужно обращать внимание на тип элемента:</p>
48 <p>При тестировании нужно обращать внимание на тип элемента:</p>
49 <ul><li>Если в форме чекбокс, то должна быть возможность выбрать несколько вариантов</li>
49 <ul><li>Если в форме чекбокс, то должна быть возможность выбрать несколько вариантов</li>
50 <li>Если в форме радиокнопка, то вариант всегда один. Если разработчик неправильно сверстает форму, то возможна ситуация одновременной оплаты картой и наличными</li>
50 <li>Если в форме радиокнопка, то вариант всегда один. Если разработчик неправильно сверстает форму, то возможна ситуация одновременной оплаты картой и наличными</li>
51 </ul><p>При тестировании стоит смотреть не только на поведение конкретных элементов, но и на их окружение. В форме радиокнопка отвечает на тип оплаты. Если оплата происходит за наличные, то и части формы с вводом банковской карты быть не должно. Тестировщик всегда смотрит на продукт не только как работник, но и как обычный пользователь. Ищите нелогичности.</p>
51 </ul><p>При тестировании стоит смотреть не только на поведение конкретных элементов, но и на их окружение. В форме радиокнопка отвечает на тип оплаты. Если оплата происходит за наличные, то и части формы с вводом банковской карты быть не должно. Тестировщик всегда смотрит на продукт не только как работник, но и как обычный пользователь. Ищите нелогичности.</p>
52 <h3>Список</h3>
52 <h3>Список</h3>
53 <p>Списки - одна из вариаций чекбоксов и радиокнопок, только в другом внешнем представлении. Разработчик может заложить в них один из двух вариантов:</p>
53 <p>Списки - одна из вариаций чекбоксов и радиокнопок, только в другом внешнем представлении. Разработчик может заложить в них один из двух вариантов:</p>
54 <ul><li>Множественный выбор из списка</li>
54 <ul><li>Множественный выбор из списка</li>
55 <li>Один вариант</li>
55 <li>Один вариант</li>
56 </ul><p>При тестировании списков можно придерживаться рекомендаций из раздела про чекбоксы и радиокнопки.</p>
56 </ul><p>При тестировании списков можно придерживаться рекомендаций из раздела про чекбоксы и радиокнопки.</p>
57 <p>В нашей форме есть два списка: "Страна" и "Город". Вот как выглядит выбор стран, если кликнуть по списку:</p>
57 <p>В нашей форме есть два списка: "Страна" и "Город". Вот как выглядит выбор стран, если кликнуть по списку:</p>
58 <p>Здесь видно, что один список серый - он заблокирован. И в этом есть своя логика: нельзя выбрать город до тех пор, пока не выбрана страна. Если же выбрать страну, то открывается возможность выбрать город:</p>
58 <p>Здесь видно, что один список серый - он заблокирован. И в этом есть своя логика: нельзя выбрать город до тех пор, пока не выбрана страна. Если же выбрать страну, то открывается возможность выбрать город:</p>
59 <p>Следите за логикой полей - возможно ли выбрать что-то, если не сделаны предварительные шаги. Так как здесь невозможно вписать свое значение, то основа тестирования строится на логике поведения элементов вокруг списка.</p>
59 <p>Следите за логикой полей - возможно ли выбрать что-то, если не сделаны предварительные шаги. Так как здесь невозможно вписать свое значение, то основа тестирования строится на логике поведения элементов вокруг списка.</p>
60 <h3>Кнопка</h3>
60 <h3>Кнопка</h3>
61 <p>Кнопка - последний в списке, но самый первый по значению элемент. Форму невозможно отправить без нужной кнопки. Когда пользователь нажимает на нее, происходит валидация всех значений в форме. Если всё в порядке, то происходит отправка на сервер, иначе показываются ошибки, как на примерах выше.</p>
61 <p>Кнопка - последний в списке, но самый первый по значению элемент. Форму невозможно отправить без нужной кнопки. Когда пользователь нажимает на нее, происходит валидация всех значений в форме. Если всё в порядке, то происходит отправка на сервер, иначе показываются ошибки, как на примерах выше.</p>
62 <p>Кнопка должна реагировать на текущее состоянии формы. Если пользователь исправил некоторые ошибки, то после отправки должны исчезнуть предупреждения на полях, которые были исправлены:</p>
62 <p>Кнопка должна реагировать на текущее состоянии формы. Если пользователь исправил некоторые ошибки, то после отправки должны исчезнуть предупреждения на полях, которые были исправлены:</p>
63 <p>Иногда форма валидируется сразу, то есть все ошибки пропадают или появляются еще до нажатия на кнопку "Отправить". В этом случае кнопка не должна ничего делать до того момента, как все ошибки не будут исправлены.</p>
63 <p>Иногда форма валидируется сразу, то есть все ошибки пропадают или появляются еще до нажатия на кнопку "Отправить". В этом случае кнопка не должна ничего делать до того момента, как все ошибки не будут исправлены.</p>
64 <p>При тестировании старайтесь использовать разные сценарии. Проверьте:</p>
64 <p>При тестировании старайтесь использовать разные сценарии. Проверьте:</p>
65 <ul><li>Форма не отправляется со всеми пустыми полями</li>
65 <ul><li>Форма не отправляется со всеми пустыми полями</li>
66 <li>С незаполненным одним обязательным полем</li>
66 <li>С незаполненным одним обязательным полем</li>
67 <li>Если форма валидируется в моменте, то не должно происходить отправки в момент исправления последней ошибки</li>
67 <li>Если форма валидируется в моменте, то не должно происходить отправки в момент исправления последней ошибки</li>
68 </ul><p>В одном из следующих уроков мы поговорим и о безопасности отправки данных в формах, что является одним из главных пунктов любого тестирования.</p>
68 </ul><p>В одном из следующих уроков мы поговорим и о безопасности отправки данных в формах, что является одним из главных пунктов любого тестирования.</p>
69 <h2>Выводы</h2>
69 <h2>Выводы</h2>
70 <p>В этом уроке на примере формы отправки заказа мы рассмотрели, из чего состоит форма, и каким образом ее можно протестировать. Узнали о понятии валидации и как она должна работать.</p>
70 <p>В этом уроке на примере формы отправки заказа мы рассмотрели, из чего состоит форма, и каким образом ее можно протестировать. Узнали о понятии валидации и как она должна работать.</p>
71 <p>Вот основные пункты при тестировании форм:</p>
71 <p>Вот основные пункты при тестировании форм:</p>
72 <ul><li>Проверяйте поля для ввода на невозможных данных. Например: отрицательная цена, буквы в поле для цифр, невозможные имена</li>
72 <ul><li>Проверяйте поля для ввода на невозможных данных. Например: отрицательная цена, буквы в поле для цифр, невозможные имена</li>
73 <li>Чекбоксы должны иметь возможность множественного выбора. Если это не так, то функционал должен быть представлен в виде радиокнопки</li>
73 <li>Чекбоксы должны иметь возможность множественного выбора. Если это не так, то функционал должен быть представлен в виде радиокнопки</li>
74 <li>Радиокнопки используются для выбора только одного пункта из множества</li>
74 <li>Радиокнопки используются для выбора только одного пункта из множества</li>
75 <li>Списки повторяют функционал радиокнопок и чекбоксов, только в другом обличии. Их тестирование не отличается</li>
75 <li>Списки повторяют функционал радиокнопок и чекбоксов, только в другом обличии. Их тестирование не отличается</li>
76 <li>Старайтесь проверять не только поле формы, но и то, что происходит вокруг него. Представьте себя не в виде тестировщика, а в виде клиента</li>
76 <li>Старайтесь проверять не только поле формы, но и то, что происходит вокруг него. Представьте себя не в виде тестировщика, а в виде клиента</li>
77 <li>Все валидируемые поля должны быть понятны и отображать ошибки, если это необходимо</li>
77 <li>Все валидируемые поля должны быть понятны и отображать ошибки, если это необходимо</li>
78 </ul><p>В будущих уроках мы еще вернемся к форме, когда будем изучать тему безопасности.</p>
78 </ul><p>В будущих уроках мы еще вернемся к форме, когда будем изучать тему безопасности.</p>