import { Page, expect } from '@playwright/test'; export class SystemConfigPage { readonly page: Page; readonly table; readonly addButton; readonly saveButton; readonly cancelButton; readonly dialog; readonly configNameInput; readonly configKeyInput; readonly configValueInput; constructor(page: Page) { this.page = page; this.table = page.locator('.el-table'); this.addButton = page.getByRole('button', { name: '新增配置' }); this.saveButton = page.getByRole('button', { name: '确定' }); this.cancelButton = page.getByRole('button', { name: '取消' }); this.dialog = page.locator('.el-dialog'); this.configNameInput = page.locator('.el-dialog').getByRole('textbox', { name: '参数名称' }); this.configKeyInput = page.locator('.el-dialog').getByRole('textbox', { name: '参数键名' }); this.configValueInput = page.locator('.el-dialog').getByRole('textbox', { name: '参数值' }); } async goto() { try { console.log('导航到系统配置页面...'); await this.page.goto('/sys/config'); await this.page.waitForLoadState('domcontentloaded'); await this.page.waitForTimeout(1000); await this.table.waitFor({ state: 'visible', timeout: 15000 }); await expect(this.page).toHaveURL(/.*config/, { timeout: 15000 }); console.log('系统配置页面加载完成'); } catch (error) { await this.page.screenshot({ path: `test-results/system-config-error-${Date.now()}.png` }); console.error('导航到系统配置页面失败:', error); throw new Error(`导航到系统配置页面失败: ${error instanceof Error ? error.message : String(error)}`); } } async addConfig(configName: string, configKey: string, configValue: string) { await this.addButton.click(); await this.page.waitForTimeout(500); await this.configNameInput.fill(configName); await this.configKeyInput.fill(configKey); await this.configValueInput.fill(configValue); await this.saveButton.click(); await this.page.waitForLoadState('networkidle'); } async editConfig(configKey: string, newValue: string) { const row = this.table.locator('tr').filter({ hasText: configKey }).first(); const editBtn = row.getByRole('button', { name: '编辑' }); await editBtn.click(); await this.page.waitForTimeout(500); await this.configValueInput.clear(); await this.configValueInput.fill(newValue); await this.saveButton.click(); await this.page.waitForLoadState('networkidle'); } async deleteConfig(configKey: string) { const row = this.table.locator('tr').filter({ hasText: configKey }).first(); const deleteBtn = row.getByRole('button', { name: '删除' }); await deleteBtn.click(); await this.page.waitForTimeout(500); const confirmBtn = this.page.locator('.el-message-box').getByRole('button', { name: '确定' }); await confirmBtn.click(); await this.page.waitForLoadState('networkidle'); } async getTableRowCount() { const rows = await this.table.locator('.el-table__row').count(); return rows; } async verifyTableContains(text: string) { await expect(this.table).toContainText(text); } }