- 添加项目配置文件和环境变量设置 - 创建测试用例目录结构和命名规范 - 实现基础测试 fixture 和页面对象模型 - 添加示例测试用例和数据生成器 - 配置 playwright 和 gitignore 文件
90 lines
3.2 KiB
TypeScript
90 lines
3.2 KiB
TypeScript
import { Page } from '@playwright/test';
|
||
import { reportData } from './reportPage';
|
||
|
||
export class SpendingSummaryReportPage {
|
||
page: Page;
|
||
_reportData: reportData[];
|
||
/**
|
||
* 开支汇总表
|
||
*/
|
||
constructor(page: Page) {
|
||
this.page = page;
|
||
this._reportData = [
|
||
{
|
||
name: '支出汇总',
|
||
content: [
|
||
{ name: '累计支出', value: 0, lastValue: 0, index: -1 },
|
||
{ name: '营业收入支出', value: 0, lastValue: 0, index: -1 },
|
||
{ name: '备用金支出', value: 0, lastValue: 0, index: -1 },
|
||
],
|
||
},
|
||
{
|
||
name: '日常开支',
|
||
content: [{ name: '顾客餐', value: 0, lastValue: 0, index: -1 }],
|
||
},
|
||
];
|
||
}
|
||
|
||
get reportData(): reportData[] {
|
||
return this._reportData;
|
||
}
|
||
|
||
/**
|
||
* 获取报表数据的列的index
|
||
*/
|
||
updateReportDataIndex = async (): Promise<void> => {
|
||
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!) {
|
||
// 拿取th.name列的列数
|
||
let index = -1;
|
||
let occurrence = 0;
|
||
index = headers.findIndex(headerText => {
|
||
if (headerText === content.name) {
|
||
occurrence++; // 每次找到相同的文本,计数加1
|
||
if (category.name === '卖品销售') {
|
||
// 找到第二次出现的 content.name
|
||
return occurrence === 2;
|
||
} else {
|
||
// 找到第一次出现的 content.name
|
||
return occurrence === 1;
|
||
}
|
||
}
|
||
return false;
|
||
});
|
||
if (index !== -1) {
|
||
content.index = index + 1;
|
||
console.log(`${content.name} 列是第 ${index + 1} 列`);
|
||
} else {
|
||
throw new Error(`没有找到${content.name}列`);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
/**
|
||
*
|
||
* @param {1|2} store
|
||
*/
|
||
updateReportData = async (store: number): Promise<void> => {
|
||
const trLocator = this.page.locator('.main-table-body_tr').nth(store);
|
||
await trLocator.first().waitFor();
|
||
for (const category of this._reportData) {
|
||
for (const content of category.content!) {
|
||
// 保存上一次的数据
|
||
content.lastValue = content.value;
|
||
// 拿取当前的数据
|
||
const tdLocator = trLocator.locator('td');
|
||
const headers = await tdLocator.allInnerTexts();
|
||
if (headers.length === 0) {
|
||
throw new Error('没有获取到数据');
|
||
}
|
||
content.value = Number(headers[content.index!].trim() === '--' ? 0 : headers[content.index!].trim());
|
||
}
|
||
}
|
||
};
|
||
}
|