38 lines
1.2 KiB
TypeScript
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() || '';
|
|
}
|
|
}
|