101 lines
4.0 KiB
TypeScript
101 lines
4.0 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
|
|
test.describe("站点冒烟", () => {
|
|
test("首页可访问且无致命前端错误", async ({ page }) => {
|
|
const pageErrors: string[] = [];
|
|
page.on("pageerror", (err) => {
|
|
pageErrors.push(err.message);
|
|
});
|
|
|
|
const response = await page.goto("/", { waitUntil: "networkidle" });
|
|
expect(response?.ok()).toBeTruthy();
|
|
|
|
await expect(page.locator("main")).toBeVisible();
|
|
await expect(page).toHaveTitle(/海宇数科/);
|
|
await expect(page.getByRole("heading", { level: 1 })).toContainText(
|
|
/智能报告/,
|
|
);
|
|
await expect(page.locator("#reports")).toBeVisible();
|
|
await expect(page.getByText("KYB 企业核验")).toBeVisible();
|
|
const exampleBtn = page
|
|
.locator("#reports")
|
|
.getByRole("button", { name: "查看智能体报告示例" })
|
|
.first();
|
|
await exampleBtn.scrollIntoViewIfNeeded();
|
|
await exampleBtn.click();
|
|
await expect(page.getByRole("dialog")).toBeVisible();
|
|
await expect(page.getByRole("dialog")).toContainText("核验结论");
|
|
await expect(page.locator("#models")).toBeVisible();
|
|
|
|
const squareLink = page.getByRole("link", { name: "模型广场" }).first();
|
|
await squareLink.click();
|
|
await expect(page).toHaveURL(/\/models$/);
|
|
await expect(page.getByRole("heading", { level: 1 })).toContainText(
|
|
"模型广场",
|
|
);
|
|
await expect(page.getByText("minimax-m2.7-highspeed")).toBeVisible();
|
|
await expect(page.getByText("glm-5.1")).toBeVisible();
|
|
|
|
await page.goto("/news", { waitUntil: "domcontentloaded" });
|
|
await expect(page.getByRole("heading", { level: 1 })).toContainText(
|
|
"AI 新闻资讯",
|
|
);
|
|
await page
|
|
.getByRole("link", { name: "智能报告模板库 2.0 发布" })
|
|
.first()
|
|
.click();
|
|
await expect(page).toHaveURL(/\/news\/report-templates-2/);
|
|
await expect(page.getByRole("heading", { level: 1 })).toContainText(
|
|
"智能报告模板库 2.0 发布",
|
|
);
|
|
|
|
expect(
|
|
pageErrors,
|
|
pageErrors.length ? pageErrors.join("\n") : undefined,
|
|
).toEqual([]);
|
|
});
|
|
|
|
test("窄屏显示移动菜单并可展开导航", async ({ page }) => {
|
|
await page.setViewportSize({ width: 390, height: 844 });
|
|
await page.goto("/", { waitUntil: "domcontentloaded" });
|
|
await expect(page.getByRole("button", { name: "菜单" })).toBeVisible();
|
|
await page.getByRole("button", { name: "菜单" }).click();
|
|
await expect(page.getByRole("link", { name: "智能报告" }).first()).toBeVisible();
|
|
await page.getByRole("link", { name: "模型能力" }).first().click();
|
|
await expect(page).toHaveURL(/\/models\/?$/);
|
|
});
|
|
|
|
test("文档中心可访问并展示侧栏与示例正文", async ({ page }) => {
|
|
const response = await page.goto("/docs", {
|
|
waitUntil: "domcontentloaded",
|
|
});
|
|
expect(response?.ok()).toBeTruthy();
|
|
await expect(page).toHaveTitle(/文档中心/);
|
|
await expect(
|
|
page.getByRole("region", { name: "文档导航" }),
|
|
).toBeVisible();
|
|
await expect(
|
|
page.getByRole("navigation", { name: "面包屑" }),
|
|
).toContainText("文档中心");
|
|
await expect(
|
|
page.getByRole("complementary", { name: "文档目录" }).or(
|
|
page.getByRole("navigation", { name: "文档目录(移动端)" }),
|
|
),
|
|
).toBeVisible({ timeout: 15_000 });
|
|
await expect(page.getByRole("link", { name: "快速开始" }).first()).toBeVisible();
|
|
await page.getByRole("link", { name: "OpenAI" }).first().click();
|
|
await expect(page).toHaveURL(/\/docs\/models\/openai/);
|
|
await expect(page.locator(".docs-prose h1, .docs-prose h2").first()).toContainText(
|
|
"OpenAI",
|
|
);
|
|
await expect(page.getByText("chat/completions")).toBeVisible();
|
|
});
|
|
|
|
test("全局样式编译通过(无 Turbopack CSS 报错页)", async ({ page }) => {
|
|
await page.goto("/", { waitUntil: "domcontentloaded" });
|
|
const bodyText = await page.locator("body").innerText();
|
|
expect(bodyText).not.toContain("Cannot apply unknown utility class");
|
|
expect(bodyText).not.toContain("CssSyntaxError");
|
|
});
|
|
});
|