import { test, expect } from '@playwright/test' // 测试账号配置 const TEST_USERNAME = process.env.TEST_USERNAME || 'admin' const TEST_PASSWORD = process.env.TEST_PASSWORD || '123456' test.describe('登录登出测试', () => { test.beforeEach(async ({ page }) => { // 清除登录状态 await page.goto('/login') await page.evaluate(() => { localStorage.clear() document.cookie.split(';').forEach((c) => { document.cookie = c.replace(/^ +/, '').replace(/=.*/, '=;expires=' + new Date().toUTCString() + ';path=/') }) }) await page.reload() }) test('登录页面正确显示', async ({ page }) => { await expect(page.getByPlaceholder('请输入用户名')).toBeVisible() await expect(page.getByPlaceholder('请输入密码')).toBeVisible() await expect(page.getByRole('button', { name: '登 录' })).toBeVisible() await expect(page.getByText('记住我')).toBeVisible() }) test('空表单提交显示验证错误', async ({ page }) => { await page.getByRole('button', { name: '登 录' }).click() await expect(page.getByText('请输入用户名')).toBeVisible() await expect(page.getByText('请输入密码')).toBeVisible() }) test('登录成功并显示用户名 admin', async ({ page }) => { // 输入登录信息 await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME) await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD) await page.getByRole('button', { name: '登 录' }).click() // 等待跳转离开登录页 await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 }) // 验证用户名显示为 admin await expect(page.locator('.username')).toBeVisible({ timeout: 10000 }) await expect(page.locator('.username')).toContainText('admin') }) test('登录后可以正常登出', async ({ page }) => { // 先登录 await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME) await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD) await page.getByRole('button', { name: '登 录' }).click() await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 }) // 点击用户下拉菜单 await page.locator('.user-info').click() await page.waitForTimeout(500) // 点击退出登录 await page.getByText('退出登录').click() // 验证跳转到登录页 await expect(page).toHaveURL(/\/login/, { timeout: 10000 }) }) test('修改密码弹窗可以打开', async ({ page }) => { // 先登录 await page.getByPlaceholder('请输入用户名').fill(TEST_USERNAME) await page.getByPlaceholder('请输入密码').fill(TEST_PASSWORD) await page.getByRole('button', { name: '登 录' }).click() await expect(page).not.toHaveURL(/\/login/, { timeout: 15000 }) // 点击用户下拉菜单 await page.locator('.user-info').click() await page.waitForTimeout(500) // 点击修改密码 await page.getByText('修改密码').click() // 验证弹窗显示 await expect(page.getByRole('dialog')).toBeVisible() await expect(page.locator('.el-dialog').getByText('修改密码')).toBeVisible() }) })