From 94ae2fdc01532dbef04cd67d829af42031a03083 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Sun, 10 May 2026 13:00:21 +0200 Subject: [PATCH] =?UTF-8?q?fix(e2e):=20networkidle=20=E2=86=92=20domconten?= =?UTF-8?q?tloaded=20fuer=20IACE=20E2E=20Tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: Die Schwingarm-Rundtaktanlage Seite hat Background-Requests (vermutlich Polling oder SSE) die networkidle verhindern → 30s Timeout → alle Schwingarm-Tests schlagen fehl. Fix: waitUntil: 'domcontentloaded' + 3s Wartezeit fuer React-Hydration und API-Fetches. Verifiziert: Schwingarm-Seite laed korrekt mit domcontentloaded (h1: "Schwingarm-Rundtaktanlage"). iace-project-tabs: 10/10, iace-module: Schwingarm-Tests repariert. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../e2e/specs/iace-module.spec.ts | 6 +++-- .../e2e/specs/iace-project-tabs.spec.ts | 22 +++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/admin-compliance/e2e/specs/iace-module.spec.ts b/admin-compliance/e2e/specs/iace-module.spec.ts index e385fc7..1b2f789 100644 --- a/admin-compliance/e2e/specs/iace-module.spec.ts +++ b/admin-compliance/e2e/specs/iace-module.spec.ts @@ -66,9 +66,11 @@ async function dismissCookieBanner(page: Page) { /** Navigate, wait for async data, and dismiss cookie overlay. */ async function goTo(page: Page, path: string) { - await page.goto(`${BASE}${path}`, { waitUntil: 'networkidle', timeout: 30000 }) + // Use domcontentloaded instead of networkidle — some IACE pages have + // long-running background requests that prevent networkidle from resolving. + await page.goto(`${BASE}${path}`, { waitUntil: 'domcontentloaded', timeout: 30000 }) await dismissCookieBanner(page) - await page.waitForTimeout(2000) + await page.waitForTimeout(3000) // Wait for React hydration + API fetches await dismissCookieBanner(page) // Retry after content load } diff --git a/admin-compliance/e2e/specs/iace-project-tabs.spec.ts b/admin-compliance/e2e/specs/iace-project-tabs.spec.ts index a0d188d..118e50e 100644 --- a/admin-compliance/e2e/specs/iace-project-tabs.spec.ts +++ b/admin-compliance/e2e/specs/iace-project-tabs.spec.ts @@ -15,12 +15,12 @@ async function dismissBanner(page: import('@playwright/test').Page) { test.describe('IACE Project — All Tabs', () => { test.beforeEach(async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}`, { waitUntil: 'domcontentloaded' }) await dismissBanner(page) }) test('Overview page loads without error', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}`, { waitUntil: 'domcontentloaded' }) await dismissBanner(page) await page.waitForTimeout(2000) const body = await page.textContent('body') @@ -30,55 +30,55 @@ test.describe('IACE Project — All Tabs', () => { }) test('Components tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/components`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/components`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Classification tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/classification`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/classification`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Hazards tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/hazards`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/hazards`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Mitigations tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/mitigations`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/mitigations`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Verification tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/verification`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/verification`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Evidence tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/evidence`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/evidence`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Tech-File tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/tech-file`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/tech-file`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Monitoring tab loads', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/monitoring`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/monitoring`, { waitUntil: 'domcontentloaded' }) const body = await page.textContent('body') expect(body).not.toContain('Application error') }) test('Interview page loads — Grenzen & Verwendung form', async ({ page }) => { - await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/interview`, { waitUntil: 'networkidle' }) + await page.goto(`${BASE}/sdk/iace/${PROJECT_ID}/interview`, { waitUntil: 'domcontentloaded' }) await dismissBanner(page) await page.waitForTimeout(2000) const body = await page.textContent('body')