# Тестирование через веб-клиент 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`