import { expect, type Page, test } from '@playwright/test'; async function signIn(page: Page): Promise { await page.goto('/login'); await page.getByPlaceholder('请输入账号或手机号').fill('admin'); await page.getByPlaceholder('请输入密码').fill('demo1234'); await page.getByTestId('login-submit').click(); await expect(page.getByTestId('app-shell')).toBeVisible(); } test('登录页打开并进入工作台', async ({ page }) => { await page.goto('/login'); await expect(page.getByRole('heading', { name: '登录灵犀' })).toBeVisible(); await signIn(page); // A1 起登录默认落地 /system/users,再从顶部模块导航进入工作台 await expect(page).toHaveURL(/\/system\/users/); await page.getByRole('button', { name: '工作台', exact: true }).click(); await expect(page).toHaveURL('/'); await expect(page.getByRole('heading', { name: '工作台', exact: true })).toBeVisible(); await expect(page.getByRole('navigation', { name: '模块导航' })).toBeVisible(); }); test('403 页可演示', async ({ page }) => { await page.goto('/403'); await expect(page.getByTestId('error-403')).toBeVisible(); await expect(page.getByRole('heading', { name: '没有访问权限' })).toBeVisible(); }); test('模块切换与侧边栏、面包屑联动', async ({ page }) => { await signIn(page); await page.getByRole('button', { name: '素材', exact: true }).click(); await expect(page).toHaveURL(/\/material/); await page.getByRole('link', { name: '快筛', exact: true }).click(); await expect(page.getByRole('heading', { name: '快筛' })).toBeVisible(); await expect(page.getByRole('navigation', { name: '面包屑' })).toContainText('素材'); }); test('未知路由展示 404', async ({ page }) => { await page.goto('/404'); await expect(page.getByTestId('error-404')).toBeVisible(); });