modify playwright ts

This commit is contained in:
xiuting.xu 2025-10-30 10:19:39 +08:00
parent 752d2991ec
commit 35ed0f72f2
9 changed files with 74 additions and 68 deletions

View File

@ -69,7 +69,7 @@ rm -rf "$REPORT_DIR"
# Run Playwright tests with reporters # Run Playwright tests with reporters
set +e # temporarily disable exit-on-error to capture test result set +e # temporarily disable exit-on-error to capture test result
npx playwright test tests/playwright --reporter=list,html BASE_URL=${FRONTEND_URL} npx playwright test tests/playwright --reporter=list,html
TEST_RESULT=$? TEST_RESULT=$?
set -e # re-enable strict mode set -e # re-enable strict mode

View File

@ -1,77 +1,78 @@
import { test, expect } from "@playwright/test"; import {test, expect} from "@playwright/test";
import { BASE_URL } from './helpers/utils'
test.describe("Alerts 页面功能测试", () => { test.describe("Alerts 页面功能测试", () => {
test.beforeEach(async ({ page }) => { test.beforeEach(async ({page}) => {
await page.goto("http://localhost:8080/alerts"); // 根据你实际路由调整 await page.goto(`${BASE_URL}/alerts`); // 根据你实际路由调整
}); });
test("页面加载并显示告警统计", async ({ page }) => { test("页面加载并显示告警统计", async ({page}) => {
await expect(page.locator("text=告警详情")).toBeVisible(); await expect(page.locator("text=告警详情")).toBeVisible();
await expect(page.locator("text=总数")).toBeVisible(); await expect(page.locator("text=总数")).toBeVisible();
await expect(page.locator("text=严重")).toBeVisible(); await expect(page.locator("text=严重")).toBeVisible();
await expect(page.locator("text=警告")).toBeVisible(); await expect(page.locator("text=警告")).toBeVisible();
await expect(page.locator("text=信息")).toBeVisible(); await expect(page.locator("text=信息")).toBeVisible();
}); });
test("筛选功能验证", async ({ page }) => { test("筛选功能验证", async ({page}) => {
const severitySelect = page.getByLabel("严重性"); const severitySelect = page.getByLabel("严重性");
const stateSelect = page.getByLabel("状态"); const stateSelect = page.getByLabel("状态");
const nodeSelect = page.getByLabel("节点"); const nodeSelect = page.getByLabel("节点");
await severitySelect.selectOption("critical"); await severitySelect.selectOption("critical");
await expect(severitySelect).toHaveValue("critical"); await expect(severitySelect).toHaveValue("critical");
await stateSelect.selectOption("active"); await stateSelect.selectOption("active");
await expect(stateSelect).toHaveValue("active"); await expect(stateSelect).toHaveValue("active");
await nodeSelect.selectOption("all"); await nodeSelect.selectOption("all");
await expect(nodeSelect).toHaveValue("all"); await expect(nodeSelect).toHaveValue("all");
}); });
test("排序功能", async ({ page }) => { test("排序功能", async ({page}) => {
const severityHeader = page.locator("th:has-text('严重性') button"); const severityHeader = page.locator("th:has-text('严重性') button");
await severityHeader.click(); // 切换升序 await severityHeader.click(); // 切换升序
await severityHeader.click(); // 切换降序 await severityHeader.click(); // 切换降序
const instanceHeader = page.locator("th:has-text('节点') button"); const instanceHeader = page.locator("th:has-text('节点') button");
await instanceHeader.click(); await instanceHeader.click();
await instanceHeader.click(); await instanceHeader.click();
}); });
test("分页功能", async ({ page }) => { test("分页功能", async ({page}) => {
const nextButton = page.locator("button:has-text('下一页')"); const nextButton = page.locator("button:has-text('下一页')");
const prevButton = page.locator("button:has-text('上一页')"); const prevButton = page.locator("button:has-text('上一页')");
if (await nextButton.isEnabled()) { if (await nextButton.isEnabled()) {
await nextButton.click(); await nextButton.click();
await expect(prevButton).toBeEnabled(); await expect(prevButton).toBeEnabled();
} }
}); });
test("展开更多信息行", async ({ page }) => { test("展开更多信息行", async ({page}) => {
const infoIcons = page.locator("table tbody tr td [title='显示/隐藏更多信息']"); const infoIcons = page.locator("table tbody tr td [title='显示/隐藏更多信息']");
if (await infoIcons.count() > 0) { if (await infoIcons.count() > 0) {
await infoIcons.first().click(); await infoIcons.first().click();
// 展开的详情行应出现 // 展开的详情行应出现
const details = page.locator("table tbody tr >> text=alertname"); const details = page.locator("table tbody tr >> text=alertname");
const detailCount = await details.count(); const detailCount = await details.count();
expect(detailCount).toBeGreaterThan(0); expect(detailCount).toBeGreaterThan(0);
} }
}); });
test("自动刷新开关与刷新按钮", async ({ page }) => { test("自动刷新开关与刷新按钮", async ({page}) => {
const switchBtn = page.getByRole("switch", { name: "自动刷新" }); const switchBtn = page.getByRole("switch", {name: "自动刷新"});
const refreshBtn = page.getByTitle("刷新"); const refreshBtn = page.getByTitle("刷新");
await expect(switchBtn).toBeVisible(); await expect(switchBtn).toBeVisible();
await expect(refreshBtn).toBeVisible(); await expect(refreshBtn).toBeVisible();
// 手动点击刷新按钮 // 手动点击刷新按钮
await refreshBtn.click(); await refreshBtn.click();
// 自动刷新开关切换 // 自动刷新开关切换
const isChecked = await switchBtn.isChecked(); const isChecked = await switchBtn.isChecked();
await switchBtn.click(); await switchBtn.click();
await expect(switchBtn).toHaveJSProperty("checked", !isChecked); await expect(switchBtn).toHaveJSProperty("checked", !isChecked);
}); });
}); });

