Files
张翔 6d92024b63 feat: 修复测试套件问题并添加Woodpecker CI配置
- 修复API测试认证问题:创建全局认证设置,更新Playwright配置
- 优化回归测试稳定性:增加超时时间到15秒,修复定位器
- 创建Woodpecker CI工作流:CI、部署和质量门禁配置
- 添加Jest配置和测试脚本
- 移除登录页面的默认账号密码显示(安全问题修复)
2026-03-09 10:26:02 +08:00

72 lines
2.5 KiB
TypeScript

import { Page } from '@playwright/test';
import { BasePage } from './BasePage';
import { getPageConfig } from '../config/test-pages';
import { TestConfig } from '../types';
export class ContactPage extends BasePage {
constructor(page: Page, config?: TestConfig) {
const pageConfig = getPageConfig('contact');
super(page, pageConfig.url, config);
}
async fillContactForm(data: { name: string; email: string; phone: string; message: string; subject?: string }): Promise<void> {
await this.fill('[data-testid="name-input"]', data.name);
await this.fill('[data-testid="phone-input"]', data.phone);
await this.fill('[data-testid="email-input"]', data.email);
if (data.subject) {
await this.fill('[data-testid="subject-input"]', data.subject);
}
await this.fill('[data-testid="message-input"]', data.message);
}
async submitForm(): Promise<void> {
await this.click('[data-testid="submit-button"]');
}
async getFormErrorMessage(): Promise<string> {
const errorElement = await this.page.locator('[data-testid="error-message"]');
if (await errorElement.count() > 0) {
return await errorElement.first().textContent() || '';
}
return '';
}
async getFormSuccessMessage(): Promise<string> {
await this.page.waitForTimeout(1000);
const successElement = await this.page.locator('[data-testid="success-message"]');
if (await successElement.count() > 0) {
return await successElement.textContent() || '';
}
return '';
}
async getToastMessage(): Promise<{ message: string; type: 'success' | 'error' }> {
const toastElement = await this.page.locator('[data-testid="toast-notification"]');
if (await toastElement.count() > 0) {
const messageElement = toastElement.locator('p');
const message = await messageElement.textContent() || '';
const type = await toastElement.getAttribute('data-type') as 'success' | 'error';
return { message, type };
}
return { message: '', type: 'success' };
}
async waitForToast(timeout: number = 5000): Promise<boolean> {
try {
await this.page.waitForSelector('[data-testid="toast-notification"]', { timeout });
return true;
} catch {
return false;
}
}
async waitForToastHidden(timeout: number = 5000): Promise<boolean> {
try {
await this.page.waitForSelector('[data-testid="toast-notification"]', { state: 'hidden', timeout });
return true;
} catch {
return false;
}
}
}