fix(e2e): networkidle → domcontentloaded fuer IACE E2E Tests

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) <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-05-10 13:00:21 +02:00
parent fbaca53c32
commit 94ae2fdc01
2 changed files with 15 additions and 13 deletions
@@ -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
}
@@ -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')