From 89b109ab04a696780336e12581a0e3bf7f3d0c66 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 29 May 2026 15:54:42 +0300 Subject: [PATCH] =?UTF-8?q?test(web-test):=20=D0=BF=D0=BE=D0=BA=D1=80?= =?UTF-8?q?=D1=8B=D1=82=D1=8C=20reveal-loop=20=D0=B8=20hasMore=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8=D1=87=D0=B5=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 3 новых шага в 18-cell-click на группе БольшойСписок (60 элементов) справочника Номенклатура: - dyn-list setup — вход в группу, проверка hasMore = {above:false, below:true} (определяется через turn-кнопки vertButtonScroll, не через scrollbar табчасти) - dyn-list reveal — clickElement({row:{filter}}, {scroll:true}) на дин-списке, находит Позиция 055 через PageDown loop; после прокрутки above=true - dyn-list cleanup Раньше reveal-loop и hasMore проверялись только на табчасти LongDoc; теперь покрыт и второй тип виртуализированного грида. Co-Authored-By: Claude Opus 4.8 --- tests/web-test/18-cell-click.test.mjs | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/web-test/18-cell-click.test.mjs b/tests/web-test/18-cell-click.test.mjs index d52c318d..c69eb5e5 100644 --- a/tests/web-test/18-cell-click.test.mjs +++ b/tests/web-test/18-cell-click.test.mjs @@ -213,4 +213,37 @@ export default async function({ await step('cleanup: close LongDoc', async () => { await closeForm({ save: false }); }); + + // ── Dynamic list (not tabular section): hasMore.above/below + reveal-loop ── + // Группа БольшойСписок справочника Номенклатура содержит 60 элементов — + // заведомо больше окна виртуализации. В отличие от табчасти LongDoc, это + // ДИНАМИЧЕСКИЙ список: hasMore определяется через turn-кнопки vertButtonScroll. + await step('dyn-list setup: открыть Номенклатуру, развернуть БольшойСписок', async () => { + await navigateSection('Склад'); + await openCommand('Номенклатура'); + await clickElement('БольшойСписок', { dblclick: true }); + await wait(1); + const t = await readTable(); + log(`БольшойСписок: shown=${t.shown} hasMore=${JSON.stringify(t.hasMore)}`); + // Зашли в группу — наверху списка, сверху ничего, снизу есть (60 > окна). + assert.equal(t.hasMore?.above, false, 'в начале списка above=false'); + assert.equal(t.hasMore?.below, true, '60 элементов > окна → below=true'); + }); + + await step('dyn-list reveal: scroll:true находит Позиция 055 в длинном дин-списке', async () => { + const res = await clickElement( + { row: { 'Наименование': 'Позиция 055' }, column: 'Наименование' }, + { scroll: true } + ); + log(`reveal clicked: ${JSON.stringify(res.clicked)}`); + assert.equal(res.clicked?.kind, 'gridCell', 'reveal-loop на дин-списке нашёл строку'); + // После прокрутки к концовой части списка сверху уже есть скрытые строки. + const t = await readTable(); + log(`after reveal: hasMore=${JSON.stringify(t.hasMore)}`); + assert.equal(t.hasMore?.above, true, 'после прокрутки вниз above=true'); + }); + + await step('dyn-list cleanup: закрыть список', async () => { + await closeForm(); + }); }