- 添加项目配置文件和环境变量设置 - 创建测试用例目录结构和命名规范 - 实现基础测试 fixture 和页面对象模型 - 添加示例测试用例和数据生成器 - 配置 playwright 和 gitignore 文件
		
			
				
	
	
		
			144 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { Page } from '@playwright/test';
 | ||
| import { type reportData } from './reportPage';
 | ||
| 
 | ||
| export class PerformanceSummaryReportPage {
 | ||
|     page: Page;
 | ||
|     private readonly _reportData: reportData[];
 | ||
|     /**
 | ||
|      * 业绩汇总表
 | ||
|      */
 | ||
|     constructor(page: Page) {
 | ||
|         this.page = page;
 | ||
|         this._reportData = [
 | ||
|             {
 | ||
|                 name: '营收明细',
 | ||
|                 content: [
 | ||
|                     { name: '现金类总额', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '现金', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '划卡', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '划赠金', value: 0, lastValue: 0, index: 0 },
 | ||
|                 ],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '开支明细',
 | ||
|                 content: [{ name: '支出总额', value: 0, lastValue: 0, index: 0 }],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '现金业绩',
 | ||
|                 content: [
 | ||
|                     { name: '项目合计', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '卖品业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '开充卡业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '开卡业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '充值业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '总现金业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                 ],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '划卡业绩',
 | ||
|                 content: [{ name: '项目合计', value: 0, lastValue: 0, index: 0 }],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '消耗业绩',
 | ||
|                 content: [
 | ||
|                     { name: '总消耗业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '项目总数', value: 0, lastValue: 0, index: 0 },
 | ||
|                 ],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '客流',
 | ||
|                 content: [
 | ||
|                     { name: '客数', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '客次', value: 0, lastValue: 0, index: 0 },
 | ||
|                 ],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '套餐销售',
 | ||
|                 content: [
 | ||
|                     { name: '总数量', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '普通数量', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '总金额', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '总业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                 ],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '卖品销售',
 | ||
|                 content: [
 | ||
|                     { name: '总数量', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '普通数量', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '总金额', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '总业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                 ],
 | ||
|             },
 | ||
|             {
 | ||
|                 name: '其他指标',
 | ||
|                 content: [
 | ||
|                     { name: '客单价', value: 0, lastValue: 0, index: 0 },
 | ||
|                     { name: '总耗业绩', value: 0, lastValue: 0, index: 0 },
 | ||
|                 ],
 | ||
|             },
 | ||
|         ];
 | ||
|     }
 | ||
| 
 | ||
|     get reportData() {
 | ||
|         return this._reportData;
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 更新业绩汇总表数据索引
 | ||
|      */
 | ||
|     updateReportDataIndex = async () => {
 | ||
|         const thLocator = this.page.locator('.m-table__header-wrapper tr').last().locator('th');
 | ||
|         await thLocator.first().waitFor();
 | ||
|         const headers = await thLocator.allInnerTexts();
 | ||
| 
 | ||
|         for (const category of this._reportData) {
 | ||
|             for (const content of category.content!) {
 | ||
|                 let index: number;
 | ||
|                 let occurrence = 0;
 | ||
|                 index = headers.findIndex(headerText => {
 | ||
|                     if (headerText === content.name) {
 | ||
|                         occurrence++; // 每次找到相同的文本,计数加1
 | ||
|                         if (category.name === '卖品销售' || category.name === '划卡业绩') {
 | ||
|                             // 找到第二次出现的 content.name
 | ||
|                             return occurrence === 2;
 | ||
|                         } else {
 | ||
|                             // 找到第一次出现的 content.name
 | ||
|                             return occurrence === 1;
 | ||
|                         }
 | ||
|                     }
 | ||
|                     return false;
 | ||
|                 });
 | ||
|                 if (index !== -1) {
 | ||
|                     content.index = index + 1;
 | ||
|                 } else {
 | ||
|                     throw new Error(`没有找到${content.name}列`);
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
|     };
 | ||
| 
 | ||
|     /**
 | ||
|      * 拿取业绩汇总表的汇总数据
 | ||
|      */
 | ||
|     updateReportDataFromTotal = async () => {
 | ||
|         // 合计行定位器
 | ||
|         const $totalTr = this.page.locator('.m-table-footer .m-table__row');
 | ||
|         await $totalTr.first().waitFor();
 | ||
|         // 拿取当前的数据
 | ||
|         const $$totalTd = $totalTr.locator('td');
 | ||
|         const totalAllText = await $$totalTd.allInnerTexts();
 | ||
|         if (totalAllText.length === 0) {
 | ||
|             return new Error(`${$totalTr.toString()}没有找到`);
 | ||
|         }
 | ||
|         for (const category of this._reportData) {
 | ||
|             for (const content of category.content!) {
 | ||
|                 content.lastValue = content.value;
 | ||
|                 content.value = Number(
 | ||
|                     totalAllText[content.index].trim() === '--' ? 0 : totalAllText[content.index].trim(),
 | ||
|                 );
 | ||
|             }
 | ||
|         }
 | ||
|     };
 | ||
| }
 |