From eb9b7a02c5638e87a6c8c065568584b7e6b9f006 Mon Sep 17 00:00:00 2001 From: Nikita_Vozisov Date: Fri, 8 Sep 2023 16:31:18 +0300 Subject: [PATCH] =?UTF-8?q?=20#3208=20=E2=80=93=20fix=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../R-group-tool/r-group-label-dialog.spec.ts | 54 ++++++++++++++----- .../tests/utils/canvas/helpers.ts | 4 +- .../tests/utils/common/helpers.ts | 2 + .../utils/common/loaders/waitForRender.ts | 6 +-- .../tests/utils/files/readFile.ts | 5 +- 5 files changed, 52 insertions(+), 19 deletions(-) create mode 100644 ketcher-autotests/tests/utils/common/helpers.ts diff --git a/ketcher-autotests/tests/Structure-Creating-&-Editing/Actions-With-Structures/R-group-tool/r-group-label-dialog.spec.ts b/ketcher-autotests/tests/Structure-Creating-&-Editing/Actions-With-Structures/R-group-tool/r-group-label-dialog.spec.ts index b09d7be379..c5a31d1352 100644 --- a/ketcher-autotests/tests/Structure-Creating-&-Editing/Actions-With-Structures/R-group-tool/r-group-label-dialog.spec.ts +++ b/ketcher-autotests/tests/Structure-Creating-&-Editing/Actions-With-Structures/R-group-tool/r-group-label-dialog.spec.ts @@ -20,6 +20,7 @@ import { BondTypeName, selectBond, waitForPageInit, + waitForRender, } from '@utils'; import { getAtomByIndex } from '@utils/canvas/atoms'; import { getRxn, getSmiles } from '@utils/formats'; @@ -66,7 +67,9 @@ test.describe('R-Group Label Tool', () => { const { x, y } = await getCoordinatesTopAtomOfBenzeneRing(page); await page.mouse.click(x, y); await pressButton(page, 'R5'); - await pressButton(page, 'Apply'); + await waitForRender(page, async () => { + await pressButton(page, 'Apply'); + }); }); test('Multiple R-Group label', async ({ page }) => { @@ -83,7 +86,9 @@ test.describe('R-Group Label Tool', () => { await pressButton(page, 'R4'); await pressButton(page, 'R5'); await pressButton(page, 'R6'); - await pressButton(page, 'Apply'); + await waitForRender(page, async () => { + await pressButton(page, 'Apply'); + }); }); test('Delete R-Group label using Erase tool', async ({ page }) => { @@ -101,7 +106,9 @@ test.describe('R-Group Label Tool', () => { await pressButton(page, 'Apply'); await selectLeftPanelButton(LeftPanelButton.Erase, page); - await page.getByText('R5').click(); + await waitForRender(page, async () => { + await page.getByText('R5').click(); + }); }); test('Edit R-Group label', async ({ page }) => { @@ -121,7 +128,9 @@ test.describe('R-Group Label Tool', () => { await page.getByText('R5').click(); await pressButton(page, 'R5'); await pressButton(page, 'R8'); - await pressButton(page, 'Apply'); + await waitForRender(page, async () => { + await pressButton(page, 'Apply'); + }); }); test('Create S-Group with R-Group', async ({ page }) => { @@ -148,7 +157,9 @@ test.describe('R-Group Label Tool', () => { point = await getAtomByIndex(page, { label: 'C' }, 2); await page.mouse.click(point.x, point.y); await pressButton(page, 'R5'); - await pressButton(page, 'Apply'); + await waitForRender(page, async () => { + await pressButton(page, 'Apply'); + }); }); test('Rotate R-group', async ({ page }) => { @@ -166,7 +177,9 @@ test.describe('R-Group Label Tool', () => { await pressButton(page, 'Apply'); await page.keyboard.press('Control+a'); - await pressButton(page, 'Vertical Flip (Alt+V)'); + await waitForRender(page, async () => { + await pressButton(page, 'Vertical Flip (Alt+V)'); + }); }); test('Undo-Redo with R-group label', async ({ page }) => { @@ -188,9 +201,13 @@ test.describe('R-Group Label Tool', () => { await pressButton(page, 'R7'); await pressButton(page, 'R8'); await pressButton(page, 'Apply'); - await selectTopPanelButton(TopPanelButton.Undo, page); + await waitForRender(page, async () => { + await selectTopPanelButton(TopPanelButton.Undo, page); + }); await takeEditorScreenshot(page); - await selectTopPanelButton(TopPanelButton.Redo, page); + await waitForRender(page, async () => { + await selectTopPanelButton(TopPanelButton.Redo, page); + }); }); test('Create the same R-Group label as existing', async ({ page }) => { @@ -213,7 +230,10 @@ test.describe('R-Group Label Tool', () => { point = await getAtomByIndex(page, { label: 'C' }, 2); await page.mouse.click(point.x, point.y); await pressButton(page, 'R5'); - await pressButton(page, 'Apply'); + + await waitForRender(page, async () => { + await pressButton(page, 'Apply'); + }); }); test('Zoom In/Zoom Out', async ({ page }) => { @@ -232,13 +252,17 @@ test.describe('R-Group Label Tool', () => { // eslint-disable-next-line no-magic-numbers for (let i = 0; i < 5; i++) { - await page.keyboard.press('Control+_'); + await waitForRender(page, async () => { + await page.keyboard.press('Control+_'); + }); } await takeEditorScreenshot(page); // eslint-disable-next-line no-magic-numbers for (let i = 0; i < 5; i++) { - await page.keyboard.press('Control+='); + await waitForRender(page, async () => { + await page.keyboard.press('Control+='); + }); } }); @@ -258,7 +282,9 @@ test.describe('R-Group Label Tool', () => { await selectLeftPanelButton(LeftPanelButton.RectangleSelection, page); await page.getByText('R5').click(); - await page.keyboard.press('Delete'); + await waitForRender(page, async () => { + await page.keyboard.press('Delete'); + }); }); test('Move Structure with R-Group label', async ({ page }) => { @@ -365,7 +391,9 @@ test.describe('R-Group Label Tool', () => { await selectLeftPanelButton(LeftPanelButton.ChargePlus, page); await page.getByText('R8').click(); await selectLeftPanelButton(LeftPanelButton.ChargeMinus, page); - await page.getByText('R13').click(); + await waitForRender(page, async () => { + await page.getByText('R13').click(); + }); }); test('Add Bond to the R-Group Label', async ({ page }) => { diff --git a/ketcher-autotests/tests/utils/canvas/helpers.ts b/ketcher-autotests/tests/utils/canvas/helpers.ts index f7327ceb0a..a01eac909f 100644 --- a/ketcher-autotests/tests/utils/canvas/helpers.ts +++ b/ketcher-autotests/tests/utils/canvas/helpers.ts @@ -9,6 +9,7 @@ import { ELEMENT_TITLE } from './types'; import { DELAY_IN_SECONDS, TopPanelButton, waitForRender } from '..'; import { selectTopPanelButton } from './tools'; import { getLeftTopBarSize } from './common/getLeftTopBarSize'; +import { emptyFunction } from '@utils/common/helpers'; export async function drawBenzeneRing(page: Page) { await page.getByRole('button', { name: 'Benzene (T)' }).click(); @@ -80,8 +81,9 @@ export async function takeEditorScreenshot( page: Page, options?: { masks?: Locator[] }, ) { + const maxTimeout = 3000; const editor = page.getByTestId('ketcher-canvas').first(); - await waitForRender(page); + await waitForRender(page, emptyFunction, maxTimeout); await expect(editor).toHaveScreenshot({ mask: options?.masks }); } diff --git a/ketcher-autotests/tests/utils/common/helpers.ts b/ketcher-autotests/tests/utils/common/helpers.ts new file mode 100644 index 0000000000..a3b31c372c --- /dev/null +++ b/ketcher-autotests/tests/utils/common/helpers.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line @typescript-eslint/no-empty-function +export async function emptyFunction() {} diff --git a/ketcher-autotests/tests/utils/common/loaders/waitForRender.ts b/ketcher-autotests/tests/utils/common/loaders/waitForRender.ts index 15ffdc357b..1d10f325e8 100644 --- a/ketcher-autotests/tests/utils/common/loaders/waitForRender.ts +++ b/ketcher-autotests/tests/utils/common/loaders/waitForRender.ts @@ -1,13 +1,11 @@ import { Page } from '@playwright/test'; type AnyFunction = (...args: any) => Promise; -// eslint-disable-next-line @typescript-eslint/no-empty-function -const emptyFunction: AnyFunction = async () => {}; export const waitForRender = async ( page: Page, - callback = emptyFunction, - timeout = 3000, + callback: AnyFunction, + timeout?: number, ) => { await Promise.all([ waitForCustomEvent(page, 'renderComplete', timeout), diff --git a/ketcher-autotests/tests/utils/files/readFile.ts b/ketcher-autotests/tests/utils/files/readFile.ts index 434dd5b893..32d2cf4705 100644 --- a/ketcher-autotests/tests/utils/files/readFile.ts +++ b/ketcher-autotests/tests/utils/files/readFile.ts @@ -9,6 +9,7 @@ import { waitForLoad, delay, takeEditorScreenshot, + waitForRender, } from '@utils'; import { MolfileFormat } from 'ketcher-core'; import { getSmiles, getInchi } from '@utils/formats'; @@ -40,7 +41,9 @@ export async function openFileAndAddToCanvas(filename: string, page: Page) { await waitForLoad(page, async () => { await pressButton(page, 'Add to Canvas'); }); - await clickInTheMiddleOfTheScreen(page); + await waitForRender(page, async () => { + await clickInTheMiddleOfTheScreen(page); + }); } export async function pasteFromClipboardAndAddToCanvas(