From c174bcb1580085528ea97ee2c10720e3936574d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D0=B5=D0=BC?= Date: Wed, 5 Nov 2025 11:35:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D1=81=D0=BA?= =?UTF-8?q?=D1=80=D0=B8=D0=BF=D1=82=D0=B0=20=D0=91=D0=A1=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ example scripts/bsp.spec.js | 72 +++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 example scripts/bsp.spec.js diff --git a/README.md b/README.md index 721bcfb..4b96e8c 100644 --- a/README.md +++ b/README.md @@ -228,6 +228,8 @@ function randomString() { } ``` +другие примеры можно посмотреть в каталоге [example scripts](example%20scripts) + ### Рекомендации при редактировании сценариев 1. **Используйте `.pressSequentially()` вместо `.fill()`** — для элементов с автодополнением и валидацией diff --git a/example scripts/bsp.spec.js b/example scripts/bsp.spec.js new file mode 100644 index 0000000..1edee50 --- /dev/null +++ b/example scripts/bsp.spec.js @@ -0,0 +1,72 @@ +import { test, expect } from '@playwright/test'; + +test('test', async ({ page }) => { + await page.goto('http://localhost/bsp/ru_RU/'); + await page.locator('#userName').click(); + await page.locator('#userName').fill('Администратор'); + await page.locator('#userName').press('Tab'); + await page.locator('#userPassword').fill('123'); + await page.locator('#userPassword').press('Enter'); + + await page.locator('#themesCell_theme_3').getByText('Сервисные подсистемы').click(); + await page.locator('#cmd_0_6_txt').click(); + await page.locator('div:nth-child(4) > div:nth-child(2) > .gridBoxTitle').click(); + await page.getByText('АОЗТ Лабан').dblclick(); + await page.locator('[id="form5_ФормаЗаписатьИЗакрыть"]').click(); + await page.locator('[id="form4_ФормаСоздать"]').click(); + await page.getByRole('textbox', { name: 'Наименование:' }).click(); + + const name = randomString(); + await page.getByRole('textbox', { name: 'Наименование:' }).pressSequentially(name); + await page.getByRole('textbox', { name: 'Наименование полное:' }).click(); + await page.getByRole('textbox', { name: 'Наименование полное:' }).pressSequentially(randomString()); + await page.locator('[id="form6_Родитель_DLB"]').click(); + await page.getByText('Показать все').first().click(); + await page.locator('div:nth-child(2) > .gridBox.gridBoxTree > .gridBoxImg > div:nth-child(2)').click(); + await page.getByText('Демо: КонтрагентыБез партнера').click(); + await page.locator('[id="grid_form7_Список"]').getByText('Без партнера').click(); + await page.locator('[id="form7_ФормаВыбрать"]').click(); + await page.locator('a[id $= "ФормаЗаписатьИЗакрыть"]').click(); + // Содержит подстроку + // [id*="ФормаЗаписатьИЗакрыть"] + // Заканчивается на + // [id$="ФормаЗаписатьИЗакрыть"] + // Начинается с + // [id^="ФормаЗаписатьИЗакрыть"] + // Точное совпадение + // [id="form7_ФормаЗаписатьИЗакрыть"] + + await page.locator('[id="grid_form4_Список"]').getByText(name).click({ button: 'right' }); + await page.locator('#popupItem4').getByText('Пометить на удаление / Снять пометку').click(); + await page.locator('[id^="form"][id$="_Button0"] a').filter({ hasText: 'Да' }).click(); + await page.locator('#themesCell_theme_5').getByText('Интегрируемые').click(); + await page.locator('#cmd_0_6_txt').click(); + + // клик по строке в списке + page.locator('div.gridLine').last().dblclick(); + + await page.locator('a[id^="form"][id$="_ФормаПровестиИЗакрыть"]').click(); + await page.locator('a[id^="form"][id$="_ФормаСоздать"]').last().click(); + await page.locator('[id^="form"][id$="_Организация_DLB"]').click(); + await page.getByText('Показать все').first().click(); + await page.locator('[id^="grid_form"][id$="_Список"]').last().getByText('Перспектива ЗАО').dblclick(); + await page.getByRole('textbox', { name: 'Сумма документа: Выбрать (F4)' }).click(); + await page.getByRole('textbox', { name: 'Сумма документа: Выбрать (F4)' }).pressSequentially("1"); + await page.locator('[id^="form"][id$="_Партнер_DLB"]').click(); + await page.getByText('Показать все').first().click(); + await page.locator('[id^="grid_form"][id$="_Список"]').last().getByText('ООО "Альфа"').dblclick(); + + const elems = await page.locator('[id$="_ФормаПровестиИЗакрыть"]').elementHandles(); + for (const btn of elems) { + const id = await btn.evaluate(el => el.id); + if (/^form\d+_ФормаПровестиИЗакрыть$/.test(id)) { + await btn.click(); + break; // кликнули первый подходящий + } + } + +}); + +function randomString() { + return Math.random().toString(36).substring(2, 10); +} \ No newline at end of file