Community Скиллы Российские сервисы

Vanessa Automation для 1С

Установка
git clone (см. README)

Описание

vanessa-1c-cookbook — набор приёмов для автотестов 1С с Vanessa Automation: запуск Vanessa Automation TestManager в headless-режиме — GUI-тесты без открытого окна клиента, готовые PowerShell-сценарии — запуск фич, сбор результатов и обработка падений, скилл Claude Code — агент пишет фичи и разбирает результаты прогонов, сценарии применимы в CI. Для 1С-команд, внедряющих автотестирование интерфейса.

Что умеет:
— гонять GUI-тесты headless;
— давать готовые PowerShell-сценарии;
— помогать писать фичи из Claude Code;
— встраиваться в CI.

Полная документация ниже — автоматически из репозитория ostaninvladimir/vanessa-1c-cookbook (ветка main). Оригинальные материалы проекта распространяются на условиях его лицензии.

vanessa-1c-cookbook

Практический набор приёмов и PowerShell-скриптов для headless-автоматизации GUI-тестов 1С через Vanessa Automation TestManager. Плюс готовый навык (skill) для Claude Code.

TL;DR (EN): Hard-won recipes for driving 1C:Enterprise thick-client GUI tests via Vanessa Automation TestManager from PowerShell — reliable window activation for the two-same-title-window problem, "test passes but the receipt didn’t post" traps, post-UpdateDBCfg client hangs, and scenario-authoring rules. Usable standalone (PowerShell) or as a Claude Code skill.

Это не форк Vanessa и не туториал «как написать первый .feature». Это то, что не написано в документации и находится днями отладки: как надёжно кликать по TestManager из скрипта, почему «Ошибок не было» врёт, и как не потерять полдня на зависшем клиенте.

Зачем это нужно

Vanessa Automation отлично гоняет сценарии, когда рядом сидит человек и кликает мышкой. Но как только вы пытаетесь запускать прогоны из скрипта/CI на тонком клиенте 1С — начинаются сюрпризы, которых нет в документации:

  • TestManager и TestClient — два окна с одинаковым заголовком, и обычный SetForegroundWindow молча кликает не туда;
  • клиент рапортует «Выполнение сценариев закончено. Ошибок не было», хотя чек на самом деле не провёлся;
  • после UpdateDBCfg первый запуск клиента зависает намертво на «Загрузка конфигурационной информации»;
  • заголовок окна почти никогда не совпадает с ожидаемым, и надо знать, откуда 1С его на самом деле берёт.

Здесь собраны решения каждой из этих проблем — проверенные на живом стенде «1С-Рейтинг Розница KZ» (управляемый режим РМК), но применимые к любой конфигурации на управляемых формах.

Что внутри

Файл Что это
SETUP.md Разворот стенда с нуля до первого зелёного прогона: Vanessa, VAParams.json, задача планировщика, первый запуск. Начните отсюда, если стенда ещё нет.
examples/VAParams.sample.json Образец файла параметров прогона (заполнить под свою базу).
SKILL.md Навык для Claude Code — весь процесс прогона как готовый runbook. Положить в ~/.claude/skills/vanessa-1c/.
scripts/Invoke-VanessaButton.ps1 Надёжный клик по кнопке TestManager (решает проблему двух окон). Работает без Claude.
scripts/Read-VanessaResult.ps1 Чтение результата прогона из списка сообщений через UI Automation.
scripts/Restart-VanessaStand.ps1 Перезапуск клиента 1С + запуск задачи планировщика.
examples/sale_with_card.feature Пример сценария продажи с картой (с обязательным снятием флага фискализации).

Быстрый старт (PowerShell, без Claude)

Нет готового стенда Vanessa? Сначала SETUP.md — разворот с нуля.

# 1. Перезапустить стенд (правьте параметры под себя)
.\scripts\Restart-VanessaStand.ps1 -TaskName "VanessaAutomation-InteractiveLauncher"

# 2. Открыть форму Manager и запустить сценарий
. .\scripts\Invoke-VanessaButton.ps1
Invoke-VanessaButton "Открыть основную форму"
Start-Sleep -Seconds 26
Invoke-VanessaButton "Перезагрузить и выполнить"

