This repository has been archived on 2025-04-22. You can view files and clone it, but cannot push or open issues or pull requests.
hlk_autotest/tests/pages/report/performanceSummaryReport.ts
LingandRX 6517e4192c feat: 初始化慧来客自动化测试项目
- 添加项目配置文件和环境变量设置
- 创建测试用例目录结构和命名规范
- 实现基础测试 fixture 和页面对象模型
- 添加示例测试用例和数据生成器
- 配置 playwright 和 gitignore 文件
2024-12-22 19:18:27 +08:00

144 lines
5.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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(),
);
}
}
};
}