HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>С появлением смартфонов и приложений появилось больше потребности в создании сайтов, которые ведут себя как приложения. На таких сайтах может не быть некоторых страниц. Например, когда пользователь доходит до самой последней новости в ленте, более поздние новости в ней прогружаются автоматически.</p>
1 <p>С появлением смартфонов и приложений появилось больше потребности в создании сайтов, которые ведут себя как приложения. На таких сайтах может не быть некоторых страниц. Например, когда пользователь доходит до самой последней новости в ленте, более поздние новости в ней прогружаются автоматически.</p>
2 <p>Получается, данные на сайте подгружаются в зависимости от действий пользователей без перезагрузки страниц. Сайты с такими страницами называются SPA.</p>
2 <p>Получается, данные на сайте подгружаются в зависимости от действий пользователей без перезагрузки страниц. Сайты с такими страницами называются SPA.</p>
3 <p>В этом уроке мы разберем, что такое SPA и какие особенности есть в тестировании одностраничных сайтов.</p>
3 <p>В этом уроке мы разберем, что такое SPA и какие особенности есть в тестировании одностраничных сайтов.</p>
4 <h2>Что такое SPA</h2>
4 <h2>Что такое SPA</h2>
5 <p><strong>SPA (Single Page Application)</strong>или<strong>одностраничное приложение</strong>- это сайты, которые не перезагружают страницу при переходе между различными разделами. То есть все данные выводятся на одной странице.</p>
5 <p><strong>SPA (Single Page Application)</strong>или<strong>одностраничное приложение</strong>- это сайты, которые не перезагружают страницу при переходе между различными разделами. То есть все данные выводятся на одной странице.</p>
6 <p>Такие сайты похожи на мобильные приложения, в которых все действия выполняются в рамках одной страницы.</p>
6 <p>Такие сайты похожи на мобильные приложения, в которых все действия выполняются в рамках одной страницы.</p>
7 <p>В SPA-приложении все данные загружаются один раз, когда открывается приложение. Затем пользователь может свободно перемещаться между различными разделами и не перезагружать страницу. Это делает приложение более быстрым и удобным для использования.</p>
7 <p>В SPA-приложении все данные загружаются один раз, когда открывается приложение. Затем пользователь может свободно перемещаться между различными разделами и не перезагружать страницу. Это делает приложение более быстрым и удобным для использования.</p>
8 <p>SPA-приложения могут быть созданы на различных технологиях, например: HTML, CSS и JavaScript.</p>
8 <p>SPA-приложения могут быть созданы на различных технологиях, например: HTML, CSS и JavaScript.</p>
9 <p>Пример SPA - личные кабинеты банков. В них информация о деньгах, акциях, специальных предложениях подгружаются автоматически без перезагрузки страницы. При загрузке такого приложения сначала грузятся все основные части: шапка, боковые панели. А основная часть меняется в зависимости от того, в какой раздел перешел пользователь.</p>
9 <p>Пример SPA - личные кабинеты банков. В них информация о деньгах, акциях, специальных предложениях подгружаются автоматически без перезагрузки страницы. При загрузке такого приложения сначала грузятся все основные части: шапка, боковые панели. А основная часть меняется в зависимости от того, в какой раздел перешел пользователь.</p>
10 <p>Другой пример SPA - почтовые сервисы, например, Gmail:</p>
10 <p>Другой пример SPA - почтовые сервисы, например, Gmail:</p>
11 <p>Шапка с поиском и боковая панель с переключением категорий загружаются единожды и больше не перезагружаются. В них могут меняться данные, например, количество сообщений, но эти части не перезагружаются даже при переходе внутрь письма.</p>
11 <p>Шапка с поиском и боковая панель с переключением категорий загружаются единожды и больше не перезагружаются. В них могут меняться данные, например, количество сообщений, но эти части не перезагружаются даже при переходе внутрь письма.</p>
12 <h2>Как работает SPA</h2>
12 <h2>Как работает SPA</h2>
13 <p>Особенность SPA - использование JavaScript для формирования страницы у клиента. От сервера клиенту один раз приходит полный макет сайта, а дальше данные обновляются при запросах. Это значит, что большая часть логики и интерфейса находится на стороне пользователя, а сервер предоставляет только необходимые данные.</p>
13 <p>Особенность SPA - использование JavaScript для формирования страницы у клиента. От сервера клиенту один раз приходит полный макет сайта, а дальше данные обновляются при запросах. Это значит, что большая часть логики и интерфейса находится на стороне пользователя, а сервер предоставляет только необходимые данные.</p>
14 <p>На примере интерфейса Gmail сервер изначально послал весь HTML, который нужен для формирования страницы:</p>
14 <p>На примере интерфейса Gmail сервер изначально послал весь HTML, который нужен для формирования страницы:</p>
15 <ul><li>Шапка</li>
15 <ul><li>Шапка</li>
16 <li>Боковая панель</li>
16 <li>Боковая панель</li>
17 <li>Центральная часть</li>
17 <li>Центральная часть</li>
18 </ul><p>Эти данные отобразились в браузере и больше не меняются. Внутри них могут меняться данные в зависимости от запросов, например:</p>
18 </ul><p>Эти данные отобразились в браузере и больше не меняются. Внутри них могут меняться данные в зависимости от запросов, например:</p>
19 <ul><li>При переходе в письмо меняется центральная часть и вместо списка писем показывается выбранное письмо</li>
19 <ul><li>При переходе в письмо меняется центральная часть и вместо списка писем показывается выбранное письмо</li>
20 <li>В этот же момент обновляется боковая панель. Если письмо ранее было не прочитано, то обновляется количество непрочитанных писем</li>
20 <li>В этот же момент обновляется боковая панель. Если письмо ранее было не прочитано, то обновляется количество непрочитанных писем</li>
21 <li>При создании новой категории для писем обновляется боковая панель</li>
21 <li>При создании новой категории для писем обновляется боковая панель</li>
22 </ul><p>При этом те части страницы, в которых не изменяются данные, не будут обновляться или перезагружаться.</p>
22 </ul><p>При этом те части страницы, в которых не изменяются данные, не будут обновляться или перезагружаться.</p>
23 <p>Тестирование SPA не сильно отличается от тестирования любого другого сайта. Оно строится на принципах, которые мы изучали в прошлых уроках. Но здесь есть свои особенности из-за принципа работы.</p>
23 <p>Тестирование SPA не сильно отличается от тестирования любого другого сайта. Оно строится на принципах, которые мы изучали в прошлых уроках. Но здесь есть свои особенности из-за принципа работы.</p>
24 <h2>Как тестировать Single Page Application</h2>
24 <h2>Как тестировать Single Page Application</h2>
25 <p>В этой части мы не будем рассматривать все способы тестирования, которые разбирали в прошлых уроках. Как и для всех сайтов при тестировании SPA проверяются:</p>
25 <p>В этой части мы не будем рассматривать все способы тестирования, которые разбирали в прошлых уроках. Как и для всех сайтов при тестировании SPA проверяются:</p>
26 <ul><li>Адаптивность</li>
26 <ul><li>Адаптивность</li>
27 <li>Кроссбраузерность</li>
27 <li>Кроссбраузерность</li>
28 <li>Мультиязычность, при ее наличии</li>
28 <li>Мультиязычность, при ее наличии</li>
29 <li>Загрузка при различных скоростях соединения</li>
29 <li>Загрузка при различных скоростях соединения</li>
30 </ul><p>Так как SPA состоит из одной страницы и все взаимодействия происходят через запросы на обновление конкретных данных, то при ручном тестировании проверяется всё, что может обновляться.</p>
30 </ul><p>Так как SPA состоит из одной страницы и все взаимодействия происходят через запросы на обновление конкретных данных, то при ручном тестировании проверяется всё, что может обновляться.</p>
31 <p>Посмотрим это на примере почты:</p>
31 <p>Посмотрим это на примере почты:</p>
32 <h3>Тестирование первоначальной загрузки</h3>
32 <h3>Тестирование первоначальной загрузки</h3>
33 <p>На этом этапе страница тестируется так же, как и любая другая страница. Проверяется адаптивность, загрузка всех блоков и отсутствие ошибок в загрузке:</p>
33 <p>На этом этапе страница тестируется так же, как и любая другая страница. Проверяется адаптивность, загрузка всех блоков и отсутствие ошибок в загрузке:</p>
34 <p>При тестировании разделите макет на логические компоненты и проверьте корректность их загрузки. Под корректностью загрузки подразумевается загрузка стилей и первоначальных данных.</p>
34 <p>При тестировании разделите макет на логические компоненты и проверьте корректность их загрузки. Под корректностью загрузки подразумевается загрузка стилей и первоначальных данных.</p>
35 <p>В почтовом интерфейсе основные компоненты:</p>
35 <p>В почтовом интерфейсе основные компоненты:</p>
36 <ul><li>Шапка страницы с меню и поисковой строкой</li>
36 <ul><li>Шапка страницы с меню и поисковой строкой</li>
37 <li>Боковая панель с метками писем</li>
37 <li>Боковая панель с метками писем</li>
38 <li>Центральная часть со списком писем</li>
38 <li>Центральная часть со списком писем</li>
39 </ul><h3>Тестирование функционала</h3>
39 </ul><h3>Тестирование функционала</h3>
40 <p>В этой части тестируются запросы и реакция приложения на них. Например, при открытии непрочитанного письма должна обновиться центральная часть почтового приложения и количество непрочитанных писем в левой части страницы:</p>
40 <p>В этой части тестируются запросы и реакция приложения на них. Например, при открытии непрочитанного письма должна обновиться центральная часть почтового приложения и количество непрочитанных писем в левой части страницы:</p>
41 <p>При открытии письма счетчик непрочитанных писем автоматически уменьшился на один, а в центральной части вместо списка писем открылось выбранное письмо. При этом другие элементы и сама страница не были изменены или перезагружены.</p>
41 <p>При открытии письма счетчик непрочитанных писем автоматически уменьшился на один, а в центральной части вместо списка писем открылось выбранное письмо. При этом другие элементы и сама страница не были изменены или перезагружены.</p>
42 <h3>Тестирование ошибочных запросов</h3>
42 <h3>Тестирование ошибочных запросов</h3>
43 <p>В SPA большую роль играют запросы в различные поля приложения, например, форма поиска или выбор раздела приложения. Приложение должно корректно обрабатывать ошибки и сообщать об этом пользователю. Так как страница не перезагружается и полностью не обновляется, то сообщение об ошибке должно появляться в заметном месте и говорить о том, что произошло. Вот примеры таких ошибок:</p>
43 <p>В SPA большую роль играют запросы в различные поля приложения, например, форма поиска или выбор раздела приложения. Приложение должно корректно обрабатывать ошибки и сообщать об этом пользователю. Так как страница не перезагружается и полностью не обновляется, то сообщение об ошибке должно появляться в заметном месте и говорить о том, что произошло. Вот примеры таких ошибок:</p>
44 <p>В этом примере указана несуществующая метка письма, которая ищется по запросу label:hexlet. Когда мы сделали поиск по такому запросу, был отправлен запрос на сервер, но без результата. Вместо писем было выведено сообщение "Нет цепочек писем с таким ярлыком."</p>
44 <p>В этом примере указана несуществующая метка письма, которая ищется по запросу label:hexlet. Когда мы сделали поиск по такому запросу, был отправлен запрос на сервер, но без результата. Вместо писем было выведено сообщение "Нет цепочек писем с таким ярлыком."</p>
45 <p>Еще один пример обработки ошибок - так выглядит страница сервиса YouTube при отсутствии подключения к интернету:</p>
45 <p>Еще один пример обработки ошибок - так выглядит страница сервиса YouTube при отсутствии подключения к интернету:</p>
46 <p>Попробуйте воспроизвести эту ошибку с помощью DevTools. В этом примере раскрывается идея обновлений только некоторых частей приложения. Даже при отсутствии интернета остаются подгруженными шапка и левая панель страницы, а меняется центральная часть с видео, где выводится ошибка "Нет подключения к Интернету".</p>
46 <p>Попробуйте воспроизвести эту ошибку с помощью DevTools. В этом примере раскрывается идея обновлений только некоторых частей приложения. Даже при отсутствии интернета остаются подгруженными шапка и левая панель страницы, а меняется центральная часть с видео, где выводится ошибка "Нет подключения к Интернету".</p>
47 <p>На этих примерах мы разобрали особенности тестирования SPA-приложений. Хоть тестирование таких проектов и похоже на тестирование обычных сайтов, у него есть несколько особенностей, которые мы разобрали в этом уроке.</p>
47 <p>На этих примерах мы разобрали особенности тестирования SPA-приложений. Хоть тестирование таких проектов и похоже на тестирование обычных сайтов, у него есть несколько особенностей, которые мы разобрали в этом уроке.</p>
48 <h2>Выводы</h2>
48 <h2>Выводы</h2>
49 <p>В этом уроке мы узнали, что помимо стандартных сайтов существуют одностраничные, которые похожи на мобильные приложения. Такие сайты называются SPA от английского Single Page Application.</p>
49 <p>В этом уроке мы узнали, что помимо стандартных сайтов существуют одностраничные, которые похожи на мобильные приложения. Такие сайты называются SPA от английского Single Page Application.</p>
50 <p>Отличительная особенность таких сайтов - переложение логики работы сайта на сторону клиента. Для этого используется язык JavaScript, а на сервер посылаются только запросы на получение новых данных.</p>
50 <p>Отличительная особенность таких сайтов - переложение логики работы сайта на сторону клиента. Для этого используется язык JavaScript, а на сервер посылаются только запросы на получение новых данных.</p>
51 <p>При тестировании таких приложений важно, чтобы обновления при запросах происходили корректно. Для этого тестируют:</p>
51 <p>При тестировании таких приложений важно, чтобы обновления при запросах происходили корректно. Для этого тестируют:</p>
52 <ul><li>Корректную первоначальную загрузку всех блоков</li>
52 <ul><li>Корректную первоначальную загрузку всех блоков</li>
53 <li>Обновление только тех блоков, в которых меняется информация</li>
53 <li>Обновление только тех блоков, в которых меняется информация</li>
54 <li>Обновление данных в связанных блоках. Например, обновление счетчика непрочитанных писем при открытии письма</li>
54 <li>Обновление данных в связанных блоках. Например, обновление счетчика непрочитанных писем при открытии письма</li>
55 <li>Обработка некорректных запросов или при отсутствии интернета</li>
55 <li>Обработка некорректных запросов или при отсутствии интернета</li>
56 </ul>
56 </ul>