From ba27f2218f99a14e008268bef7bae64cb40119f1 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 27 Jul 2026 20:54:23 +0300 Subject: [PATCH] =?UTF-8?q?fix(web-test):=20=D1=84=D0=B0=D0=BA=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20=D1=81=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D1=8F=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B2=D1=91=D1=80=D0=BD?= =?UTF-8?q?=D1=83=D1=82=D0=BE=D0=B9=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=D1=8B?= =?UTF-8?q?=20=D0=B8=20=D0=BF=D0=BE=D0=BF=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BA=D0=BB=D0=B8=D0=BA=D0=B0=20=D0=BF=D0=BE=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Группа, содержимое которой — таблица, отдавала collapsed:false в обоих состояниях, а свернуть её обратно было нельзя. Два независимых дефекта: 1. Первым сиблингом за #title_div платформа кладёт пустую служебную обёртку <дочерний>#group_div.logicGroupContainer (display:block, height:0), а контент идёт дальше по сиблингам — внутри обёртки его нет. Чтение display первого сиблинга давало collapsed:false и свёрнутой, и развёрнутой группе. 2. #title_text растягивается по ширине содержимого (173px свёрнута → 1295px развёрнута), кликабелен только вложенный label шириной по тексту. Клик в геометрический центр попадал в пустоту: раскрыть удавалось, свернуть — нет. GROUP_STATE_FN обходит сиблинги по id-префиксу обёртки (префикс обрывает обход на чужих узлах — свободный элемент между группами по-прежнему не путает определение). TEXT_CLICK_POINT_FN целится во вложенный текст с клампом влево, как rowClickPoint. Обе — общие для getFormState().groups[] и резолвера цели клика. Клик по заголовку, не изменивший состояние, теперь бросает ошибку вместо toggled:true — идемпотентность {expand} не затронута, при нечитаемом collapsed проверка пропускается. Фикстура: свёрнутая группа с таблицей (прежние содержали только декорации, поэтому регресс был зелёным) и растянутая гиперссылка с Сообщить в обработчике — у декораций промаха нет, их внутренний узел тянется вместе с контейнером. Co-Authored-By: Claude Opus 5 (1M context) --- .../skills/web-test/scripts/dom/_shared.mjs | 88 ++++++++++++++++--- .claude/skills/web-test/scripts/dom/forms.mjs | 31 ++++--- .../scripts/engine/forms/click-group.mjs | 16 +++- .../integration/build-webtest-config.test.mjs | 46 ++++++++++ tests/web-test/25-decoration-form.test.mjs | 46 ++++++++++ 5 files changed, 201 insertions(+), 26 deletions(-) diff --git a/.claude/skills/web-test/scripts/dom/_shared.mjs b/.claude/skills/web-test/scripts/dom/_shared.mjs index 3cc49528..ea081385 100644 --- a/.claude/skills/web-test/scripts/dom/_shared.mjs +++ b/.claude/skills/web-test/scripts/dom/_shared.mjs @@ -1,4 +1,4 @@ -// web-test dom shared v1.7 — embedded JS function constants +// web-test dom shared v1.8 — embedded JS function constants // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills /** * Shared function strings embedded into page.evaluate() generators. @@ -43,6 +43,74 @@ export const ROW_CLICK_POINT_FN = `function rowClickPoint(line, body) { return { x: Math.round(pick.r.x + Math.min(pick.r.width / 2, 60)), y: Math.round(pick.r.y + pick.r.height / 2) }; }`; +/** + * Click point inside a stretched text container (group title, hyperlink decoration) — + * NOT the container's centre. + * + * `#title_text` is a flex box; the clickable thing is the nested + * `