Mandantenfähigkeit V1.1 #11
|
|
@ -205,7 +205,8 @@ jobs:
|
||||||
|
|
||||||
- name: Upload test screenshots
|
- name: Upload test screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
# v4 ist auf Gitea (GHES-kompatibles Actions-Backend) oft nicht verfügbar
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: playwright-screenshots
|
name: playwright-screenshots
|
||||||
path: screenshots/
|
path: screenshots/
|
||||||
|
|
|
||||||
|
|
@ -76,8 +76,12 @@ test('4. Navigation zu Vereine', async ({ page }) => {
|
||||||
await page.locator('.bottom-nav a[href="/clubs"]').click();
|
await page.locator('.bottom-nav a[href="/clubs"]').click();
|
||||||
await page.waitForLoadState('networkidle');
|
await page.waitForLoadState('networkidle');
|
||||||
|
|
||||||
// Prüfe ob Vereine-Seite geladen
|
// ClubsPage: <h1>Vereinsverwaltung</h1> + Tab <h2>Vereine</h2> → ein kombinierter
|
||||||
await expect(page.locator('h1, h2, .page-title')).toContainText(/vereine|clubs/i, { timeout: 5000 });
|
// Selektor löst 2 Treffer aus (Playwright strict mode). URL + primäre Überschrift reichen.
|
||||||
|
await expect(page).toHaveURL(/\/clubs\/?$/, { timeout: 5000 });
|
||||||
|
await expect(page.getByRole('heading', { level: 1, name: /Vereinsverwaltung/i })).toBeVisible({
|
||||||
|
timeout: 5000,
|
||||||
|
});
|
||||||
|
|
||||||
await page.screenshot({ path: 'screenshots/04-vereine.png' });
|
await page.screenshot({ path: 'screenshots/04-vereine.png' });
|
||||||
console.log('✓ Vereine-Seite erreichbar');
|
console.log('✓ Vereine-Seite erreichbar');
|
||||||
|
|
@ -115,15 +119,20 @@ test('7. Session-Persistenz nach Reload', async ({ page }) => {
|
||||||
await login(page);
|
await login(page);
|
||||||
|
|
||||||
await expect(page.locator('.spinner')).toHaveCount(0, { timeout: 10000 });
|
await expect(page.locator('.spinner')).toHaveCount(0, { timeout: 10000 });
|
||||||
|
await expect(
|
||||||
|
page.locator('.app-main').getByRole('heading', { level: 1, name: 'Dashboard' }),
|
||||||
|
).toBeVisible({ timeout: 10000 });
|
||||||
|
|
||||||
await page.reload({ waitUntil: 'domcontentloaded' });
|
await page.reload({ waitUntil: 'domcontentloaded' });
|
||||||
await page.waitForLoadState('networkidle');
|
await page.waitForLoadState('networkidle');
|
||||||
|
|
||||||
// Auth lädt erst nach Spinner – nicht auf /login stranden (stabiler als Button „Login“-Tab auf Login-Screen)
|
// Auth lädt erst nach Spinner – nicht auf /login stranden (stabiler als Button „Login“-Tab auf Login-Screen)
|
||||||
await expect(page.locator('.spinner')).toHaveCount(0, { timeout: 20000 });
|
await expect(page.locator('.spinner')).toHaveCount(0, { timeout: 20000 });
|
||||||
await expect(page).not.toHaveURL('**/login', { timeout: 20000 });
|
await expect(page).not.toHaveURL(/\/login(?:\/|$|\?|#)/, { timeout: 20000 });
|
||||||
await expect(page.locator('h1').filter({ hasText: /^Dashboard$/ })).toBeVisible({
|
await expect(
|
||||||
timeout: 10000,
|
page.locator('.app-main').getByRole('heading', { level: 1, name: 'Dashboard' }),
|
||||||
|
).toBeVisible({
|
||||||
|
timeout: 20000,
|
||||||
});
|
});
|
||||||
|
|
||||||
await page.screenshot({ path: 'screenshots/07-nach-reload.png' });
|
await page.screenshot({ path: 'screenshots/07-nach-reload.png' });
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user