README: UI Testing Infrastructure
Быстрый старт
1. Установить окружение на mva154 (один раз)
SKILL=~/.openclaw/skills/installer/scripts
$SKILL/ssh_exec.sh --host mva154 --cmd "bash -s" --timeout 300 < tasks/ui-testing/scripts/setup-mva154.sh
2. Запустить тесты
bash tasks/ui-testing/scripts/run-tests.sh enduro-phase3 enduro-trails
Скриншоты появятся в tasks/enduro-trails/screenshots/.
3. Проанализировать скриншоты
Стрим анализирует каждый скриншот через image tool с моделью Qwen 3.6 Plus.
Структура
tasks/ui-testing/
├── PROJECT.md — описание проекта, требования, варианты реализации
├── README.md — этот файл
├── scripts/
│ ├── setup-mva154.sh — установка Chromium + puppeteer на mva154
│ └── run-tests.sh — запуск тестов, копирование скриншотов
└── tests/
├── template.js — шаблон теста (копировать для нового проекта)
└── enduro-phase3.js — тесты Enduro Trails Фаза 3 (56 TC)
Написать новый тест
- Скопировать
tests/template.js→tests/my-project.js - Заменить
CONFIG.urlна нужный URL - Добавить тест-кейсы в функцию
runTests(page) - Запустить:
bash scripts/run-tests.sh my-project my-project
API хелперов
// Скриншот
const snap = await screenshot(page, 'TC-01-step-name');
// Проверки
pass('TC-01', 'описание что прошло');
fail('TC-01', 'что не так', snap); // snap — путь к скриншоту
blocked('TC-01', 'почему заблокировано');
// Действия
await waitAndClick(page, '#btn-route');
await sleep(500); // ждать 500ms
const text = await getText(page, '#route-status');
const visible = await isVisible(page, '#route-panel');
Требования к окружению
| Компонент | Версия | Где |
|---|---|---|
| Node.js | 20+ | mva154 |
| chromium-browser | любая | mva154 |
| puppeteer-core | 22+ | mva154 (/home/slin/ui-tests/) |
Известные ограничения
- Playwright не работает в OpenClaw-контейнере — нет системных библиотек (libglib, libnss и др.)
- SSH-бинарник в контейнере требует glibc 2.38+, контейнер на 2.36 → используем installer skill
- MapLibre GL рендерит карту через WebGL — скриншоты карты могут быть пустыми в headless без GPU. Решение:
--use-gl=swiftshaderили проверять UI-элементы вокруг карты, не саму карту