From 52bf171ec43057a8d77cd94ee3068eb49c1a46e8 Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Sat, 10 Jan 2026 11:54:11 +0100 Subject: [PATCH] fix(e2e): fix keyboard shortcut delete test and reduce sync test flakiness - Click on .drag-handle instead of task element to properly focus task without triggering title edit mode (which would block keyboard shortcuts) - Verify WebDAV form fields appear after selection before proceeding - Add clear error message when WebDAV selection fails after retries --- e2e/pages/sync.page.ts | 21 ++++++++++++++++--- .../task-delete-confirmation.spec.ts | 6 ++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/e2e/pages/sync.page.ts b/e2e/pages/sync.page.ts index 45881adb2..3e54d3b34 100644 --- a/e2e/pages/sync.page.ts +++ b/e2e/pages/sync.page.ts @@ -74,6 +74,7 @@ export class SyncPage extends BasePage { // Use the existing providerSelect locator which targets the mat-select directly const selectElement = this.providerSelect; + let webdavSelected = false; for (let attempt = 0; attempt < 5; attempt++) { // Ensure the select is in view await selectElement.scrollIntoViewIfNeeded({ timeout: 5000 }).catch(async () => { @@ -121,9 +122,16 @@ export class SyncPage extends BasePage { if (webdavVisible) { await webdavOption.click(); - // Wait for dropdown to close and form to update - await this.page.waitForTimeout(500); - break; + // Wait for dropdown to close and verify form fields appeared + const formAppeared = await this.baseUrlInput + .waitFor({ state: 'visible', timeout: 3000 }) + .then(() => true) + .catch(() => false); + if (formAppeared) { + webdavSelected = true; + break; + } + // Form didn't appear, retry selection } } @@ -132,6 +140,13 @@ export class SyncPage extends BasePage { await this.page.waitForTimeout(500); } + // Verify WebDAV was selected before proceeding + if (!webdavSelected) { + throw new Error( + 'Failed to select WebDAV option after 5 attempts. Check if the dropdown is properly rendered.', + ); + } + // Wait for form fields to be visible before filling await this.baseUrlInput.waitFor({ state: 'visible', timeout: 10000 }); diff --git a/e2e/tests/task-basic/task-delete-confirmation.spec.ts b/e2e/tests/task-basic/task-delete-confirmation.spec.ts index ed247e6d7..1008c8b63 100644 --- a/e2e/tests/task-basic/task-delete-confirmation.spec.ts +++ b/e2e/tests/task-basic/task-delete-confirmation.spec.ts @@ -87,8 +87,10 @@ test.describe('Task Delete Confirmation', () => { await workViewPage.addTask('Task to delete with keyboard'); await expect(page.locator('task')).toHaveCount(1); - // Focus the task - await page.locator('task').first().click(); + // Focus the task by clicking on drag-handle (not task-title which would open edit mode) + const task = page.locator('task').first(); + await task.locator('.drag-handle').click(); + await expect(task).toBeFocused(); // Act: Press Backspace (default delete shortcut) await page.keyboard.press('Backspace');