From 59d223d72b8a5a9058a3b30fc241111374b4988d Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 28 Feb 2026 17:55:59 +0300 Subject: [PATCH] docs: add web-test guide and README entry - New docs/web-test-guide.md with usage scenarios, API overview, DCS filters - README: add web-test row to skills table, directory structure, Node.js requirement Co-Authored-By: Claude Opus 4.6 --- README.md | 4 ++ docs/web-test-guide.md | 148 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 docs/web-test-guide.md diff --git a/README.md b/README.md index 300b7298..13a9834c 100644 --- a/README.md +++ b/README.md @@ -35,12 +35,14 @@ | Командный интерфейс (CI) | 2 навыка `/interface-*` | Редактирование и валидация CommandInterface.xml подсистем | [Подробнее](docs/subsystem-guide.md) | | Базы данных (DB) | 9 навыков `/db-*` | Создание баз, загрузка/выгрузка конфигураций, обновление БД, загрузка из Git | [Подробнее](docs/db-guide.md) | | Веб-публикация (Web) | 4 навыка `/web-*` | Публикация баз через Apache, статус, остановка, удаление публикаций | [Подробнее](docs/web-guide.md) | +| Тестирование (Web) | `/web-test` | Автоматизация 1С через браузер — навигация, формы, таблицы, отчёты, фильтры | [Подробнее](docs/web-test-guide.md) | | Утилиты | `/img-grid` | Наложение сетки на изображение для определения пропорций колонок | — | ## Требования - **Windows** с PowerShell 5.1+ (входит в Windows) - **1С:Предприятие 8.3** — для сборки/разборки EPF/ERF (навыки генерации XML работают без платформы) +- **Node.js 18+** — для `/web-test` (тестирование через браузер) ## Спецификации @@ -133,6 +135,7 @@ ├── web-info/ # Статус Apache и публикаций ├── web-stop/ # Остановка Apache ├── web-unpublish/ # Удаление публикации +├── web-test/ # Тестирование через браузер (Playwright) └── img-grid/ # Сетка для анализа изображений docs/ ├── epf-guide.md # Гайд: внешние обработки и отчёты @@ -146,6 +149,7 @@ docs/ ├── subsystem-guide.md # Гайд: подсистемы и командный интерфейс ├── db-guide.md # Гайд: базы данных 1С ├── web-guide.md # Гайд: веб-публикация через Apache +├── web-test-guide.md # Гайд: тестирование через веб-клиент ├── 1c-epf-spec.md # Спецификация XML-формата (EPF) ├── 1c-erf-spec.md # Спецификация XML-формата (ERF) ├── 1c-form-spec.md # Спецификация управляемых форм diff --git a/docs/web-test-guide.md b/docs/web-test-guide.md new file mode 100644 index 00000000..c0995102 --- /dev/null +++ b/docs/web-test-guide.md @@ -0,0 +1,148 @@ +# Тестирование через веб-клиент 1С + +Навык `/web-test` автоматизирует действия в веб-клиенте 1С через Playwright — навигация по разделам, заполнение форм, чтение таблиц и отчётов, фильтрация списков. Замыкает цикл: правка исходников → загрузка → обновление → публикация → **автоматическое тестирование**. + +## Навык + +| Навык | Скрипт | Описание | +|-------|:------:|----------| +| `/web-test` | `.mjs` (Node.js) | Автоматизация 1С через браузер — навигация, формы, таблицы, отчёты | + +## Предусловия + +- База опубликована через Apache (`/web-publish`) +- Node.js 18+ установлен +- Зависимости установлены: `cd .claude/skills/web-test/scripts && npm install` + +## Рабочий цикл + +``` +/web-publish → /web-test → результат + ↑ | + └── правки → /db-load-xml → /db-update ──┘ +``` + +### Два режима работы + +**Автономный** — одна команда запускает браузер, выполняет сценарий и закрывает: +``` +> Открой список заказов клиентов в ERP, найди заказ КП00-000018, открой и прочитай реквизиты +``` +Claude напишет `.js` файл со сценарием и запустит `node $RUN run script.js`. + +**Интерактивный** — пошаговая работа через живую сессию: +``` +> Запусти браузер на базе erp +> Перейди в раздел Продажи +> Открой Заказы клиентов +> Прочитай таблицу +``` +Claude запустит `node $RUN start `, затем выполнит каждый шаг через `node $RUN exec`. + +## Сценарии использования + +### Навигация и чтение данных + +``` +> Открой список контрагентов в ERP и покажи первые 10 записей +``` + +Claude перейдёт в нужный раздел, откроет список и прочитает таблицу. + +### Создание документа + +``` +> Создай заказ клиента: организация "Андромеда Плюс", контрагент "Торговый дом Комплексный", +> добавь строку: номенклатура "Вентилятор", количество 5 +``` + +Claude откроет форму создания, заполнит реквизиты шапки, добавит строку в табличную часть. + +### Работа с отчётами + +``` +> Открой отчёт "Остатки и доступность товаров", +> установи отбор Склад = "Склад бытовой техники", сформируй и прочитай результат +``` + +Claude заполнит фильтры отчёта (DCS-настройки) по человекочитаемым именам, нажмёт "Сформировать" и прочитает табличный документ. + +### Поиск и фильтрация + +``` +> Найди в списке номенклатуры товар "Вентилятор" и открой его карточку +``` + +Claude отфильтрует список, откроет найденный элемент двойным кликом, прочитает форму. + +### Проверка после загрузки расширения + +``` +> Загрузи расширение ТестОшибки и проверь через браузер, что при создании заказа клиента +> появляется ошибка "Тестовая ошибка из расширения" +``` + +Claude загрузит расширение через `/db-load-xml`, затем через `/web-test` откроет форму заказа и проверит ожидаемое поведение. + +## API: что умеет навык + +### Навигация + +| Функция | Что делает | +|---------|------------| +| `navigateSection(name)` | Переход в раздел (Продажи, Склад и доставка, ...) | +| `openCommand(name)` | Открытие команды из панели функций | +| `navigateLink(url)` | Открытие по пути метаданных (`Документ.ЗаказКлиента`) | +| `switchTab(name)` | Переключение между открытыми вкладками | + +### Чтение + +| Функция | Что делает | +|---------|------------| +| `getFormState()` | Структура формы: поля, кнопки, вкладки, фильтры, DCS-настройки отчёта | +| `readTable()` | Данные таблицы с пагинацией, поддержка дерева и иерархии | +| `readSpreadsheet()` | Табличный документ отчёта: заголовки, данные, итоги | +| `getSections()` | Разделы и команды | + +### Действия + +| Функция | Что делает | +|---------|------------| +| `clickElement(text)` | Клик по кнопке, ссылке, вкладке, строке таблицы | +| `fillFields({...})` | Заполнение полей формы (текст, чекбокс, радио, ссылочные) | +| `selectValue(field, search)` | Выбор из справочника через форму подбора | +| `fillTableRow({...})` | Заполнение строки табличной части | +| `filterList(text)` | Фильтрация списка (простая и расширенная) | +| `closeForm()` | Закрытие формы с управлением диалогом подтверждения | + +### DCS-отчёты (фильтры по меткам) + +Фильтры отчётов можно задавать человекочитаемыми именами вместо технических: + +```js +// Вместо: 'КомпоновщикНастроекПользовательскиеНастройкиЭлемент3Значение' +// Просто: +await fillFields({ 'Склад': 'Склад бытовой техники' }); +``` + +`getFormState()` возвращает `reportSettings` — фильтры в читаемом виде: +```json +[ + { "name": "Склад", "enabled": true, "value": "Склад бытовой техники" }, + { "name": "Номенклатура", "enabled": false, "value": "" } +] +``` + +## Особенности + +- **Headed mode** — 1С требует видимый браузер, headless не поддерживается +- **Время запуска** — первое подключение к 1С занимает 30-60 секунд +- **Fuzzy matching** — все поиски по имени: точное совпадение → начало строки → вхождение +- **Clipboard paste** — все поля заполняются через Ctrl+V (единственный способ корректно триггерить события 1С) +- **Anti-loop** — если элемент не найден после 2 попыток, навык сообщает что найдено вместо бесконечных ретраев + +## Связанные навыки + +- [Веб-публикация](web-guide.md) — `/web-publish`, `/web-info`, `/web-stop`, `/web-unpublish` +- [Базы данных](db-guide.md) — `/db-load-xml`, `/db-update`, `/db-run` +- [Расширения](cfe-guide.md) — `/cfe-init`, `/cfe-borrow`, `/cfe-patch-method`