08ea5fbe98
添加用户管理视图、API和状态管理文件
108 lines
3.2 KiB
TypeScript
108 lines
3.2 KiB
TypeScript
import { BasePage } from './base-page';
|
|
|
|
export class UserPage extends BasePage {
|
|
private readonly selectors = {
|
|
pageTitle: '.page-title',
|
|
userAvatar: '.user-avatar',
|
|
userName: '.user-name',
|
|
userBio: '.user-bio',
|
|
statValue: '.stat-value',
|
|
statLabel: '.stat-label',
|
|
menuItem: '.menu-item',
|
|
menuTitle: '.menu-title',
|
|
menuSubtitle: '.menu-subtitle',
|
|
settingsItem: '.settings-item',
|
|
settingsLabel: '.settings-label',
|
|
settingsValue: '.settings-value',
|
|
};
|
|
|
|
async navigate() {
|
|
await this.page.goto(`${this.baseURL}/pages/user/index`);
|
|
await this.waitForLoad();
|
|
}
|
|
|
|
async getPageTitle(): Promise<string> {
|
|
return await this.getText(this.selectors.pageTitle);
|
|
}
|
|
|
|
async isUserAvatarVisible(): Promise<boolean> {
|
|
return await this.isVisible(this.selectors.userAvatar);
|
|
}
|
|
|
|
async getUserName(): Promise<string> {
|
|
return await this.getText(this.selectors.userName);
|
|
}
|
|
|
|
async getUserBio(): Promise<string> {
|
|
return await this.getText(this.selectors.userBio);
|
|
}
|
|
|
|
async getStatValues(): Promise<string[]> {
|
|
const elements = await this.page.$$(this.selectors.statValue);
|
|
const values: string[] = [];
|
|
for (const element of elements) {
|
|
values.push(await element.textContent() || '');
|
|
}
|
|
return values;
|
|
}
|
|
|
|
async getStatLabels(): Promise<string[]> {
|
|
const elements = await this.page.$$(this.selectors.statLabel);
|
|
const labels: string[] = [];
|
|
for (const element of elements) {
|
|
labels.push(await element.textContent() || '');
|
|
}
|
|
return labels;
|
|
}
|
|
|
|
async clickMenuItem(index: number) {
|
|
const menuItems = await this.page.$$(this.selectors.menuItem);
|
|
if (menuItems[index]) {
|
|
await menuItems[index].click();
|
|
}
|
|
}
|
|
|
|
async getMenuItemTitle(index: number): Promise<string> {
|
|
const menuItems = await this.page.$$(this.selectors.menuItem);
|
|
if (menuItems[index]) {
|
|
const titleElement = await menuItems[index].$(this.selectors.menuTitle);
|
|
return await titleElement?.textContent() || '';
|
|
}
|
|
return '';
|
|
}
|
|
|
|
async getMenuItemSubtitle(index: number): Promise<string> {
|
|
const menuItems = await this.page.$$(this.selectors.menuItem);
|
|
if (menuItems[index]) {
|
|
const subtitleElement = await menuItems[index].$(this.selectors.menuSubtitle);
|
|
return await subtitleElement?.textContent() || '';
|
|
}
|
|
return '';
|
|
}
|
|
|
|
async clickSettingsItem(index: number) {
|
|
const settingsItems = await this.page.$$(this.selectors.settingsItem);
|
|
if (settingsItems[index]) {
|
|
await settingsItems[index].click();
|
|
}
|
|
}
|
|
|
|
async getSettingsLabel(index: number): Promise<string> {
|
|
const settingsItems = await this.page.$$(this.selectors.settingsItem);
|
|
if (settingsItems[index]) {
|
|
const labelElement = await settingsItems[index].$(this.selectors.settingsLabel);
|
|
return await labelElement?.textContent() || '';
|
|
}
|
|
return '';
|
|
}
|
|
|
|
async getSettingsValue(index: number): Promise<string> {
|
|
const settingsItems = await this.page.$$(this.selectors.settingsItem);
|
|
if (settingsItems[index]) {
|
|
const valueElement = await settingsItems[index].$(this.selectors.settingsValue);
|
|
return await valueElement?.textContent() || '';
|
|
}
|
|
return '';
|
|
}
|
|
}
|