import { Page, Locator } from '@playwright/test'; export class LoginPage { readonly page: Page; readonly usernameInput: Locator; readonly passwordInput: Locator; readonly loginButton: Locator; readonly errorMessage: Locator; constructor(page: Page) { this.page = page; this.usernameInput = page.locator('input[placeholder*="用户名"], input[id="username"], input[name="username"]'); this.passwordInput = page.locator('input[placeholder*="密码"], input[id="password"], input[name="password"]'); this.loginButton = page.locator('button[type="submit"], button:has-text("登录")'); this.errorMessage = page.locator('.ant-message-error, .ant-alert-error, .error-message'); } async goto() { await this.page.goto('/auth/login'); await this.page.waitForLoadState('networkidle'); } async login(username: string, password: string) { await this.usernameInput.fill(username); await this.passwordInput.fill(password); await this.loginButton.click(); } async loginAsAdmin() { await this.login('admin', 'admin123'); } async getErrorMessage(): Promise { await this.errorMessage.waitFor({ state: 'visible', timeout: 5000 }); return await this.errorMessage.textContent() || ''; } }