feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
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 '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user