diff --git a/tests/dev-smoke-test.spec.js b/tests/dev-smoke-test.spec.js index 75eaae3..553f6d4 100644 --- a/tests/dev-smoke-test.spec.js +++ b/tests/dev-smoke-test.spec.js @@ -59,15 +59,30 @@ test('2. Dashboard lädt ohne Fehler', async ({ page }) => { test('3. Navigation zu Übungen', async ({ page }) => { await login(page); + await expect(page.locator('.spinner')).toHaveCount(0, { timeout: 10000 }); + // Bei Viewport ≥1024px ist .bottom-nav versteckt — Mobile garantieren wie in playwright.config.js await page.setViewportSize({ width: 390, height: 844 }); - // Desktop-Sidebar enthält ebenfalls Übungen – nur Mobile-Bottom-Nav klicken (sichtbarer Link) - await page.locator('.bottom-nav a[href="/exercises"]').click(); + // Bottom-Nav: Navigation und URL gemeinsam abwarten (vermeidet race mit networkidle) + const exercisesLink = page.locator('.bottom-nav').getByRole('link', { name: /Übungen/i }); + await Promise.all([ + page.waitForURL( + (u) => { + const path = u.pathname.replace(/\/$/, '') || '/' + return path === '/exercises' + }, + { timeout: 15000 }, + ), + exercisesLink.click(), + ]); await page.waitForLoadState('networkidle'); - // Prüfe ob Übungen-Seite geladen - await expect(page.locator('h1, h2, .page-title')).toContainText(/übungen/i, { timeout: 5000 }); + // Wie Test 4 (Vereine): eine eindeutige h1 — nicht h1,h2-Kombi (Strict Mode + mehrere Treffer) + const main = page.locator('.app-main'); + await expect(main.getByRole('heading', { level: 1, name: /Übungen/i })).toBeVisible({ + timeout: 10000, + }); await page.screenshot({ path: 'screenshots/03-uebungen.png' }); console.log('✓ Übungen-Seite erreichbar');