# UI Testing Infrastructure 🧪

> Инфраструктура для автоматизированного UI-тестирования веб-приложений с визуальной проверкой скриншотов

**Статус:** planning  
**Старт:** 2026-05-04  
**Автор:** Стрим 🌊

---

## Проблема

При тестировании Enduro Trails Фаза 3 столкнулись с тем, что:
- Playwright/Puppeteer не запускаются в OpenClaw-контейнере (нет системных библиотек: libglib, libnss, libatk и др.)
- SSH-бинарник в контейнере требует glibc 2.38+, а в контейнере 2.36
- Внешние screenshot-сервисы требуют API-ключи
- Без скриншотов невозможно проверить визуальные тест-кейсы: hover, drag, цвета, layout

Из 56 тест-кейсов Фазы 3 только ~20 можно проверить через API. Остальные 36 требуют браузера.

---

## Цель

Создать **переиспользуемую инфраструктуру** для UI-тестирования любых веб-приложений проекта:
- Запуск браузера (headless Chromium)
- Скриншоты на каждом шаге
- Анализ скриншотов через vision-модель (Qwen 3.6 Plus)
- Структурированный отчёт с результатами

---

## Варианты реализации

### Вариант A: Chromium на сервере mva154 (рекомендуемый)

**Идея:** установить Chromium на mva154, запускать тесты там через SSH, скриншоты копировать обратно.

**Плюсы:**
- Полный контроль над окружением
- Нет ограничений контейнера
- Один раз настроил — работает всегда
- Тесты гоняются рядом с приложением (нет сетевых задержек)

**Минусы:**
- Нужна установка на сервере (apt install chromium-browser)
- Зависит от доступности mva154

**Реализация:**
```bash
# На mva154:
sudo apt-get install -y chromium-browser nodejs npm
npm install -g puppeteer-core

# Скрипт теста запускается через ssh_exec.sh:
ssh_exec.sh --host mva154 --cmd "node /home/slin/ui-tests/test.js" --timeout 120
# Скриншоты копируются обратно через scp
```

---

### Вариант B: Docker-контейнер с Chromium на mva154

**Идея:** отдельный Docker-контейнер `ui-tester` с предустановленным Playwright.

**Плюсы:**
- Изолированное окружение
- Воспроизводимо
- Можно запускать по требованию

**Минусы:**
- Нужно место на диске (~1.5 GB для Playwright + Chromium)
- Дополнительный контейнер

**Dockerfile:**
```dockerfile
FROM mcr.microsoft.com/playwright:v1.44.0-jammy
WORKDIR /tests
COPY package.json .
RUN npm install
```

**Запуск:**
```bash
docker run --rm -v /home/slin/ui-tests:/tests ui-tester node test.js
```

---

### Вариант C: GitHub Actions / CI (для будущего)

**Идея:** тесты запускаются в CI при каждом деплое.

**Плюсы:** автоматически, не требует ручного запуска  
**Минусы:** нужен GitHub repo, сложнее настроить

---

## Требования к инфраструктуре

### R-01: Запуск браузера
- Headless Chromium (без GUI)
- Поддержка viewport: desktop (1280×800) и mobile (375×667)
- Поддержка JavaScript (SPA-приложения)
- Ожидание `networkidle` перед скриншотом

### R-02: Управление тестами
- Тесты описываются как JS-скрипты (Playwright API)
- Каждый тест: precondition → steps → assertions → screenshot
- Поддержка `waitForSelector`, `waitForFunction`, `click`, `hover`, `drag`
- Debounce-действия (ждать N мс после клика)

### R-03: Скриншоты
- PNG, полная страница или viewport
- Именование: `TC-ID-step-description.png`
- Хранение: `/home/node/.openclaw/workspace/tasks/<project>/screenshots/`
- Автоматическое создание директории

### R-04: Анализ скриншотов через vision
- После каждого скриншота — опциональный вызов image-tool с Qwen 3.6 Plus
- Промпт для анализа: что видно на скрине, соответствует ли ожиданиям
- Результат анализа включается в отчёт

### R-05: Отчёт
- Markdown-файл с результатами
- Структура: PASSED / FAILED / BLOCKED
- Для каждого FAILED: скриншот + описание бага
- Итоговая статистика

### R-06: Интеграция с OpenClaw
- Запуск через `sessions_spawn` (dev-агент)
- Скриншоты доступны в workspace для анализа через `image` tool
- Отчёт сохраняется в `tasks/<project>/reports/`

---

## Архитектура

```
OpenClaw (Стрим)
    │
    ├── sessions_spawn(dev) → запуск тестов
    │       │
    │       └── ssh_exec.sh --host mva154
    │               │
    │               └── node test.js (Playwright на mva154)
    │                       │
    │                       ├── Chromium headless
    │                       ├── Скриншоты → /tmp/screenshots/
    │                       └── Результаты → /tmp/test_results.json
    │
    ├── scp скриншоты → workspace/screenshots/
    │
    └── image(screenshot, model=qwen3.6) → визуальный анализ
            │
            └── Финальный отчёт TEST_REPORT.md
```

---

## Структура проекта

```
tasks/ui-testing/
├── PROJECT.md              ← этот файл
├── README.md               ← как запустить
├── scripts/
│   ├── setup-mva154.sh     ← установка Chromium на mva154
│   ├── run-tests.sh        ← запуск тестов (wrapper)
│   └── analyze-screenshots.js  ← анализ через vision API
├── tests/
│   ├── enduro-phase3.js    ← тесты Enduro Trails Фаза 3
│   └── template.js         ← шаблон для новых тестов
└── reports/
    └── .gitkeep
```

---

## План реализации

### Этап 1: Установка окружения на mva154
- [ ] Установить chromium-browser через apt
- [ ] Установить Node.js 20+ (если нет)
- [ ] Установить puppeteer-core глобально
- [ ] Проверить: `chromium-browser --version`

### Этап 2: Базовый тест-раннер
- [ ] Написать `scripts/run-tests.sh` — wrapper для запуска через ssh_exec.sh
- [ ] Написать `tests/template.js` — шаблон теста с Puppeteer
- [ ] Проверить: скриншот главной страницы Enduro Trails

### Этап 3: Тесты Enduro Trails Фаза 3
- [ ] Перенести все 56 тест-кейсов из TEST_CASES_PHASE3.md в `tests/enduro-phase3.js`
- [ ] Запустить полный прогон
- [ ] Скопировать скриншоты в workspace

### Этап 4: Визуальный анализ
- [ ] Для каждого скриншота — вызов `image` tool с Qwen 3.6 Plus
- [ ] Промпты для каждого типа проверки (карточки, полоска, hover и т.д.)
- [ ] Итоговый отчёт

### Этап 5: Переиспользование
- [ ] Документировать как добавить тесты для нового проекта
- [ ] Шаблон тест-скрипта

---

## Приоритет

**Первый запуск:** Enduro Trails Фаза 3 — 36 непроверенных UI тест-кейсов ждут.

---

*Проект создан после того как Playwright не запустился в OpenClaw-контейнере при тестировании Enduro Trails Фаза 3 (2026-05-04).*