# 3. Прочитать результат
.\scripts\Read-VanessaResult.ps1 -WaitSeconds 105

Ключевые находки

1. Два окна с одинаковым заголовком — SetForegroundWindow недостаточно

Manager и TestClient оба называются одинаково и имеют одинаковый BoundingRectangle. Windows молча игнорирует SetForegroundWindow, и клик уходит в TestClient. Надёжно активировать окно можно только связкой:

AttachThreadInput(поток_переднего, поток_целевого)
→ SetWindowPos(HWND_TOP) → BringWindowToTop → SetForegroundWindow
→ ОБЯЗАТЕЛЬНО проверить GetForegroundWindow() ПЕРЕД кликом

Проверка GetForegroundWindow перед кликом критична — иначе клик по чужому окну молча ничего не делает, и это выясняется только через минуту ожидания. Реализовано в Invoke-VanessaButton.ps1.

2. «Ошибок не было» ≠ операция прошла

На стенде без фискального регистратора оплата не завершается, если не снять флаг ФискализироватьОплату: чек записывается со всеми строками, но остаётся Проведен = Ложь, а Vanessa при этом рапортует «Ошибок не было». Всегда проверяйте результат запросом к БД, а не только по логу.

В любом сценарии продажи после «Оплата наличными»:

Тогда открылось окно "Оплата наличными"
И В открытой форме я изменяю флаг с именем "ФискализироватьОплату"
И В открытой форме я нажимаю на кнопку с именем "КомандаEnter"

3. SW_RESTORE ломает раскладку Manager

ShowWindow(hwnd, SW_RESTORE) схлопывает максимизированное окно в маленькое — кнопки уезжают за край и становятся некликабельными, при этом UI Automation продолжает отдавать их BoundingRectangle как валидный. Использовать SW_MAXIMIZE.

4. Первый запуск клиента после UpdateDBCfg может зависнуть

Признак: CPU процесса не растёт, память ~12 МБ, окно «Загрузка конфигурационной информации» висит. Лечится только принудительным завершением процесса и повторным стартом.

5. Заголовок окна берётся не оттуда, где ждёшь

  • Форма списка документа → заголовок из ExtendedListPresentation (не ListPresentation).
  • Отчёт → сокращённый заголовок формы (не Synonym).
  • Vanessa в тексте ошибки сама подсказывает: Заголовок активного окна: <...> и Возможная строка шаблона <...> — оттуда и копировать.

6. Объекты, недостижимые через командный интерфейс

Скрытые (Visibility=false) или объекты подчинённых подсистем не открываются шагом «В командном интерфейсе я выбираю». Их открывают напрямую:

Дано Я открываю основную форму списка документа "ИмяДокумента"
Дано Я открываю основную форму отчета "ИмяОтчета"

Полный список приёмов — в SKILL.md.

Использование как навыка Claude Code

git clone https://github.com/ostaninvladimir/vanessa-1c-cookbook
cp -r vanessa-1c-cookbook ~/.claude/skills/vanessa-1c

После этого в Claude Code доступна команда /vanessa-1c, и навык сам подхватывается на задачах вида «прогони сценарий», «напиши тест РМК», «разбери падение Vanessa». Параметры стенда (хост, база, учётные данные) — заполните под свой стенд в начале SKILL.md.

Совместимость

  • Проверено: платформа 1С 8.3.23, Vanessa Automation 1.2.043, тонкий клиент, конфигурация на управляемых формах («1С-Рейтинг Розница KZ»).
  • PowerShell 5.1+, Windows Server. UI Automation (UIAutomationClient) идёт в составе .NET Framework.
  • Приёмы не привязаны к конкретной конфигурации — специфичны только имена кнопок в примерах.

Вклад

Нашли ещё грабли или приём? PR и issue приветствуются. Особенно ценны находки по другим платформам 1С и версиям Vanessa.

Лицензия

MIT. Пользуйтесь, форкайте, применяйте в работе.