You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

102 lines
3.5 KiB

import { test, expect } from "@playwright/test";
import { E2E_ADMIN, E2E_INVALID_USER, FIXED_CAPTCHA } from "../fixtures/test-users";
test.describe("登录流程", () => {
test("管理员账号 UI 登录成功", async ({ page }) => {
await page.goto("/auth/login");
await page.fill("#login-username", E2E_ADMIN.username);
await page.fill("#login-password", E2E_ADMIN.password);
await page.fill("#login-captcha", FIXED_CAPTCHA);
await page.click('button[type="submit"]');
// 等待跳转到首页
await page.waitForURL("/", { timeout: 15000 });
await expect(page).toHaveURL("/");
});
test("登录成功后 toast 提示", async ({ page }) => {
await page.goto("/auth/login");
await page.fill("#login-username", E2E_ADMIN.username);
await page.fill("#login-password", E2E_ADMIN.password);
await page.fill("#login-captcha", FIXED_CAPTCHA);
await page.click('button[type="submit"]');
// 等待 toast 出现
await expect(page.locator(".Toastify__toast").first()).toBeVisible({ timeout: 10000 });
await expect(page.locator(".Toastify__toast").first()).toContainText("登录成功");
});
test("错误密码登录失败", async ({ page }) => {
await page.goto("/auth/login");
await page.fill("#login-username", E2E_ADMIN.username);
await page.fill("#login-password", E2E_INVALID_USER.password);
await page.fill("#login-captcha", FIXED_CAPTCHA);
await page.click('button[type="submit"]');
// 应停留在登录页
await expect(page).toHaveURL(/\/auth\/login/);
// 应显示错误 toast
await expect(page.locator(".Toastify__toast").first()).toBeVisible({ timeout: 10000 });
});
test("错误验证码登录失败", async ({ page }) => {
await page.goto("/auth/login");
await page.fill("#login-username", E2E_ADMIN.username);
await page.fill("#login-password", E2E_ADMIN.password);
await page.fill("#login-captcha", "wrong_captcha");
await page.click('button[type="submit"]');
// 应停留在登录页
await expect(page).toHaveURL(/\/auth\/login/);
// 应显示错误 toast
await expect(page.locator(".Toastify__toast").first()).toBeVisible({ timeout: 10000 });
});
test("未登录访问受保护页面重定向到登录页", async ({ page }) => {
await page.goto("/settings");
// 应重定向到登录页
await expect(page).toHaveURL(/\/auth\/login/);
});
test("登录后重定向到原始页面", async ({ page }) => {
// 先访问受保护页面,触发重定向
await page.goto("/settings");
await expect(page).toHaveURL(/\/auth\/login/);
// 登录
await page.fill("#login-username", E2E_ADMIN.username);
await page.fill("#login-password", E2E_ADMIN.password);
await page.fill("#login-captcha", FIXED_CAPTCHA);
await page.click('button[type="submit"]');
// 登录成功后应跳转到首页(redirect 参数可能不存在)
await page.waitForURL("/", { timeout: 15000 });
});
test("已登录用户访问登录页重定向到首页", async ({ page }) => {
// 先通过 UI 登录
await page.goto("/auth/login");
await page.fill("#login-username", E2E_ADMIN.username);
await page.fill("#login-password", E2E_ADMIN.password);
await page.fill("#login-captcha", FIXED_CAPTCHA);
await page.click('button[type="submit"]');
await page.waitForURL("/", { timeout: 15000 });
// 再访问登录页
await page.goto("/auth/login");
// 应重定向到首页
await page.waitForURL("/", { timeout: 15000 });
});
});