Описание
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-
UpdateDBCfgclient 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. Пользуйтесь, форкайте, применяйте в работе.