R30-1 R30-9: 建立零人工发布门禁并补齐高频回归
这个提交包含在:
@@ -1,5 +1,7 @@
|
||||
import { expect, request as playwrightRequest, type APIRequestContext, type Page } from "@playwright/test";
|
||||
|
||||
import { TEST_IDS } from "./testIds";
|
||||
|
||||
export const E2E_BASE_URL = process.env.E2E_BASE_URL ?? "http://127.0.0.1:3000";
|
||||
|
||||
export type E2EUser = {
|
||||
@@ -74,15 +76,22 @@ async function readJson<T>(response: { ok(): boolean; status(): number; text():
|
||||
|
||||
export async function login(page: Page, user: E2EUser) {
|
||||
await page.goto("/login");
|
||||
await page.getByTestId("login-identifier").fill(user.identifier);
|
||||
await page.getByTestId("login-password").fill(user.password);
|
||||
await page.getByTestId("login-submit").click();
|
||||
await page.getByTestId(TEST_IDS.login.identifier).fill(user.identifier);
|
||||
await page.getByTestId(TEST_IDS.login.password).fill(user.password);
|
||||
await page.getByTestId(TEST_IDS.login.submit).click();
|
||||
await expect(page).toHaveURL(/\/portal/);
|
||||
}
|
||||
|
||||
export async function logout(page: Page, userDisplayName: string) {
|
||||
export async function logout(page: Page, userDisplayName?: string) {
|
||||
try {
|
||||
await page.getByRole("button", { name: userDisplayName, exact: true }).first().click({ force: true });
|
||||
const profileTrigger = page.getByTestId(TEST_IDS.topbar.profileTrigger).first();
|
||||
if (await profileTrigger.isVisible().catch(() => false)) {
|
||||
await profileTrigger.click({ force: true });
|
||||
} else if (userDisplayName) {
|
||||
await page.getByRole("button", { name: userDisplayName, exact: true }).first().click({ force: true });
|
||||
} else {
|
||||
throw new Error("profile trigger not visible");
|
||||
}
|
||||
await expect(page.getByRole("menuitem", { name: "退出登录" })).toBeVisible({ timeout: 5_000 });
|
||||
await page.getByRole("menuitem", { name: "退出登录" }).click();
|
||||
} catch {
|
||||
|
||||
在新工单中引用
屏蔽一个用户