import { Page, Locator } from '@playwright/test'; export class DashboardPage { readonly page: Page; readonly userInfo: Locator; readonly userManagementLink: Locator; readonly roleManagementLink: Locator; readonly menuManagementLink: Locator; readonly systemConfigLink: Locator; readonly noticeManagementLink: Locator; readonly fileManagementLink: Locator; readonly operationLogLink: Locator; readonly loginLogLink: Locator; readonly dictionaryLink: Locator; constructor(page: Page) { this.page = page; this.userInfo = page.locator('.ant-avatar'); this.userManagementLink = page.locator('.ant-menu-item:has-text("用户管理")'); this.roleManagementLink = page.locator('.ant-menu-item:has-text("角色管理")'); this.menuManagementLink = page.locator('.ant-menu-item:has-text("菜单管理")'); this.systemConfigLink = page.locator('.ant-menu-item:has-text("参数配置")'); this.noticeManagementLink = page.locator('.ant-menu-item:has-text("通知公告")'); this.fileManagementLink = page.locator('.ant-menu-item:has-text("文件列表")'); this.operationLogLink = page.locator('.ant-menu-item:has-text("操作日志")'); this.loginLogLink = page.locator('.ant-menu-item:has-text("登录日志")'); this.dictionaryLink = page.locator('.ant-menu-item:has-text("字典管理")'); } async goto() { await this.page.goto('/dashboard'); await this.page.waitForLoadState('networkidle'); } async navigateToUserManagement() { await this.clickSubMenu('系统管理'); await this.userManagementLink.click(); await this.page.waitForURL('**/users', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToRoleManagement() { await this.clickSubMenu('系统管理'); await this.roleManagementLink.click(); await this.page.waitForURL('**/roles', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToMenuManagement() { await this.clickSubMenu('系统管理'); await this.menuManagementLink.click(); await this.page.waitForURL('**/menus', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToSystemConfig() { await this.clickSubMenu('系统配置'); await this.systemConfigLink.click(); await this.page.waitForURL('**/sys/config', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToNoticeManagement() { await this.clickSubMenu('通知中心'); await this.noticeManagementLink.click(); await this.page.waitForURL('**/notice', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToFileManagement() { await this.clickSubMenu('文件管理'); await this.fileManagementLink.click(); await this.page.waitForURL('**/files', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToOperationLog() { await this.clickSubMenu('审计中心'); await this.operationLogLink.click(); await this.page.waitForURL('**/oplog', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToLoginLog() { await this.clickSubMenu('审计中心'); await this.loginLogLink.click(); await this.page.waitForURL('**/loginlog', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } async navigateToDictionary() { await this.clickSubMenu('系统配置'); await this.dictionaryLink.click(); await this.page.waitForURL('**/dict', { timeout: 30000 }); await this.page.waitForLoadState('networkidle'); } private async clickSubMenu(label: string) { const subMenu = this.page.locator(`.ant-menu-submenu-title:has-text("${label}")`); if (await subMenu.isVisible()) { await subMenu.click(); await this.page.waitForTimeout(500); } } async getUsername(): Promise { return await this.userInfo.textContent(); } }