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>