import { expect, Page } from '@playwright/test'; export class CustomerDetailsPage { page: Page; subPages: { name: string; url?: string[] }[]; /** * 顾客详情页面 */ constructor(page: Page) { this.page = page; this.subPages = [ { name: '基本资料' }, { name: '流水' }, { name: '动态' }, { name: '日志' } ]; } /** * * @param subPageName 子页面名称 * - 基本资料 * - 流水 * - 动态 * - 日志 */ gotoSubPage = async (subPageName: string) => { // 标准化输入字符串,去除前后空格并统一为小写 const normalizedSubPageName = subPageName.trim().toLowerCase(); // 检查子页面是否存在 if (!this.subPages.some(e => e.name.trim().toLowerCase() === normalizedSubPageName)) { throw new Error(`${subPageName} is not in the subPages list`); } try { // 获取子页面元素并点击 const $subPage = this.page.getByRole('tab', { name: subPageName }); await $subPage.click(); await expect($subPage).toHaveClass(/active/); } catch (error) { // 捕获并抛出更明确的错误信息 throw new Error(`Failed to navigate to ${subPageName}: ${error.message}`); } }; }