test(e2e): fix locators, add print assertion, cleanup, remove redundant emulateMedia
Some checks failed
CI / Unit & Component Tests (push) Failing after 2m51s
CI / OCR Service Tests (push) Successful in 38s
CI / Backend Unit Tests (push) Failing after 2m55s
CI / Unit & Component Tests (pull_request) Failing after 2m50s
CI / OCR Service Tests (pull_request) Successful in 34s
CI / Backend Unit Tests (pull_request) Failing after 2m54s
Some checks failed
CI / Unit & Component Tests (push) Failing after 2m51s
CI / OCR Service Tests (push) Successful in 38s
CI / Backend Unit Tests (push) Failing after 2m55s
CI / Unit & Component Tests (pull_request) Failing after 2m50s
CI / OCR Service Tests (pull_request) Successful in 34s
CI / Backend Unit Tests (pull_request) Failing after 2m54s
- help-popover: replace broad button[aria-expanded] with specific
getByLabel('Lese- und Bearbeitungsmodus'); update role="tooltip" →
role="region"; add afterAll doc cleanup (Sara/Tobias)
- richtlinien: assert .new-tab spans are hidden in print media — the
existing test only checked .app-nav (Sara)
- transcribe-coach: remove 4× redundant page.emulateMedia({reducedMotion})
calls — playwright.config.ts already sets reducedMotion: 'reduce' globally;
add afterAll doc cleanup (Tobias)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -8,21 +8,27 @@ test.describe('Help chip — Read/Edit panel header', () => {
|
|||||||
docId = await createEmptyDocument(request);
|
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 }) => {
|
test('opens popover on click, closes on Esc, returns focus to chip', async ({ page }) => {
|
||||||
await page.goto(`/documents/${docId}`);
|
await page.goto(`/documents/${docId}`);
|
||||||
await page.getByRole('button', { name: 'Transkribieren' }).click();
|
await page.getByRole('button', { name: 'Transkribieren' }).click();
|
||||||
|
|
||||||
// Find and click the (?) help chip
|
// Use the accessible label of the HelpPopover trigger (transcription_mode_help_label)
|
||||||
const helpBtn = page.locator('button[aria-expanded]');
|
const helpBtn = page.getByRole('button', { name: 'Lese- und Bearbeitungsmodus' });
|
||||||
await expect(helpBtn).toBeVisible({ timeout: 5000 });
|
await expect(helpBtn).toBeVisible({ timeout: 5000 });
|
||||||
await helpBtn.click();
|
await helpBtn.click();
|
||||||
|
|
||||||
// Popover should open
|
// Popover should open (role="region", not tooltip — click-triggered panels are regions)
|
||||||
await expect(page.locator('[role="tooltip"]')).toBeVisible();
|
await expect(page.getByRole('region', { name: 'Lese- und Bearbeitungsmodus' })).toBeVisible();
|
||||||
|
|
||||||
// Press Esc
|
// Press Esc
|
||||||
await page.keyboard.press('Escape');
|
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
|
// Focus should have returned to the chip
|
||||||
await expect(helpBtn).toBeFocused();
|
await expect(helpBtn).toBeFocused();
|
||||||
|
|||||||
@@ -63,6 +63,12 @@ test.describe('Richtlinien page — print media', () => {
|
|||||||
await expect(nav).toBeHidden();
|
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 });
|
await page.screenshot({ path: 'test-results/e2e/richtlinien-print.png', fullPage: true });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -13,10 +13,13 @@ test.describe('Transcribe coach — empty state', () => {
|
|||||||
docId = await createEmptyDocument(request);
|
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 ({
|
test('shows coach card (title, preamble, three step bodies, animation region)', async ({
|
||||||
page
|
page
|
||||||
}) => {
|
}) => {
|
||||||
await page.emulateMedia({ reducedMotion: 'reduce' });
|
|
||||||
await page.goto(`/documents/${docId}`);
|
await page.goto(`/documents/${docId}`);
|
||||||
await page.getByRole('button', { name: 'Transkribieren' }).click();
|
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 }) => {
|
test('training footer is NOT visible on empty doc', async ({ page }) => {
|
||||||
await page.emulateMedia({ reducedMotion: 'reduce' });
|
|
||||||
await page.goto(`/documents/${docId}`);
|
await page.goto(`/documents/${docId}`);
|
||||||
await page.getByRole('button', { name: 'Transkribieren' }).click();
|
await page.getByRole('button', { name: 'Transkribieren' }).click();
|
||||||
await expect(page.getByText('Für Training vormerken')).not.toBeVisible({ timeout: 3000 });
|
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 }) => {
|
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.goto(`/documents/${docId}`);
|
||||||
await page.getByRole('button', { name: 'Transkribieren' }).click();
|
await page.getByRole('button', { name: 'Transkribieren' }).click();
|
||||||
await expect(page.getByRole('heading', { level: 2, name: /Erste Transkription/ })).toBeVisible({
|
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 }) => {
|
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}`);
|
await page.goto(`/documents/${docId}`);
|
||||||
// Toggle dark theme
|
// Toggle dark theme
|
||||||
await page.getByRole('button', { name: /Farbmodus|theme/i }).click();
|
await page.getByRole('button', { name: /Farbmodus|theme/i }).click();
|
||||||
|
|||||||
Reference in New Issue
Block a user