From 82ee4a9fce1aeeb02e1c5c4afaeab79daae37e00 Mon Sep 17 00:00:00 2001 From: Declan Carroll Date: Mon, 20 Apr 2026 14:06:41 +0200 Subject: [PATCH] ci: Strengthen Playwright test resilience (#28687) --- packages/testing/playwright/pages/CanvasPage.ts | 4 +++- .../playwright/pages/components/InstanceAiSidebar.ts | 2 +- .../tests/e2e/workflows/editor/expressions/mapping.spec.ts | 2 +- .../tests/e2e/workflows/editor/ndv/pinning.spec.ts | 6 +++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/testing/playwright/pages/CanvasPage.ts b/packages/testing/playwright/pages/CanvasPage.ts index 3f7e0d43cb7..5c52789d825 100644 --- a/packages/testing/playwright/pages/CanvasPage.ts +++ b/packages/testing/playwright/pages/CanvasPage.ts @@ -560,7 +560,9 @@ export class CanvasPage extends BasePage { async executeNode(nodeName: string): Promise { await this.nodeByName(nodeName).hover(); - await this.nodeExecuteButton(nodeName).click(); + const button = this.nodeExecuteButton(nodeName); + await expect(button).toBeVisible(); + await button.click(); } async selectAll(): Promise { diff --git a/packages/testing/playwright/pages/components/InstanceAiSidebar.ts b/packages/testing/playwright/pages/components/InstanceAiSidebar.ts index 80bbfdd95de..2b55b2f3fa1 100644 --- a/packages/testing/playwright/pages/components/InstanceAiSidebar.ts +++ b/packages/testing/playwright/pages/components/InstanceAiSidebar.ts @@ -24,6 +24,6 @@ export class InstanceAiSidebar { } getDeleteMenuItem(): Locator { - return this.root.page().getByText('Delete', { exact: true }).first(); + return this.root.page().getByRole('menuitem').filter({ hasText: 'Delete' }); } } diff --git a/packages/testing/playwright/tests/e2e/workflows/editor/expressions/mapping.spec.ts b/packages/testing/playwright/tests/e2e/workflows/editor/expressions/mapping.spec.ts index b09e0845084..49c40dfabf1 100644 --- a/packages/testing/playwright/tests/e2e/workflows/editor/expressions/mapping.spec.ts +++ b/packages/testing/playwright/tests/e2e/workflows/editor/expressions/mapping.spec.ts @@ -265,7 +265,7 @@ test.describe( ); }); - test('maps expressions to updated fields correctly @fixme', async ({ n8n }) => { + test.fixme('maps expressions to updated fields correctly', async ({ n8n }) => { await n8n.start.fromImportedWorkflow('schedule-trigger-with-set-nodes.json'); await n8n.canvas.openNode('Set'); diff --git a/packages/testing/playwright/tests/e2e/workflows/editor/ndv/pinning.spec.ts b/packages/testing/playwright/tests/e2e/workflows/editor/ndv/pinning.spec.ts index 1bf45006233..55e40b738f9 100644 --- a/packages/testing/playwright/tests/e2e/workflows/editor/ndv/pinning.spec.ts +++ b/packages/testing/playwright/tests/e2e/workflows/editor/ndv/pinning.spec.ts @@ -179,10 +179,10 @@ test.describe( await expressionInput.click(); await n8n.ndv.clearExpressionEditor(); await n8n.ndv.typeInExpressionEditor(`{{ $('${NODES.HTTP_REQUEST}').item`); - await n8n.page.keyboard.press('Escape'); - const expectedOutput = '[Object: {"json": {"http": 123}, "pairedItem": {"item": 0}}]'; - await expect(n8n.ndv.getParameterInputHintWithText(expectedOutput)).toBeVisible(); + const hint = n8n.ndv.getParameterInputHint(); + await expect(hint).toContainText('"http": 123'); + await expect(hint).toContainText('pairedItem'); }); test('should use pin data in manual webhook executions', async ({