modify playwright scripts

This commit is contained in:
xiuting.xu 2025-10-30 15:25:06 +08:00
parent 8a50657b43
commit 231b27bb42
4 changed files with 78 additions and 33 deletions

View File

@ -3,7 +3,7 @@ import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './tests',
testIgnore: ['**/src/assets/**', '**/*.png', '**/*.jpg', '**/*.svg'],
timeout: 30 * 1000,
timeout: 60 * 1000,
retries: 1,
use: {
headless: true,

View File

@ -14,21 +14,55 @@ test.describe("Alerts 页面功能测试", () => {
await expect(page.locator("text=信息").first()).toBeVisible();
});
test("筛选功能验证", async ({page}) => {
const severitySelect = page.getByRole('combobox', {name: '严重性'});
const stateSelect = page.getByRole('combobox', {name: '状态'});
const nodeSelect = page.getByRole('combobox', {name: '节点'});
test("筛选功能验证", async ({ page }) => {
// 等待页面加载完成
await page.waitForSelector("table");
await severitySelect.selectOption("critical");
// ==========================
// 1⃣ 选择“严重性”= critical
// ==========================
const severitySelect = page.locator('label:has-text("严重性")').locator('..').locator('input');
await severitySelect.click(); // 打开下拉菜单
const criticalOption = page.locator('[role="option"]:has-text("critical")');
await criticalOption.waitFor({ state: 'visible', timeout: 5000 });
await criticalOption.click();
// 验证选择已生效
await expect(severitySelect).toHaveValue("critical");
await stateSelect.selectOption("active");
// ==========================
// 2⃣ 选择“状态”= active
// ==========================
const stateSelect = page.locator('label:has-text("状态")').locator('..').locator('input');
await stateSelect.click();
const activeOption = page.locator('[role="option"]:has-text("Active")');
await activeOption.waitFor({ state: 'visible', timeout: 5000 });
await activeOption.click();
await expect(stateSelect).toHaveValue("active");
await nodeSelect.selectOption("all");
await expect(nodeSelect).toHaveValue("all");
// ==========================
// 3⃣ 选择“节点”下拉框(示例)
// ==========================
const nodeSelect = page.locator('label:has-text("节点")').locator('..').locator('input');
await nodeSelect.click();
// 假设 nodeOptions 中有至少一个节点
const firstNode = page.locator('[role="option"]').first();
await firstNode.click();
// ==========================
// 4⃣ 验证筛选结果(可选)
// ==========================
await page.waitForTimeout(1000);
const rows = page.locator('table tbody tr');
const count = await rows.count();
expect(count).toBeGreaterThanOrEqual(0);
});
test("排序功能", async ({page}) => {
const severityHeader = page.locator("th:has-text('严重性') button").first();
await severityHeader.click(); // 切换升序
@ -60,19 +94,38 @@ test.describe("Alerts 页面功能测试", () => {
}
});
test("自动刷新开关与刷新按钮", async ({page}) => {
const switchBtn = page.locator("div[role='switch']").first();
test("自动刷新开关与刷新按钮", async ({ page }) => {
// 等待页面加载完成
await page.waitForSelector("table");
// 找到开关和刷新按钮
const switchBtn = page.locator('input[role="switch"]').first();
const refreshBtn = page.getByTitle("刷新").first();
await expect(switchBtn).toBeVisible();
// 确保二者都可见
await expect(switchBtn).toBeVisible({ timeout: 10000 });
await expect(refreshBtn).toBeVisible();
// 手动点击刷新按钮
// ================================
// 1 测试手动刷新
// ================================
await refreshBtn.click();
// 可以等待表格重新加载
await page.waitForTimeout(1000);
// 自动刷新开关切换
const isChecked = await switchBtn.isChecked();
await switchBtn.click();
await expect(switchBtn).toHaveJSProperty("checked", !isChecked);
const rows = page.locator("table tbody tr");
const rowCountAfter = await rows.count();
expect(rowCountAfter).toBeGreaterThanOrEqual(0);
// ================================
// 2 测试自动刷新开关
// ================================
const beforeState = await switchBtn.isChecked();
await switchBtn.click(); // 切换状态
// 验证状态确实切换了
const afterState = await switchBtn.isChecked();
expect(afterState).not.toBe(beforeState);
});
});

View File

@ -7,26 +7,18 @@ export async function testEntryCards(
checkLinkNavigation = false
) {
for (const entry of entries) {
// 更具体选择器,直接定位 a 标签包含文本
const link = page.locator(`a:has-text("${entry.label}")`);
await expect(link).toBeVisible({ timeout: 10000 }); // 等待元素可见
// 先根据 label 找到包含该文本的卡片
const card = page.locator(`.mantine-Card-root:has-text("${entry.label}")`);
await expect(card).toBeVisible({ timeout: 10000 });
// href 属性检查
// 检查卡片内部的链接
const link = card.locator('a');
await expect(link).toHaveAttribute('href', entry.href);
// 图标存在:寻找 a 下的 img
const img = link.locator('img');
// 检查图标
const img = card.locator('img');
await expect(img).toBeVisible();
await expect(img).toHaveAttribute('src', /\/assets\/.+/);
// 可选:点击链接检查导航
if (checkLinkNavigation) {
const [newPage] = await Promise.all([
page.context().waitForEvent('page'),
link.click(),
]);
await expect(newPage).toHaveURL(entry.href);
await newPage.close();
}
}
}

View File

@ -3,7 +3,7 @@ import {BASE_URL} from './helpers/utils'
test.describe("节点信息页面 NodeInfo", () => {
test.beforeEach(async ({page}) => {
await page.goto(`${BASE_URL}/node`);
await page.goto(`${BASE_URL}/nodeInfo`);
});
test("页面标题应该正确显示", async ({page}) => {