View File

@ -1,10 +1,11 @@
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
import { BASE_URL } from './helpers/utils'
test.describe('Dashboard 页面测试', () => { test.describe('Dashboard 页面测试', () => {
test.beforeEach(async ({ page }) => { test.beforeEach(async ({ page }) => {
// 打开仪表盘页面 // 打开仪表盘页面
await page.goto('http://localhost:8080/dashboard', { waitUntil: 'networkidle' }); await page.goto(`${BASE_URL}/dashboard`, { waitUntil: 'networkidle' });
}); });
test('应能成功加载页面并显示标题', async ({ page }) => { test('应能成功加载页面并显示标题', async ({ page }) => {

View File

@ -1,10 +1,10 @@
import { Page, expect } from '@playwright/test'; import { Page, expect } from '@playwright/test';
import { BASE_URL } from './utils'
/** /**
* *
*/ */
export async function checkPage(page: Page, path: string, title: string) { export async function checkPage(page: Page, path: string, title: string) {
await page.goto('http://localhost:8080/'); await page.goto(`${BASE_URL}`);
const menu = page.getByRole('link', { name: title }); const menu = page.getByRole('link', { name: title });
await expect(menu).toBeVisible(); await expect(menu).toBeVisible();
await menu.click(); await menu.click();

View File

@ -0,0 +1 @@
export const BASE_URL = process.env.BASE_URL || "http://localhost:8080";

View File

@ -1,10 +1,11 @@
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
import { logsEntries } from './test-entries'; import { logsEntries } from './test-entries';
import { testEntryCards } from './helpers/entrycards-helpers'; import { testEntryCards } from './helpers/entrycards-helpers';
import { BASE_URL } from './helpers/utils'
test.describe('Logs Page', () => { test.describe('Logs Page', () => {
test('should render all log cards', async ({ page }) => { test('should render all log cards', async ({ page }) => {
await page.goto('http://localhost:8080m/logs'); await page.goto(`${BASE_URL}/logs`);
await expect(page.locator('h2', { hasText: '日志详情' })).toBeVisible(); await expect(page.locator('h2', { hasText: '日志详情' })).toBeVisible();
await testEntryCards(page, logsEntries); await testEntryCards(page, logsEntries);
}); });

View File

@ -1,11 +1,12 @@
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';
import { metricsEntries } from './test-entries'; import { metricsEntries } from './test-entries';
import { testEntryCards } from './helpers/entrycards-helpers'; import { testEntryCards } from './helpers/entrycards-helpers';
import { BASE_URL } from './helpers/utils'
test.describe('Metrics Page', () => { test.describe('Metrics Page', () => {
test('should render all metric cards', async ({ page }) => { test('should render all metric cards', async ({ page }) => {
await page.goto('http://localhost:8080/metrics'); await page.goto(`${BASE_URL}/metrics`);
await expect(page.locator('h2', { hasText: '指标详情' })).toBeVisible(); await expect(page.locator('h2', { hasText: '指标详情' })).toBeVisible();
await testEntryCards(page, metricsEntries); await testEntryCards(page, metricsEntries);
}); });

View File

@ -1,9 +1,10 @@
import { test, expect } from "@playwright/test"; import { test, expect } from "@playwright/test";
import { BASE_URL } from './helpers/utils'
test.describe("节点信息页面 NodeInfo", () => { test.describe("节点信息页面 NodeInfo", () => {
// 每次测试前打开目标页面 // 每次测试前打开目标页面
test.beforeEach(async ({ page }) => { test.beforeEach(async ({ page }) => {
await page.goto("http://localhost:8080/node"); await page.goto(`${BASE_URL}/node`);
}); });
test("页面标题应该正确显示", async ({ page }) => { test("页面标题应该正确显示", async ({ page }) => {

View File

@ -1,7 +1,7 @@
import { test } from '@playwright/test'; import { test } from '@playwright/test';
import { checkPage, noConsoleError } from './helpers/testUtils'; import { checkPage, noConsoleError } from './helpers/testUtils';
import { BASE_URL } from './helpers/utils'
const BASE_URL = 'http://localhost:8080';
const pages = [ const pages = [
{ path: '/dashboard', title: '仪表盘' }, { path: '/dashboard', title: '仪表盘' },
{ path: '/nodeInfo', title: '节点信息' }, { path: '/nodeInfo', title: '节点信息' },