# README: UI Testing Infrastructure ## Быстрый старт ### 1. Установить окружение на mva154 (один раз) ```bash 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 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) ``` --- ## Написать новый тест 1. Скопировать `tests/template.js` → `tests/my-project.js` 2. Заменить `CONFIG.url` на нужный URL 3. Добавить тест-кейсы в функцию `runTests(page)` 4. Запустить: `bash scripts/run-tests.sh my-project my-project` ### API хелперов ```js // Скриншот 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-элементы вокруг карты, не саму карту