feat(web-test): сохранять и восстанавливать буфер обмена вокруг паст

Тесты активно используют OS clipboard (`writeText` + Ctrl+V — единственный
способ добиться trusted-paste для autocomplete справочников и кириллицы).
При локальном запуске это перетирало пользовательский буфер. Теперь:

- `pasteText(text, {confirm, postDelay})` в browser.mjs делает узкое окно
  save → writeText → confirm-key → restore вокруг каждой пасты (~ms).
- Save/restore через `navigator.clipboard.read()`/`write()` — все MIME
  (текст, картинка, HTML), blob'ы стэшатся на `window` без CDP-сериализации.
- 14 callsites переведены на helper.
- При failure save'а (CF_HDROP из Проводника не виден через web-API) restore
  явно очищает буфер, чтобы тестовое значение не протекало.
- Опт-аут: CLI `--no-preserve-clipboard`, env `WEB_TEST_PRESERVE_CLIPBOARD=0`,
  `preserveClipboard: false` в `webtest.config.mjs`.

Регресс tests/web-test — 6 прогонов 19/19 passed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-25 20:12:14 +03:00
parent 60cdbf0aec
commit bb2f8fb29e
4 changed files with 131 additions and 34 deletions
+6
View File
@@ -21,6 +21,12 @@ export default {
// extension may not load (Playwright limitation). Use only when really needed.
timeout: 60000,
// OS clipboard preservation: default `true`. Around every action call the engine
// saves the full clipboard contents (any MIME types via `navigator.clipboard.read()`)
// and restores them after, so a local user can copy/paste in parallel with a test run.
// Set to `false` to disable for this suite. CLI flag `--no-preserve-clipboard` overrides.
preserveClipboard: true,
// Allure severity policy: inverted map "уровень → теги, попадающие в этот уровень".
// Резолв (run.mjs:resolveSeverity):
// 1. explicit `export const severity` в тесте — выигрывает всегда;