mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-10 16:14:54 +03:00
f424d2ac70
clickElement как последний fallback (без table) фокусирует одноимённое
поле ввода, не меняя значение — возвращает focused:{field,id,ok}.
Закрывает пробел: клавиши F4/Shift+F4 требовали сфокусированного поля,
но штатного примитива фокуса не было.
- dom/forms.mjs: резолв input.editInput/textarea по имени/заголовку
последним шагом findClickTargetScript; имена полей в available
- click-form.mjs: focusFormField (клик по инпуту + isInputFocused → ok)
- click.mjs: ветка диспетчера kind === field
- SKILL.md + docs/web-test-guide.md: focused в extras, пример focus→F4
- tests: 19-focus-field.test.mjs (focus/F4/регресс/негатив)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Регресс-тесты web-test
E2E-тесты движка web-test (Playwright + изолированная синтетическая БД 1С), запускаются через node .claude/skills/web-test/scripts/run.mjs test.
Запуск
# Полный регресс (все 21 тестов)
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/
# Один файл
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/02-crud.test.mjs
# Несколько по фильтру тегов
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ --tags=table,smoke
# По regex имени теста
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ --grep=multi
URL не указываем — берётся из webtest.config.mjs (contexts.a.url = http://localhost:9191/webtest-runner/ru_RU).
Exit code: 0 = все прошли, 1 = есть падения.
CLI флаги runner'а
| Флаг | Описание |
|---|---|
--tags=A,B |
Запустить только тесты с одним из тегов |
--grep=regex |
Фильтр по имени теста |
--bail |
Остановиться на первой ошибке |
--retry=N |
Перепрогон упавших тестов N раз |
--timeout=ms |
Таймаут одного теста (default 30000) |
--report=path |
Сохранить отчёт в файл |
--format=json|allure|junit |
Формат отчёта |
--report-dir=path |
Корень для Allure/JUnit артефактов |
--screenshot=on-failure|every-step|off |
Когда снимать скриншоты |
--record |
Включить запись MP4 (CDP screencast → ffmpeg) |
Опции стенда (после --)
_hooks.mjs поднимает изолированный стенд (Apache на :9191, своя БД, отдельный набор EPF). По умолчанию работает в smart-режиме: пересборка только когда поменялся config-hash / epf-hash. Принудительно — через флаги после --:
# Принудительно пересобрать XML + БД + EPF
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ -- --rebuild-stand
# Точечно — только пересобрать БД из существующего XML (свежая синтетика)
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ -- --reload-data
# Только пересобрать XML (когда хочется новой конфигурации)
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ -- --rebuild-config
# Только EPF (внешние обработки для openFile)
node .claude/skills/web-test/scripts/run.mjs test tests/web-test/ -- --rebuild-epf
| Флаг | Что делает |
|---|---|
--rebuild-stand |
Эквивалент всех трёх ниже |
--rebuild-config |
XML-исходники + БД |
--reload-data |
Только БД (drop+create+load+update) |
--rebuild-epf |
Только EPF-обработки |
Когда пересобирать стенд
Warm-старт (~200 ms): lockfile + probe Apache, БД жива, EPF на диске — ничего не делаем.
Триггеры авто-пересборки (без флагов):
- Изменился
config-hashсинтетической XML — пересобирается конфигурация + БД. - Изменился
epf-hashисходников EPF — пересобираются EPF.
Когда нужен --rebuild-stand вручную:
- БД накопила «мусорных» данных от write-сценариев.
15-multi-context-handoverсоздаёт нового Контрагента каждый прогон с unique-именем — со временем02-crudначнёт падать (КонтрагентООО Северуезжает заmaxRows=20). - Подозрение что Apache держит зависший процесс —
--rebuild-standделаетweb-stop+web-publish.
Конфигурация
tests/web-test/webtest.config.mjs задаёт:
contexts.a/contexts.b— два независимых 1C-сеанса (разные cookies) на той же URL. Тесты сmulti-contextтегом используют оба.defaultContext: 'a'— большинство тестов работают в одном контексте.isolation: 'tab'— вкладки в одном окне (default). Альтернатива'window'— отдельный BrowserContext (полная изоляция cookies).
Env переменные
| Переменная | Значение |
|---|---|
WEB_TEST_PRESERVE_CLIPBOARD=0 |
Отключить save/restore буфера обмена вокруг pasteText |
WEBTEST_HOOKS_RUNTIME=python |
Использовать py-версии скиллов вместо ps1 (для не-Windows) |
Артефакты
tests/web-test/error-*.png— скриншоты упавших шагов (auto на--screenshot=on-failure)tests/web-test/_allure/— Allure-результаты (на--format=allure)tests/skills/.cache/webtest-stand/— lockfiles стенда (config-hash, epf-hash, data-hash)
Известные нюансы
15-multi-context-handoverсоздаётunique-Контрагента и сохраняет — за серию прогонов накапливаются «лишние» записи. Если02-crudначал падать на «ООО Севердолжен быть в списке» — это симптом, лечится-- --rebuild-stand.04-selectvalueauto-history шаг — в изоляции делает warm-up через двойнойselectValue('Менеджер', 'ООО Юг')чтобы наполнить history, иначе первый вызов идёт черезmethod:form, а тест ожидаетmethod:dropdown. Не зависит от других файлов.- Скриншот ошибки только на последнем падении —
--screenshot=on-failure(default) делает один кадр в момент исключения. Для full-trace используй--screenshot=every-step.