Web Manifest — это JSON-файл, содержащий метаданные веб-приложения: имя, иконки, цветовую схему, поведение при запуске и другие параметры. Проверка его корректности является важной частью тестирования PWA (Progressive Web App), так как ошибки в манифесте могут привести к некорректному отображению приложения на устройствах и нарушению UX.
WebdriverIO предоставляет возможность работы с любыми HTTP-запросами
через встроенные или сторонние библиотеки, такие как axios
или got. Для проверки манифеста основной подход заключается
в следующих шагах:
<link rel="manifest" href="manifest.json">. Его можно
найти через WebdriverIO команды:const manifestLink = await $('link[rel="manifest"]');
const manifestUrl = await manifestLink.getAttribute('href');
import axios from 'axios';
const response = await axios.get(manifestUrl);
const manifest = response.data;
import assert from 'assert';
assert(manifest.name, 'Отсутствует поле name');
assert(manifest.short_name, 'Отсутствует поле short_name');
assert(manifest.start_url, 'Отсутствует поле start_url');
assert(manifest.icons && manifest.icons.length > 0, 'Иконки не заданы');
Иконки являются критичной частью манифеста, так как они отображаются на домашнем экране и в списках приложений. Проверка включает:
sizes) для различных
устройствПример проверки доступности и размера иконок:
for (const icon of manifest.icons) {
const iconResponse = await axios.get(icon.src, { responseType: 'arraybuffer' });
assert.strictEqual(iconResponse.status, 200, `Иконка ${icon.src} недоступна`);
const sizePattern = /^(\d+)x(\d+)$/;
const match = sizePattern.exec(icon.sizes);
assert(match, `Неверный формат размера иконки: ${icon.sizes}`);
const [width, height] = match.slice(1).map(Number);
assert(width === height, 'Иконка не квадратная');
}
Манифест может задавать цветовую тему приложения и ориентацию экрана при запуске:
if (manifest.theme_color) {
const themeColorPattern = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/;
assert(themeColorPattern.test(manifest.theme_color), 'Некорректный theme_color');
}
if (manifest.orientation) {
const validOrientations = ['any', 'natural', 'portrait', 'landscape'];
assert(validOrientations.includes(manifest.orientation), 'Некорректная ориентация');
}
display
и поведения PWAПоле display определяет, как приложение будет
запускаться на устройствах. Основные значения: standalone,
fullscreen, minimal-ui, browser.
Проверка:
const validDisplays = ['standalone', 'fullscreen', 'minimal-ui', 'browser'];
assert(validDisplays.includes(manifest.display), `Некорректное значение display: ${manifest.display}`);
В WebdriverIO можно объединить все проверки в один интеграционный тест:
describe('Web Manifest', () => {
it('должен быть корректным', async () => {
const manifestLink = await $('link[rel="manifest"]');
const manifestUrl = await manifestLink.getAttribute('href');
const response = await axios.get(manifestUrl);
const manifest = response.data;
assert(manifest.name);
assert(manifest.short_name);
assert(manifest.start_url);
assert(manifest.icons && manifest.icons.length > 0);
for (const icon of manifest.icons) {
const iconResponse = await axios.get(icon.src, { responseType: 'arraybuffer' });
assert.strictEqual(iconResponse.status, 200);
}
});
});
Такой тест можно запускать как часть CI/CD, чтобы гарантировать, что любые изменения в PWA не нарушают корректность манифеста.
start_url важна для корректного открытия
приложения. Он должен быть абсолютным или корректным относительным
путем.theme_color и background_color
улучшает визуальное соответствие приложения при запуске на разных
устройствах.Эффективная проверка Web Manifest позволяет убедиться, что PWA полностью готово к установке и использованию, а также соответствует современным стандартам веб-разработки.