Files
cc-1c-skills/.claude/skills/web-test/scripts/dom.mjs
T
Nick ShirokovandClaude Opus 5 d0e81a1715 fix(web-test): состояние группы по контролу сворачивания, а не по вёрстке содержимого
На боевой форме вскрылись случаи, которые прежнее правило не покрывало. Замеры показали,
что любая эвристика «по первому сиблингу за заголовком» нежизнеспособна:

- служебная обёртка .logicGroupContainer пишется двумя способами (у таблицы
  <дочерний>#group_div, у вложенной группы <дочерний>_div) — знали только первый;
- display самой обёртки плавает: block до первого тогла, none после;
- первые узлы группы могут быть скрыты своей логикой, а видимое содержимое идёт дальше
  по цепочке — раскрытая группа читалась как свёрнутая, и постусловие роняло успешный клик.

Теперь состояние берётся из контрола сворачивания: у варианта «картинка» — кадр gx спрайта
hideshow у каретки (полярность обратна дереву в dom/grid.mjs), у варианта «гиперссылка»
каретки нет, там принадлежность по отступу — дети группы смещены глубже её заголовка,
свободный сосед стоит на уровне заголовка. База отсчёта — левый край блока заголовка
(каретка сдвигает текст вправо), обход ограничен: у последней свёрнутой группы границы за
ней нет, и первый видимый узел нашёлся через 107 сиблингов в чужой ветке формы.

Клик по заголовку группы теперь сперва скроллит цель в вид: цель кликается по координатам,
и ниже вьюпорта клик молча не доходил.

Ответ на клик отдаёт clicked.group (техническое имя) и clicked.title (текущий заголовок):
заголовок ключом быть не может — он повторяется между блоками формы и меняется при
раскрытии (CollapsedRepresentationTitle), после чего клик по прежнему тексту не находит
элемент. При смене заголовка hint говорит, чем кликать дальше.

Фикстура: вложенная группа первым ребёнком, «скрыт первый узел» в двух вариантах контрола,
группа с меняющимся заголовком в конце формы (уезжает за вьюпорт). Каждый кейс проверен на
красноту без своей правки.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-28 16:12:07 +03:00

98 lines
2.5 KiB
JavaScript

// web-test dom v1.20 — facade re-exporting injectable DOM scripts from dom/
// Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
/**
* Facade: re-exports DOM selector & semantic mapping script generators.
* Внутренности живут в dom/*. Публичный набор имён неизменен.
*
* All functions return JavaScript strings for page.evaluate().
* They produce clean semantic structures — no DOM IDs or CSS classes leak out.
* Only non-default property values are included to minimize response size.
*/
export {
detectFormScript,
closeCrossScript,
readFormScript,
findClickTargetScript,
scrollGroupIntoViewScript,
findFieldButtonScript,
resolveFieldsScript,
detectNewFormScript,
findSearchInputScript,
findNamedButtonScript,
findCompareTypeRadioScript,
isFormVisibleScript,
findPatternInputIdScript,
isTypeDialogScript,
isNotInListCloudVisibleScript,
clickShowAllInNotInListCloudScript,
findChildFormByButtonScript,
readTypeDialogVisibleRowsScript,
} from './dom/forms.mjs';
export {
findFirstGridCellCoordsScript,
findColumnFirstCellCoordsScript,
readFieldSelectorInfoScript,
pickFieldInSelectorDropdownScript,
readFilterDialogInfoScript,
findFilterBadgeCloseScript,
findFirstFilterBadgeCloseScript,
} from './dom/filter.mjs';
export {
isInputFocusedScript,
isInputFocusedInGridScript,
findOpenPopupScript,
} from './dom/edit-state.mjs';
export {
readEddScript,
isEddVisibleScript,
clickEddItemViaDispatchScript,
clickShowAllInEddScript,
} from './dom/edd.mjs';
export { getFormStateScript } from './dom/form-state.mjs';
export {
resolveGridScript,
readTableScript,
countGridRowsScript,
isTreeGridScript,
findGridHeadCenterCoordsScript,
getSelectedOrLastRowIndexScript,
findGridCellScript,
findFocusCellScript,
snapshotGridScript,
resolveCellTargetScript,
} from './dom/grid.mjs';
export {
sortFieldKeysByColindexScript,
findCellCoordsByFieldsScript,
findNextCellCoordsByKeyScript,
findCheckboxAtPointScript,
findRowCommitClickCoordsScript,
getGridEditCheckScript,
readActiveGridCellScript,
getElementCenterCoordsByIdScript,
} from './dom/grid-edit.mjs';
export {
readSectionsScript,
readTabsScript,
switchTabScript,
readCommandsScript,
navigateSectionScript,
openCommandScript,
} from './dom/nav.mjs';
export {
readSubmenuScript,
clickPopupItemScript,
readCloudDDScript,
} from './dom/submenu.mjs';
export { checkErrorsScript } from './dom/errors.mjs';