R96 U8 补充页面视觉回归证据
这个提交包含在:
@@ -1,4 +1,4 @@
|
||||
import { devices, expect, test, type Page, type Route } from "@playwright/test";
|
||||
import { devices, expect, test, type Page, type Route, type TestInfo } from "@playwright/test";
|
||||
|
||||
function browserAgnosticDevice(name: keyof typeof devices) {
|
||||
const device = devices[name];
|
||||
@@ -26,6 +26,13 @@ async function fulfillJson(route: Route, data: unknown, status = 200) {
|
||||
});
|
||||
}
|
||||
|
||||
async function attachScreenshot(page: Page, testInfo: TestInfo, name: string) {
|
||||
await testInfo.attach(name, {
|
||||
body: await page.screenshot({ fullPage: true }),
|
||||
contentType: "image/png",
|
||||
});
|
||||
}
|
||||
|
||||
const mockMe = {
|
||||
id: "employee-mock-1",
|
||||
employeeNo: "M001",
|
||||
@@ -359,13 +366,14 @@ test.describe("R89 企业微信移动入口", () => {
|
||||
userAgent: "Mozilla/5.0 iPhone wxwork/4.1.20 MicroMessenger/7.0.1",
|
||||
});
|
||||
|
||||
test("企业微信移动场景默认生成移动工作台入口", async ({ page }) => {
|
||||
test("企业微信移动场景默认生成移动工作台入口", async ({ page }, testInfo) => {
|
||||
await mockR89Apis(page);
|
||||
|
||||
await page.goto("/login");
|
||||
await expect(page.getByTestId("login-wecom-primary-panel")).toBeVisible();
|
||||
await expect(page.getByTestId("wecom-entry-primary")).toBeVisible();
|
||||
await expect(page.getByTestId("login-password-primary-panel")).toHaveCount(0);
|
||||
await attachScreenshot(page, testInfo, "r96-wecom-login.png");
|
||||
|
||||
await page.getByTestId("wecom-entry-primary").click();
|
||||
await expect(page).toHaveURL(/\/api\/auth\/wecom\/login\?returnTo=%2Fmobile/);
|
||||
@@ -375,13 +383,14 @@ test.describe("R89 企业微信移动入口", () => {
|
||||
test.describe("R89 移动底部导航与核心页面", () => {
|
||||
test.use(browserAgnosticDevice("iPhone 13"));
|
||||
|
||||
test("密码登录后可完成移动首页、审批、票据和我的页关键路径", async ({ page }) => {
|
||||
test("密码登录后可完成移动首页、审批、票据和我的页关键路径", async ({ page }, testInfo) => {
|
||||
await mockR89Apis(page);
|
||||
|
||||
await loginByPassword(page);
|
||||
await expect(page).toHaveURL(/\/mobile$/);
|
||||
await expect(page.getByTestId("mobile-today-focus")).toBeVisible();
|
||||
await expect(page.getByTestId("topbar-profile-trigger")).toBeHidden();
|
||||
await attachScreenshot(page, testInfo, "r96-mobile-today.png");
|
||||
|
||||
await expect(page.getByTestId("mobile-nav-home")).toBeVisible();
|
||||
await expect(page.getByTestId("mobile-nav-approvals")).toBeVisible();
|
||||
@@ -395,16 +404,18 @@ test.describe("R89 移动底部导航与核心页面", () => {
|
||||
await expect(page.getByTestId("mobile-approvals-detail")).toBeVisible();
|
||||
await expect(page.getByTestId("mobile-approvals-approve")).toBeVisible();
|
||||
await expect(page.getByTestId("mobile-approvals-reject")).toBeVisible();
|
||||
await attachScreenshot(page, testInfo, "r96-mobile-approvals.png");
|
||||
|
||||
await page.getByTestId("mobile-nav-capture").click();
|
||||
await expect(page).toHaveURL(/\/mobile\/capture/);
|
||||
await expect(page.getByText("拍照或选择文件")).toBeVisible();
|
||||
await expect(page.getByText("拍照或选择文件", { exact: true })).toBeVisible();
|
||||
await page.getByTestId("mobile-capture-file").setInputFiles({
|
||||
name: "r89-invoice.pdf",
|
||||
mimeType: "application/pdf",
|
||||
buffer: Buffer.from("%PDF-1.4\n% R89"),
|
||||
});
|
||||
await expect(page.getByTestId("mobile-capture-upload")).toBeEnabled();
|
||||
await attachScreenshot(page, testInfo, "r96-mobile-capture.png");
|
||||
|
||||
await page.getByTestId("mobile-nav-me").click();
|
||||
await expect(page).toHaveURL(/\/mobile\/me/);
|
||||
|
||||
在新工单中引用
屏蔽一个用户