|
|
import { test, expect } from "@playwright/test";
|
|
|
|
|
|
test.describe("Flock hold UI(fixture,不依赖官网 RPA)", () => {
|
|
|
test.beforeEach(async ({ page }) => {
|
|
|
await page.goto("/e2e-fixtures/flock-hold");
|
|
|
await expect(page.getByTestId("flock-hold-fixture")).toBeVisible({
|
|
|
timeout: 30_000,
|
|
|
});
|
|
|
});
|
|
|
|
|
|
test("60s 确认窗文案:下单语义 + 倒计时", async ({ page }) => {
|
|
|
const dialog = page.getByRole("dialog").filter({
|
|
|
has: page.getByRole("heading", { name: "更新二级信息以完成下单" }),
|
|
|
});
|
|
|
await expect(
|
|
|
dialog.getByRole("heading", { name: "更新二级信息以完成下单" }),
|
|
|
).toBeVisible();
|
|
|
await expect(dialog.getByText(/请在/)).toBeVisible();
|
|
|
await expect(dialog.getByText(/总时限剩余/)).toBeVisible();
|
|
|
await expect(
|
|
|
dialog.getByRole("button", { name: "不继续填写", exact: true }),
|
|
|
).toBeVisible();
|
|
|
await expect(
|
|
|
dialog.getByRole("button", { name: "继续填写", exact: true }),
|
|
|
).toBeVisible();
|
|
|
});
|
|
|
|
|
|
test("不继续填写 → 关闭弹窗且未解锁结账", async ({ page }) => {
|
|
|
await page
|
|
|
.getByRole("dialog")
|
|
|
.filter({
|
|
|
has: page.getByRole("heading", { name: "更新二级信息以完成下单" }),
|
|
|
})
|
|
|
.getByRole("button", { name: "不继续填写", exact: true })
|
|
|
.click();
|
|
|
await expect(page.getByTestId("last-action")).toHaveText(
|
|
|
"lastAction=hold-decline",
|
|
|
);
|
|
|
await expect(page.getByTestId("hold-accepted")).toHaveText(
|
|
|
"holdAccepted=false",
|
|
|
);
|
|
|
await expect(
|
|
|
page.getByRole("dialog").filter({
|
|
|
has: page.getByRole("heading", { name: "更新二级信息以完成下单" }),
|
|
|
}),
|
|
|
).toHaveCount(0);
|
|
|
await expect(page.getByText(/请先确认「继续填写」/)).toBeVisible();
|
|
|
await expect(page.getByRole("button", { name: /前往结账/ })).toBeDisabled();
|
|
|
});
|
|
|
|
|
|
test("继续填写 → 查看报价选项弹窗 → 选灵活价 → 可结账", async ({
|
|
|
page,
|
|
|
}) => {
|
|
|
await page
|
|
|
.getByRole("dialog")
|
|
|
.filter({
|
|
|
has: page.getByRole("heading", { name: "更新二级信息以完成下单" }),
|
|
|
})
|
|
|
.getByRole("button", { name: "继续填写", exact: true })
|
|
|
.click();
|
|
|
await expect(page.getByTestId("last-action")).toHaveText(
|
|
|
"lastAction=hold-continue",
|
|
|
);
|
|
|
await expect(page.getByTestId("hold-accepted")).toHaveText(
|
|
|
"holdAccepted=true",
|
|
|
);
|
|
|
|
|
|
await page.getByTestId("flock-see-pricing-flock_direct").click();
|
|
|
const modal = page.getByTestId("flock-pricing-options-modal");
|
|
|
await expect(modal).toBeVisible();
|
|
|
await expect(modal.getByText("提货日期是否灵活?")).toBeVisible();
|
|
|
await expect(modal.getByText("2 天灵活性")).toBeVisible();
|
|
|
await expect(modal.getByText("1 天灵活性")).toBeVisible();
|
|
|
await expect(modal.getByText("无灵活性")).toBeVisible();
|
|
|
|
|
|
await modal.getByTestId("flock-flex-option-2_day").click();
|
|
|
await expect(page.getByTestId("last-action")).toHaveText(
|
|
|
"lastAction=select-flex:2_day",
|
|
|
);
|
|
|
await expect(modal).toHaveCount(0);
|
|
|
|
|
|
const checkout = page.getByRole("button", { name: /前往结账/ });
|
|
|
await expect(checkout).toBeEnabled();
|
|
|
await checkout.click();
|
|
|
await expect(page.getByTestId("last-action")).toHaveText(
|
|
|
"lastAction=checkout-ok",
|
|
|
);
|
|
|
});
|
|
|
|
|
|
test("未选灵活价时结账按钮禁用(预防跳步)", async ({ page }) => {
|
|
|
await page
|
|
|
.getByRole("dialog")
|
|
|
.filter({
|
|
|
has: page.getByRole("heading", { name: "更新二级信息以完成下单" }),
|
|
|
})
|
|
|
.getByRole("button", { name: "继续填写", exact: true })
|
|
|
.click();
|
|
|
await page.getByTestId("flock-see-pricing-flock_direct").click();
|
|
|
await expect(page.getByTestId("flock-pricing-options-modal")).toBeVisible();
|
|
|
await expect(page.getByRole("button", { name: /前往结账/ })).toBeDisabled();
|
|
|
await expect(page.getByTestId("last-action")).toHaveText(
|
|
|
/select-tier:flock_direct/,
|
|
|
);
|
|
|
});
|
|
|
|
|
|
test("官网同款:双卡起价 + 查看报价选项可见", async ({ page }) => {
|
|
|
await expect(page.getByTestId("flock-tier-card-flock_direct")).toBeVisible();
|
|
|
await expect(page.getByTestId("flock-tier-card-standard")).toBeVisible();
|
|
|
await expect(page.getByText("起价").first()).toBeVisible();
|
|
|
await expect(page.getByText("$1,221").first()).toBeVisible();
|
|
|
await expect(page.getByText("$1,011").first()).toBeVisible();
|
|
|
await expect(page.getByText(/JKR-RH3X/)).toBeVisible();
|
|
|
await expect(
|
|
|
page.getByTestId("flock-see-pricing-flock_direct"),
|
|
|
).toBeVisible();
|
|
|
await expect(page.getByTestId("flock-see-pricing-standard")).toBeVisible();
|
|
|
});
|
|
|
});
|