Признак
Эта строка зависает в течение 60 секунд на маршрутах администратора, таких как /admin/gear/ (и периодически на /dashboard/):
Код: Выделить всё
await page.locator('nav[data-testid="nav-internal"]').first().waitFor({ state: 'visible' });
Что мы обнаружили
- Наша внутренняя навигация внедряется с помощью частичного загрузчика
(/js/includes.js), который запускает событие parts:loaded. - Страницы, не предназначенные для администраторов, сначала содержат файл include.js, затем внутренний-nav.js, и
появляется навигационная панель. Тесты пройдены.
- Только /admin-rsvps.html включал include.js, и это работало.
Код: Выделить всё
Соответствующий HTML (работает без прав администратора)
Код: Выделить всё
Что мы пробовали/что помогает
Если мы добавим include.js в качестве первого скрипта на страницах администратора (перед внутренним-nav.js и кодом аутентификации), тест пройдет локально.
Мы также создаем обход CI, чтобы избежать реальной аутентификации время:
Код: Выделить всё
window.PW_TEST_MODE = true;
try {
localStorage.setItem('AS_AUTH_BYPASS', '1');
localStorage.setItem('AS_TEST_ROLE', 'admin');
} catch {}
Наш ожидающий Playwright прослушивает частичные файлы:загружается, а затем ждет селектора навигации.
Вопрос
Каков наилучший шаблон, чтобы сделать пользовательский интерфейс с авторизацией детерминированным для Playwright на статических сайтах, которые используют частичный
Варианты, которые я рассматриваю:
- Сначала загрузите include.js на всех страницах (администраторских и неадминистративных) и сохраните
скрипты аутентификации/навигации после него (простая гарантия порядка). - Немедленно визуализируйте минимальную навигационную оболочку в тестовом режиме (чтобы селектор
существовал), а затем заполните элементы после auth. - Добавьте переключатель тестового жгута (например, ?e2e=1), который полностью пропускает инициализацию Firebase SDK и синхронно публикует макет администратора.
Env
- Playwright 1.48.x
- Node 20
- Chromium (без головы)
- Firebase Хостинг
(статический сайт) - Firebase Auth (настраиваемые утверждения для администратора)
- CI: GitHub
- Действия с OIDC
Подробнее здесь: https://stackoverflow.com/questions/797 ... -move-part