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

40 lines
1.2 KiB
TypeScript

import { Page, Locator } from '@playwright/test';
export class DashboardPage {
readonly page: Page;
readonly projectSelector: Locator;
readonly sidebarMenu: Locator;
readonly logoutButton: Locator;
constructor(page: Page) {
this.page = page;
this.projectSelector = page.locator('.project-selector, [data-testid="project-selector"]');
this.sidebarMenu = page.locator('.ant-menu, .sidebar-menu');
this.logoutButton = page.locator('button:has-text("退出"), [data-testid="logout"]');
}
async goto() {
await this.page.goto('/');
await this.page.waitForLoadState('networkidle');
}
async selectProject(projectName: string) {
await this.projectSelector.click();
await this.page.locator(`.ant-select-item:has-text("${projectName}")`).click();
await this.page.waitForLoadState('networkidle');
}
async navigateTo(menuItem: string) {
await this.sidebarMenu.locator(`text=${menuItem}`).click();
await this.page.waitForLoadState('networkidle');
}
async logout() {
await this.logoutButton.click();
}
async isDashboardVisible(): Promise<boolean> {
return await this.page.locator('.dashboard, [data-testid="dashboard"]').isVisible();
}
}