diff --git a/frontend/e2e/help-popover.spec.ts b/frontend/e2e/help-popover.spec.ts index bc0f77c8..4a6fcc06 100644 --- a/frontend/e2e/help-popover.spec.ts +++ b/frontend/e2e/help-popover.spec.ts @@ -8,21 +8,27 @@ test.describe('Help chip — Read/Edit panel header', () => { docId = await createEmptyDocument(request); }); + test.afterAll(async ({ request }) => { + await request.delete(`/api/documents/${docId}`); + }); + test('opens popover on click, closes on Esc, returns focus to chip', async ({ page }) => { await page.goto(`/documents/${docId}`); await page.getByRole('button', { name: 'Transkribieren' }).click(); - // Find and click the (?) help chip - const helpBtn = page.locator('button[aria-expanded]'); + // Use the accessible label of the HelpPopover trigger (transcription_mode_help_label) + const helpBtn = page.getByRole('button', { name: 'Lese- und Bearbeitungsmodus' }); await expect(helpBtn).toBeVisible({ timeout: 5000 }); await helpBtn.click(); - // Popover should open - await expect(page.locator('[role="tooltip"]')).toBeVisible(); + // Popover should open (role="region", not tooltip — click-triggered panels are regions) + await expect(page.getByRole('region', { name: 'Lese- und Bearbeitungsmodus' })).toBeVisible(); // Press Esc await page.keyboard.press('Escape'); - await expect(page.locator('[role="tooltip"]')).not.toBeVisible(); + await expect( + page.getByRole('region', { name: 'Lese- und Bearbeitungsmodus' }) + ).not.toBeVisible(); // Focus should have returned to the chip await expect(helpBtn).toBeFocused(); diff --git a/frontend/e2e/richtlinien.spec.ts b/frontend/e2e/richtlinien.spec.ts index 1b5e52ea..5012fd5d 100644 --- a/frontend/e2e/richtlinien.spec.ts +++ b/frontend/e2e/richtlinien.spec.ts @@ -63,6 +63,12 @@ test.describe('Richtlinien page — print media', () => { await expect(nav).toBeHidden(); } + // .new-tab annotation spans must be hidden in print so "(öffnet in neuem Tab)" + // text does not clutter the printed output (the print CSS declares display:none) + for (const span of await page.locator('.new-tab').all()) { + await expect(span).toBeHidden(); + } + await page.screenshot({ path: 'test-results/e2e/richtlinien-print.png', fullPage: true }); }); }); diff --git a/frontend/e2e/transcribe-coach.spec.ts b/frontend/e2e/transcribe-coach.spec.ts index b54c7215..7ff94f64 100644 --- a/frontend/e2e/transcribe-coach.spec.ts +++ b/frontend/e2e/transcribe-coach.spec.ts @@ -13,10 +13,13 @@ test.describe('Transcribe coach — empty state', () => { docId = await createEmptyDocument(request); }); + test.afterAll(async ({ request }) => { + await request.delete(`/api/documents/${docId}`); + }); + test('shows coach card (title, preamble, three step bodies, animation region)', async ({ page }) => { - await page.emulateMedia({ reducedMotion: 'reduce' }); await page.goto(`/documents/${docId}`); await page.getByRole('button', { name: 'Transkribieren' }).click(); @@ -31,14 +34,12 @@ test.describe('Transcribe coach — empty state', () => { }); test('training footer is NOT visible on empty doc', async ({ page }) => { - await page.emulateMedia({ reducedMotion: 'reduce' }); await page.goto(`/documents/${docId}`); await page.getByRole('button', { name: 'Transkribieren' }).click(); await expect(page.getByText('Für Training vormerken')).not.toBeVisible({ timeout: 3000 }); }); test('axe: panel empty state — light theme — no WCAG 2.1 AA violations', async ({ page }) => { - await page.emulateMedia({ reducedMotion: 'reduce' }); await page.goto(`/documents/${docId}`); await page.getByRole('button', { name: 'Transkribieren' }).click(); await expect(page.getByRole('heading', { level: 2, name: /Erste Transkription/ })).toBeVisible({ @@ -50,7 +51,6 @@ test.describe('Transcribe coach — empty state', () => { }); test('axe: panel empty state — dark theme — no WCAG 2.1 AA violations', async ({ page }) => { - await page.emulateMedia({ reducedMotion: 'reduce' }); await page.goto(`/documents/${docId}`); // Toggle dark theme await page.getByRole('button', { name: /Farbmodus|theme/i }).click();