Files
cc-1c-skills/.claude/skills/web-test/scripts/dom.mjs
T
Nick ShirokovandClaude Opus 4.8 7696a8b3ee fix(web-test): единая модель колонок грида — colindex первым, геометрия запасной
Резолверов колонок было пять, все независимые, и каждый ломался по-своему:
readTable (геометрия X + Y-подряды), clickElement (геометрия X, без Y),
поиск строки {кол: знач} (геометрия X, без Y и fixed-гарда), filterList
(порядковый индекс шапки), fillTableRow (colindex — единственный целый).

Механика поломки (снята живьём на списке задач ERP): шапка «Исполнитель»
широкая (x 1085..1515) и накрывает «Срок» (1085..1251) и «Выполнена»
(1251..1515). Ячейка «Исполнитель» имеет центр 1300 → приписывается к группе
«Выполнена» → та получает лишний под-ряд → срабатывает эвристика «объединённая
шапка» → фантомные «Выполнена 1/2», а значения соседей склеиваются через ' / '.

Теперь COLUMN_MODEL_FN (dom/_shared.mjs) — единственный источник правды:
buildColumnModel / columnForCell / cellForColumn / resolveColumnByName. Идентичность
колонки — colindex (собственный id колонки в 1С, есть и на шапке, и на ячейке);
геометрия работает только там, где своей шапки у ячейки нет — под-ряды
объединённой шапки («Субконто Дт» над тремя ячейками). Путь записи пришёл к этому
решению раньше (grid-edit.mjs: «reliable across merged headers») — остальные
выровнены по нему.

Следствие: имя колонки из readTable теперь годится для клика/заполнения/фильтра —
раньше readTable отдавал «Субконто Дт 2», а клик про такое имя не знал.

Попутно закрыт второй дефект: безымянная picture-колонка определялась по ПЕРВОЙ
строке, а picField над Boolean не рисует картинку при Ложь → колонка пропадала из
columns целиком. Модель сэмплит до 10 строк и ищет ячейку по colindex.

Проверено:
- 24-multirow-header (стенд, оба паттерна ERP) — зелёный; до правки красный;
- клик проверяется по факту (DOM select+focus), а не по эху clicked.column:
  до правки клик по «Срок» молча жал «Исполнитель 2» и рапортовал успех;
- живьём на ERP: список задач — 9 честных колонок вместо фантомов, значения на
  местах; форма операции (шапка 2 этажа, строка 3 под-ряда) — «Субконто Дт/Кт 1..3»
  сохранены, ничего не поехало;
- полный регресс 28/28.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 16:14:27 +03:00

97 lines
2.4 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,
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';