modify playwright scripts
This commit is contained in:
parent
8a50657b43
commit
231b27bb42
@ -3,7 +3,7 @@ import { defineConfig } from '@playwright/test';
|
|||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
testDir: './tests',
|
testDir: './tests',
|
||||||
testIgnore: ['**/src/assets/**', '**/*.png', '**/*.jpg', '**/*.svg'],
|
testIgnore: ['**/src/assets/**', '**/*.png', '**/*.jpg', '**/*.svg'],
|
||||||
timeout: 30 * 1000,
|
timeout: 60 * 1000,
|
||||||
retries: 1,
|
retries: 1,
|
||||||
use: {
|
use: {
|
||||||
headless: true,
|
headless: true,
|
||||||
|
|||||||
@ -14,21 +14,55 @@ test.describe("Alerts 页面功能测试", () => {
|
|||||||
await expect(page.locator("text=信息").first()).toBeVisible();
|
await expect(page.locator("text=信息").first()).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test("筛选功能验证", async ({page}) => {
|
test("筛选功能验证", async ({ page }) => {
|
||||||
const severitySelect = page.getByRole('combobox', {name: '严重性'});
|
// 等待页面加载完成
|
||||||
const stateSelect = page.getByRole('combobox', {name: '状态'});
|
await page.waitForSelector("table");
|
||||||
const nodeSelect = page.getByRole('combobox', {name: '节点'});
|
|
||||||
|
|
||||||
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 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 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}) => {
|
test("排序功能", async ({page}) => {
|
||||||
const severityHeader = page.locator("th:has-text('严重性') button").first();
|
const severityHeader = page.locator("th:has-text('严重性') button").first();
|
||||||
await severityHeader.click(); // 切换升序
|
await severityHeader.click(); // 切换升序
|
||||||
@ -60,19 +94,38 @@ test.describe("Alerts 页面功能测试", () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test("自动刷新开关与刷新按钮", async ({page}) => {
|
test("自动刷新开关与刷新按钮", async ({ page }) => {
|
||||||
const switchBtn = page.locator("div[role='switch']").first();
|
// 等待页面加载完成
|
||||||
|
await page.waitForSelector("table");
|
||||||
|
|
||||||
|
// 找到开关和刷新按钮
|
||||||
|
const switchBtn = page.locator('input[role="switch"]').first();
|
||||||
const refreshBtn = page.getByTitle("刷新").first();
|
const refreshBtn = page.getByTitle("刷新").first();
|
||||||
|
|
||||||
await expect(switchBtn).toBeVisible();
|
// 确保二者都可见
|
||||||
|
await expect(switchBtn).toBeVisible({ timeout: 10000 });
|
||||||
await expect(refreshBtn).toBeVisible();
|
await expect(refreshBtn).toBeVisible();
|
||||||
|
|
||||||
// 手动点击刷新按钮
|
// ================================
|
||||||
|
// 1 测试手动刷新
|
||||||
|
// ================================
|
||||||
await refreshBtn.click();
|
await refreshBtn.click();
|
||||||
|
// 可以等待表格重新加载
|
||||||
|
await page.waitForTimeout(1000);
|
||||||
|
|
||||||
// 自动刷新开关切换
|
const rows = page.locator("table tbody tr");
|
||||||
const isChecked = await switchBtn.isChecked();
|
const rowCountAfter = await rows.count();
|
||||||
await switchBtn.click();
|
expect(rowCountAfter).toBeGreaterThanOrEqual(0);
|
||||||
await expect(switchBtn).toHaveJSProperty("checked", !isChecked);
|
|
||||||
|
// ================================
|
||||||
|
// 2 测试自动刷新开关
|
||||||
|
// ================================
|
||||||
|
const beforeState = await switchBtn.isChecked();
|
||||||
|
await switchBtn.click(); // 切换状态
|
||||||
|
|
||||||
|
// 验证状态确实切换了
|
||||||
|
const afterState = await switchBtn.isChecked();
|
||||||
|
expect(afterState).not.toBe(beforeState);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@ -7,26 +7,18 @@ export async function testEntryCards(
|
|||||||
checkLinkNavigation = false
|
checkLinkNavigation = false
|
||||||
) {
|
) {
|
||||||
for (const entry of entries) {
|
for (const entry of entries) {
|
||||||
// 更具体选择器,直接定位 a 标签包含文本
|
// 先根据 label 找到包含该文本的卡片
|
||||||
const link = page.locator(`a:has-text("${entry.label}")`);
|
const card = page.locator(`.mantine-Card-root:has-text("${entry.label}")`);
|
||||||
await expect(link).toBeVisible({ timeout: 10000 }); // 等待元素可见
|
await expect(card).toBeVisible({ timeout: 10000 });
|
||||||
|
|
||||||
// href 属性检查
|
// 检查卡片内部的链接
|
||||||
|
const link = card.locator('a');
|
||||||
await expect(link).toHaveAttribute('href', entry.href);
|
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).toBeVisible();
|
||||||
await expect(img).toHaveAttribute('src', /\/assets\/.+/);
|
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import {BASE_URL} from './helpers/utils'
|
|||||||
|
|
||||||
test.describe("节点信息页面 NodeInfo", () => {
|
test.describe("节点信息页面 NodeInfo", () => {
|
||||||
test.beforeEach(async ({page}) => {
|
test.beforeEach(async ({page}) => {
|
||||||
await page.goto(`${BASE_URL}/node`);
|
await page.goto(`${BASE_URL}/nodeInfo`);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("页面标题应该正确显示", async ({page}) => {
|
test("页面标题应该正确显示", async ({page}) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user