ether-docs/04-TESTING/e2e/specs/cross-domain/owner-repair.spec.ts

117 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { test, expect } from '@playwright/test';
import { LoginPage } from '../../pages/LoginPage';
import { DashboardPage } from '../../pages/DashboardPage';
test.describe('业主报修全流程', () => {
let loginPage: LoginPage;
let dashboardPage: DashboardPage;
test.beforeEach(async ({ page }) => {
loginPage = new LoginPage(page);
dashboardPage = new DashboardPage(page);
await loginPage.goto();
await loginPage.loginAsAdmin();
await page.waitForURL('**/dashboard**', { timeout: 10000 });
});
test('TC-CROSS-001: 业主报修完整流程 - 从创建工单到验收', async ({ page }) => {
await dashboardPage.navigateTo('工单管理');
await page.waitForLoadState('networkidle');
const createButton = page.locator('button:has-text("新建"), button:has-text("创建")');
if (await createButton.isVisible()) {
await createButton.click();
await page.waitForLoadState('networkidle');
const titleInput = page.locator('input[id="title"], input[placeholder*="标题"]');
if (await titleInput.isVisible()) {
await titleInput.fill('E2E测试-业主报修工单');
}
const descInput = page.locator('textarea[id="description"], textarea[placeholder*="描述"]');
if (await descInput.isVisible()) {
await descInput.fill('E2E自动化测试业主报修全流程验证');
}
const submitButton = page.locator('button:has-text("确定"), button:has-text("提交")');
if (await submitButton.isVisible()) {
await submitButton.click();
await page.waitForLoadState('networkidle');
}
}
const workOrderRow = page.locator('tr:has-text("E2E测试-业主报修工单"), .ant-card:has-text("E2E测试")');
if (await workOrderRow.isVisible()) {
await expect(workOrderRow).toBeVisible();
}
});
test('TC-CROSS-001-派单: 工单派单流程', async ({ page }) => {
await dashboardPage.navigateTo('工单管理');
await page.waitForLoadState('networkidle');
const pendingOrder = page.locator('tr:has-text("待分配"), .ant-tag:has-text("待分配")').first();
if (await pendingOrder.isVisible()) {
await pendingOrder.click();
await page.waitForLoadState('networkidle');
const assignButton = page.locator('button:has-text("派单")');
if (await assignButton.isVisible()) {
await assignButton.click();
await page.waitForLoadState('networkidle');
}
}
});
test('TC-CROSS-001-执行完成: 工单执行与完成', async ({ page }) => {
await dashboardPage.navigateTo('工单管理');
await page.waitForLoadState('networkidle');
const assignedOrder = page.locator('tr:has-text("已派单"), .ant-tag:has-text("已派单")').first();
if (await assignedOrder.isVisible()) {
await assignedOrder.click();
await page.waitForLoadState('networkidle');
const startButton = page.locator('button:has-text("开始执行")');
if (await startButton.isVisible()) {
await startButton.click();
await page.waitForLoadState('networkidle');
}
const completeButton = page.locator('button:has-text("完成")');
if (await completeButton.isVisible()) {
await completeButton.click();
await page.waitForLoadState('networkidle');
}
}
});
test('TC-CROSS-001-验收: 工单验收流程', async ({ page }) => {
await dashboardPage.navigateTo('工单管理');
await page.waitForLoadState('networkidle');
const completedOrder = page.locator('tr:has-text("已完成"), .ant-tag:has-text("已完成")').first();
if (await completedOrder.isVisible()) {
await completedOrder.click();
await page.waitForLoadState('networkidle');
const verifyButton = page.locator('button:has-text("验收")');
if (await verifyButton.isVisible()) {
await verifyButton.click();
await page.waitForLoadState('networkidle');
const ratingSelect = page.locator('.ant-rate, [data-testid="rating"]');
if (await ratingSelect.isVisible()) {
await ratingSelect.locator('.ant-rate-star').nth(4).click();
}
const confirmButton = page.locator('button:has-text("确认"), button:has-text("提交")');
if (await confirmButton.isVisible()) {
await confirmButton.click();
await page.waitForLoadState('networkidle');
}
}
}
});
});