ether-docs/04-TESTING/e2e/pages/LoginPage.ts

38 lines
1.2 KiB
TypeScript

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<string> {
await this.errorMessage.waitFor({ state: 'visible', timeout: 5000 });
return await this.errorMessage.textContent() || '';
}
}