51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
/**
|
|
* 登录页面对象
|
|
* 封装登录相关的操作
|
|
*/
|
|
|
|
import { Page, expect } from '@playwright/test';
|
|
import { BasePage } from './BasePage';
|
|
|
|
export class LoginPage extends BasePage {
|
|
constructor(page: Page) {
|
|
super(page);
|
|
}
|
|
|
|
/**
|
|
* 访问首页
|
|
*/
|
|
async visitHomePage(): Promise<void> {
|
|
await this.goto(this.config.env.baseUrl);
|
|
await expect(this.page.getByRole('button', { name: 'Log in' })).toBeVisible();
|
|
}
|
|
|
|
/**
|
|
* 点击登录按钮
|
|
*/
|
|
async clickLoginButton(): Promise<void> {
|
|
await this.page.getByRole('button', { name: 'Log in' }).click();
|
|
await expect(this.page.getByRole('textbox', { name: 'Email Address' })).toBeVisible();
|
|
}
|
|
|
|
/**
|
|
* 输入登录凭证并登录
|
|
*/
|
|
async login(email: string, password: string): Promise<void> {
|
|
await this.page.getByRole('textbox', { name: 'Email Address' }).click();
|
|
await this.page.getByRole('textbox', { name: 'Email Address' }).fill(email);
|
|
await this.page.getByRole('textbox', { name: 'Psssword' }).click();
|
|
await this.page.getByRole('textbox', { name: 'Psssword' }).fill(password);
|
|
await this.page.getByRole('button', { name: 'Log in' }).click();
|
|
await expect(this.page.getByRole('link').filter({ hasText: '学生工作台' })).toBeVisible();
|
|
}
|
|
|
|
/**
|
|
* 完整登录流程
|
|
*/
|
|
async performLogin(): Promise<void> {
|
|
await this.visitHomePage();
|
|
await this.clickLoginButton();
|
|
await this.login(this.config.credentials.email, this.config.credentials.password);
|
|
}
|
|
}
|