Navigation Error Handling — Fast-Fail bei 404/500 + Retry mit Backoff + Challenge-Detection #114
Labels
No labels
bug
docs
feature
housekeeping
html-spec
performance
react-compat
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
glow-all/true-headless-browser#114
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problembeschreibung
Aktuell macht
page.goto()keinen Unterschied zwischen 200 OK, 404 Not Found, 500 Server Error oder Timeout. Bei 5XX oder Timeout wartet der Stabilizer bis zum Timeout (30s) — sinnlos.Beispiel:
page.goto('https://example.com/nicht-existente-seite')→ HTTP 404 →response.text()gibt leeren String → Parser parsed nichts → Stabilizer wartet 30s → Fehlschlag.Aktueller Flow (schlecht)
Gewünschter Flow
Option A: Fast-Fail bei HTTP Error
Option B: Retry mit Backoff
Direkt in goto() eingebaut: Retry-Logic + Fast-Fail + Timeout-Kontrolle.
Option C: Challenge-Detection + Auto-Proxy-Wechsel
Erweiterung von B:
Empfehlung: Option B (Retry mit Backoff) als erste Phase. Option C später.
Akzeptanzkriterien (Phase 1 — Fast-Fail)
NavigationErrorKlasse mit url, statusCode, statusTextgoto()wirft NavigationError bei status >= 400 innerhalb von 1sgoto(url, { failOnStatus: [404, 500, 502, 503] })Akzeptanzkriterien (Phase 2 — Retry)
goto(url, { retry: { max: 3, delay: 1000, backoff: 'exponential' } })onRetryCallback: (attempt, error) => booleanAkzeptanzkriterien (Phase 3 — Challenge)
onChallengeCallback: (type, url) => PromiseBetroffene Dateien
src/pages/page.tsgoto()refactorn: Status-Check vor Parsersrc/pages/page.tssrc/pages/page.tssrc/pages/stabilizer.tstests/unit/navigation-error.test.tsRisiken
onNavigationErrorerlaubt continueTestplan (20 Tests)
failOnStatusArray filtert richtigonRetryCallbackonChallengeCallback