From 66e37fb8cc564bfb934d6a28684c87cc19e706f8 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 2 May 2026 15:55:14 +0300 Subject: [PATCH] =?UTF-8?q?feat(web-test):=20smoke-=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=2003-fillfields=20(text,=20dropdown,=20date,=20reference?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2 шага, 5 типов полей зелёные на синтетике webtest: - text (paste): Артикул на форме Номенклатура - dropdown (Да/Нет): Активен — Boolean рендерится как Да/Нет селектор - dropdown (EnumRef): ВидНоменклатуры - date (paste): ДатаПоступления - reference (dropdown CatalogRef): Контрагент в новой ПриходнаяНакладная NB: 1C рендерит Boolean-атрибут не как чекбокс, а как dropdown «Да/Нет» (actions: ["select"]) — fillFields правильно определяет это. Co-Authored-By: Claude Opus 4.7 (1M context) --- tests/web-test/03-fillfields.test.mjs | 54 +++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 tests/web-test/03-fillfields.test.mjs diff --git a/tests/web-test/03-fillfields.test.mjs b/tests/web-test/03-fillfields.test.mjs new file mode 100644 index 00000000..af86d90c --- /dev/null +++ b/tests/web-test/03-fillfields.test.mjs @@ -0,0 +1,54 @@ +export const name = 'fillFields: text, checkbox, date, dropdown, reference'; +export const tags = ['fillfields', 'smoke']; +export const timeout = 60000; + +const findField = (state, name) => state.fields?.find(f => f.name === name || f.label === name); + +export default async function({ navigateSection, openCommand, clickElement, fillFields, closeForm, getFormState, assert, step, log }) { + + await step('text+checkbox+date+dropdown: fillFields на Номенклатура', async () => { + await navigateSection('Склад'); + await openCommand('Номенклатура'); + await clickElement('Товары', { dblclick: true }); // войти в папку + await clickElement('Товар 01', { dblclick: true }); + + const result = await fillFields({ + 'Артикул': 'TEST-001', + 'Активен': 'Нет', // Boolean → "Да/Нет" dropdown в 1С + 'ДатаПоступления': '15.05.2026', // date + 'ВидНоменклатуры': 'Услуга', // EnumRef dropdown + }); + + log('methods: ' + result.filled.map(f => `${f.field}=${f.method}`).join(', ')); + for (const f of result.filled) { + assert.ok(f.ok, `fillField "${f.field}" должен вернуть ok=true`); + } + + const state = await getFormState(); + assert.equal(findField(state, 'Артикул')?.value, 'TEST-001', 'Артикул text'); + assert.equal(findField(state, 'Активен')?.value, 'Нет', 'Активен dropdown=Нет'); + assert.equal(findField(state, 'ДатаПоступления')?.value, '15.05.2026', 'ДатаПоступления'); + assert.equal(findField(state, 'ВидНоменклатуры')?.value, 'Услуга', 'ВидНоменклатуры dropdown'); + + await closeForm(); + }); + + await step('reference-dropdown: Контрагент → CatalogRef.Контрагенты в новой накладной', async () => { + await navigateSection('Склад'); + await openCommand('Приходная накладная'); + await clickElement('Создать'); + + const fillRes = await fillFields({ + 'Контрагент': 'ООО Север', + }); + log('reference method: ' + fillRes.filled[0]?.method); + assert.ok(fillRes.filled[0]?.ok, 'Контрагент fillField должен сработать'); + + const state = await getFormState(); + const contractor = findField(state, 'Контрагент'); + log(`Контрагент value='${contractor?.value}'`); + assert.includes(contractor?.value || '', 'Север', 'Контрагент должен показать выбранное значение'); + + await closeForm(); // close without save + }); +}