|
@@ -17,10 +17,47 @@ import { EnterpriseMiniPage } from '../../pages/mini/enterprise-mini.page';
|
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
// 测试常量
|
|
// 测试常量
|
|
|
-const TEST_ORDER_NAME = '跨端同步测试_1736049658420'; // 测试订单名称(从 order-create-sync 测试中创建)
|
|
|
|
|
|
|
+// 移除硬编码的订单名称,改为动态获取订单列表中的第一个订单
|
|
|
const MINI_LOGIN_PHONE = '13800001111'; // 小程序登录手机号
|
|
const MINI_LOGIN_PHONE = '13800001111'; // 小程序登录手机号
|
|
|
const MINI_LOGIN_PASSWORD = process.env.TEST_ENTERPRISE_PASSWORD || 'password123'; // 小程序登录密码
|
|
const MINI_LOGIN_PASSWORD = process.env.TEST_ENTERPRISE_PASSWORD || 'password123'; // 小程序登录密码
|
|
|
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * 获取订单列表中的第一个可用订单名称
|
|
|
|
|
+ * @param miniPage 企业小程序页面实例
|
|
|
|
|
+ * @returns 第一个订单的名称,如果没有订单则返回空字符串
|
|
|
|
|
+ */
|
|
|
|
|
+async function getFirstOrderName(miniPage: EnterpriseMiniPage): Promise<string> {
|
|
|
|
|
+ // 从订单列表页面获取所有订单卡片
|
|
|
|
|
+ const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
|
|
+
|
|
|
|
|
+ // 使用更精确的正则表达式匹配订单名称
|
|
|
|
|
+ // 订单名称格式: "跨端同步测试_1768469754054" 或 "Epic13验证测试_1768403960000_Story13.2已编辑"
|
|
|
|
|
+ // 使用负面预查避免匹配到日期
|
|
|
|
|
+ const orderNameMatches = Array.from(
|
|
|
|
|
+ pageContent.matchAll(/(跨端同步测试_\d{10,13}|Epic13验证测试_[\d_]+(?:_已编辑)?)/g)
|
|
|
|
|
+ ).map(match => match[1]);
|
|
|
|
|
+
|
|
|
|
|
+ if (orderNameMatches.length > 0) {
|
|
|
|
|
+ const firstOrderName = orderNameMatches[0];
|
|
|
|
|
+ console.debug(`[订单列表] 使用第一个测试订单: ${firstOrderName}`);
|
|
|
|
|
+ return firstOrderName;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 如果没有找到测试订单,尝试通过查找所有日期前的文本来获取订单名称
|
|
|
|
|
+ // 订单名称后面跟着 "YYYY-MM-DD 创建" 格式的日期
|
|
|
|
|
+ const allOrderMatches = Array.from(
|
|
|
|
|
+ pageContent.matchAll(/([^\n]+?)\s+\d{4}-\d{2}-\d{2}\s+创建/g)
|
|
|
|
|
+ ).map(match => match[1].trim());
|
|
|
|
|
+
|
|
|
|
|
+ if (allOrderMatches.length > 0) {
|
|
|
|
|
+ const firstOrderName = allOrderMatches[0];
|
|
|
|
|
+ console.debug(`[订单列表] 使用第一个可用订单: ${firstOrderName}`);
|
|
|
|
|
+ return firstOrderName;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ throw new Error('订单列表中没有找到任何可用订单');
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// 企业小程序登录辅助函数(暂未使用,保留供后续测试使用)
|
|
// 企业小程序登录辅助函数(暂未使用,保留供后续测试使用)
|
|
|
|
|
|
|
|
async function _loginMini(page: any) {
|
|
async function _loginMini(page: any) {
|
|
@@ -55,21 +92,25 @@ test.describe.serial('跨端数据同步测试 - 订单详情页完整性验证
|
|
|
// 3. 等待订单列表加载
|
|
// 3. 等待订单列表加载
|
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
|
|
|
|
|
|
- // 4. 点击测试订单卡片进入详情页
|
|
|
|
|
- await miniPage.clickOrderCardFromList(TEST_ORDER_NAME);
|
|
|
|
|
|
|
+ // 4. 动态获取第一个可用订单名称
|
|
|
|
|
+ const testOrderName = await getFirstOrderName(miniPage);
|
|
|
|
|
+ console.debug(`[小程序] 使用测试订单: ${testOrderName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 点击测试订单卡片进入详情页
|
|
|
|
|
+ await miniPage.clickOrderCardFromList(testOrderName);
|
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
|
console.debug('[小程序] 打开订单详情页');
|
|
console.debug('[小程序] 打开订单详情页');
|
|
|
|
|
|
|
|
- // 5. 验证订单详情页头部信息
|
|
|
|
|
|
|
+ // 6. 验证订单详情页头部信息
|
|
|
await miniPage.expectOrderDetailHeader({
|
|
await miniPage.expectOrderDetailHeader({
|
|
|
- orderName: TEST_ORDER_NAME,
|
|
|
|
|
|
|
+ orderName: testOrderName,
|
|
|
// orderNo, orderStatus, createdAt 等字段根据实际数据验证
|
|
// orderNo, orderStatus, createdAt 等字段根据实际数据验证
|
|
|
});
|
|
});
|
|
|
- console.debug(`[小程序] 订单名称 "${TEST_ORDER_NAME}" 显示正确 ✓`);
|
|
|
|
|
|
|
+ console.debug(`[小程序] 订单名称 "${testOrderName}" 显示正确 ✓`);
|
|
|
|
|
|
|
|
- // 6. 验证详情页包含订单名称
|
|
|
|
|
|
|
+ // 7. 验证详情页包含订单名称
|
|
|
const pageContent = await miniPage.page.textContent('body') || '';
|
|
const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
- expect(pageContent).toContain(TEST_ORDER_NAME);
|
|
|
|
|
|
|
+ expect(pageContent).toContain(testOrderName);
|
|
|
console.debug('[小程序] 订单详情页头部信息验证完成 ✓');
|
|
console.debug('[小程序] 订单详情页头部信息验证完成 ✓');
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -93,24 +134,42 @@ test.describe.serial('跨端数据同步测试 - 订单详情页完整性验证
|
|
|
// 3. 等待订单列表加载
|
|
// 3. 等待订单列表加载
|
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
|
|
|
|
|
|
- // 4. 点击测试订单卡片进入详情页
|
|
|
|
|
- await miniPage.clickOrderCardFromList(TEST_ORDER_NAME);
|
|
|
|
|
|
|
+ // 4. 动态获取第一个可用订单名称
|
|
|
|
|
+ const testOrderName = await getFirstOrderName(miniPage);
|
|
|
|
|
+ console.debug(`[小程序] 使用测试订单: ${testOrderName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 点击测试订单卡片进入详情页
|
|
|
|
|
+ await miniPage.clickOrderCardFromList(testOrderName);
|
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
|
console.debug('[小程序] 打开订单详情页');
|
|
console.debug('[小程序] 打开订单详情页');
|
|
|
|
|
|
|
|
- // 5. 验证订单详情页基本信息区域显示
|
|
|
|
|
|
|
+ // 6. 等待订单详情页数据加载完成
|
|
|
|
|
+ // 等待"加载中..."消失,或者等待订单名称元素出现
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 等待页面不再显示"加载中..."
|
|
|
|
|
+ await miniPage.page.waitForFunction(
|
|
|
|
|
+ () => !document.body?.textContent?.includes('加载中'),
|
|
|
|
|
+ { timeout: TIMEOUTS.PAGE_LOAD }
|
|
|
|
|
+ ).catch(() => {
|
|
|
|
|
+ console.debug('[小程序] 加载状态检查超时,继续执行测试');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 验证订单详情页基本信息区域显示
|
|
|
const pageContent = await miniPage.page.textContent('body') || '';
|
|
const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
- const hasBasicInfo = pageContent.includes('预计人数') ||
|
|
|
|
|
- pageContent.includes('实际人数') ||
|
|
|
|
|
- pageContent.includes('开始日期') ||
|
|
|
|
|
- pageContent.includes('结束日期');
|
|
|
|
|
- if (hasBasicInfo) {
|
|
|
|
|
- console.debug('[小程序] 订单详情页基本信息显示 ✓');
|
|
|
|
|
- } else {
|
|
|
|
|
- console.debug('[小程序] 基本信息未显示(可能未设置)');
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- // 6. 尝试验证预计人数字段
|
|
|
|
|
|
|
+ // 验证基本信息系统性地存在(这些字段应该总是显示)
|
|
|
|
|
+ expect(pageContent).toContain('预计人数');
|
|
|
|
|
+ expect(pageContent).toContain('实际人数');
|
|
|
|
|
+ expect(pageContent).toContain('开始日期');
|
|
|
|
|
+ // 页面显示的是"预计结束"和"实际结束",而不是"结束日期"
|
|
|
|
|
+ expect(pageContent).toContain('预计结束');
|
|
|
|
|
+ expect(pageContent).toContain('实际结束');
|
|
|
|
|
+ expect(pageContent).toContain('渠道');
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[小程序] 订单详情页基本信息显示 ✓');
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 尝试验证预计人数字段(如果有实际数据)
|
|
|
await miniPage.expectOrderDetailBasicInfo({
|
|
await miniPage.expectOrderDetailBasicInfo({
|
|
|
// 根据实际数据填写
|
|
// 根据实际数据填写
|
|
|
});
|
|
});
|
|
@@ -137,27 +196,40 @@ test.describe.serial('跨端数据同步测试 - 订单详情页完整性验证
|
|
|
// 3. 等待订单列表加载
|
|
// 3. 等待订单列表加载
|
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
|
|
|
|
|
|
- // 4. 点击测试订单卡片进入详情页
|
|
|
|
|
- await miniPage.clickOrderCardFromList(TEST_ORDER_NAME);
|
|
|
|
|
|
|
+ // 4. 动态获取第一个可用订单名称
|
|
|
|
|
+ const testOrderName = await getFirstOrderName(miniPage);
|
|
|
|
|
+ console.debug(`[小程序] 使用测试订单: ${testOrderName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 点击测试订单卡片进入详情页
|
|
|
|
|
+ await miniPage.clickOrderCardFromList(testOrderName);
|
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
|
console.debug('[小程序] 打开订单详情页');
|
|
console.debug('[小程序] 打开订单详情页');
|
|
|
|
|
|
|
|
- // 5. 获取打卡数据统计
|
|
|
|
|
|
|
+ // 6. 等待订单详情页数据加载完成
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+ await miniPage.page.waitForFunction(
|
|
|
|
|
+ () => !document.body?.textContent?.includes('加载中'),
|
|
|
|
|
+ { timeout: TIMEOUTS.PAGE_LOAD }
|
|
|
|
|
+ ).catch(() => {
|
|
|
|
|
+ console.debug('[小程序] 加载状态检查超时,继续执行测试');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 验证打卡数据统计区域显示
|
|
|
|
|
+ const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
|
|
+
|
|
|
|
|
+ // 验证打卡数据统计字段系统性地存在
|
|
|
|
|
+ expect(pageContent).toContain('打卡数据统计');
|
|
|
|
|
+ expect(pageContent).toContain('本月打卡');
|
|
|
|
|
+ expect(pageContent).toContain('工资视频');
|
|
|
|
|
+ expect(pageContent).toContain('个税视频');
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 获取打卡数据统计
|
|
|
const stats = await miniPage.getOrderCheckInStats();
|
|
const stats = await miniPage.getOrderCheckInStats();
|
|
|
console.debug(`[小程序] 本月打卡人数: ${stats.monthlyCheckInCount}`);
|
|
console.debug(`[小程序] 本月打卡人数: ${stats.monthlyCheckInCount}`);
|
|
|
console.debug(`[小程序] 工资视频数量: ${stats.salaryVideoCount}`);
|
|
console.debug(`[小程序] 工资视频数量: ${stats.salaryVideoCount}`);
|
|
|
console.debug(`[小程序] 个税视频数量: ${stats.taxVideoCount}`);
|
|
console.debug(`[小程序] 个税视频数量: ${stats.taxVideoCount}`);
|
|
|
|
|
|
|
|
- // 6. 验证打卡数据统计区域显示
|
|
|
|
|
- const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
|
|
- const hasCheckInStats = pageContent.includes('打卡') ||
|
|
|
|
|
- pageContent.includes('工资视频') ||
|
|
|
|
|
- pageContent.includes('个税视频');
|
|
|
|
|
- if (hasCheckInStats) {
|
|
|
|
|
- console.debug('[小程序] 订单详情页打卡数据统计显示 ✓');
|
|
|
|
|
- } else {
|
|
|
|
|
- console.debug('[小程序] 打卡数据统计未显示(可能无打卡记录)');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ console.debug('[小程序] 订单详情页打卡数据统计显示 ✓');
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -180,32 +252,49 @@ test.describe.serial('跨端数据同步测试 - 订单详情页完整性验证
|
|
|
// 3. 等待订单列表加载
|
|
// 3. 等待订单列表加载
|
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
|
|
|
|
|
|
- // 4. 点击测试订单卡片进入详情页
|
|
|
|
|
- await miniPage.clickOrderCardFromList(TEST_ORDER_NAME);
|
|
|
|
|
|
|
+ // 4. 动态获取第一个可用订单名称
|
|
|
|
|
+ const testOrderName = await getFirstOrderName(miniPage);
|
|
|
|
|
+ console.debug(`[小程序] 使用测试订单: ${testOrderName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 点击测试订单卡片进入详情页
|
|
|
|
|
+ await miniPage.clickOrderCardFromList(testOrderName);
|
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
|
console.debug('[小程序] 打开订单详情页');
|
|
console.debug('[小程序] 打开订单详情页');
|
|
|
|
|
|
|
|
- // 5. 获取关联人才列表
|
|
|
|
|
|
|
+ // 6. 等待订单详情页数据加载完成
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+ await miniPage.page.waitForFunction(
|
|
|
|
|
+ () => !document.body?.textContent?.includes('加载中'),
|
|
|
|
|
+ { timeout: TIMEOUTS.PAGE_LOAD }
|
|
|
|
|
+ ).catch(() => {
|
|
|
|
|
+ console.debug('[小程序] 加载状态检查超时,继续执行测试');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 验证关联人才区域显示
|
|
|
|
|
+ const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
|
|
+ expect(pageContent).toContain('关联人才');
|
|
|
|
|
+
|
|
|
|
|
+ // 8. 获取关联人才列表
|
|
|
const persons = await miniPage.getOrderRelatedPersons();
|
|
const persons = await miniPage.getOrderRelatedPersons();
|
|
|
console.debug(`[小程序] 关联人才数量: ${persons.length}`);
|
|
console.debug(`[小程序] 关联人才数量: ${persons.length}`);
|
|
|
|
|
|
|
|
- // 6. 验证关联人才列表显示
|
|
|
|
|
|
|
+ // 9. 验证关联人才列表显示(即使为空,也应该显示该区域)
|
|
|
|
|
+ console.debug('[小程序] 订单详情页关联人才列表区域显示 ✓');
|
|
|
|
|
+
|
|
|
|
|
+ // 如果有人才,显示第一个人才的信息
|
|
|
if (persons.length > 0) {
|
|
if (persons.length > 0) {
|
|
|
- console.debug('[小程序] 订单详情页关联人才列表显示 ✓');
|
|
|
|
|
- // 显示第一个人才的信息
|
|
|
|
|
const firstPerson = persons[0];
|
|
const firstPerson = persons[0];
|
|
|
console.debug(`[小程序] 第一个人才: ${firstPerson.name}, 性别: ${firstPerson.gender}, 状态: ${firstPerson.workStatus}`);
|
|
console.debug(`[小程序] 第一个人才: ${firstPerson.name}, 性别: ${firstPerson.gender}, 状态: ${firstPerson.workStatus}`);
|
|
|
- } else {
|
|
|
|
|
- console.debug('[小程序] 关联人才列表未显示(可能未添加人员)');
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- // 7. 验证页面包含"关联人才"或"人员"相关文本
|
|
|
|
|
- const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
|
|
- const hasPersonsSection = pageContent.includes('人员') ||
|
|
|
|
|
- pageContent.includes('人才') ||
|
|
|
|
|
- pageContent.includes('在职');
|
|
|
|
|
- if (hasPersonsSection) {
|
|
|
|
|
- console.debug('[小程序] 订单详情页人员区域显示 ✓');
|
|
|
|
|
|
|
+ // 验证人才卡片包含必要字段
|
|
|
|
|
+ expect(firstPerson.name).toBeTruthy();
|
|
|
|
|
+ // 页面显示的状态可能是"在职"、"已就业"或其他工作状态
|
|
|
|
|
+ const hasWorkStatus = pageContent.includes('在职') ||
|
|
|
|
|
+ pageContent.includes('已就业') ||
|
|
|
|
|
+ pageContent.includes('待入职');
|
|
|
|
|
+ expect(hasWorkStatus).toBeTruthy();
|
|
|
|
|
+ } else {
|
|
|
|
|
+ console.debug('[小程序] 当前订单没有关联人才(符合预期)');
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -229,23 +318,36 @@ test.describe.serial('跨端数据同步测试 - 订单详情页完整性验证
|
|
|
// 3. 等待订单列表加载
|
|
// 3. 等待订单列表加载
|
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
await miniPage.page.waitForTimeout(TIMEOUTS.LONG);
|
|
|
|
|
|
|
|
- // 4. 点击测试订单卡片进入详情页
|
|
|
|
|
- await miniPage.clickOrderCardFromList(TEST_ORDER_NAME);
|
|
|
|
|
|
|
+ // 4. 动态获取第一个可用订单名称
|
|
|
|
|
+ const testOrderName = await getFirstOrderName(miniPage);
|
|
|
|
|
+ console.debug(`[小程序] 使用测试订单: ${testOrderName}`);
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 点击测试订单卡片进入详情页
|
|
|
|
|
+ await miniPage.clickOrderCardFromList(testOrderName);
|
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
await miniPage.expectUrl('/pages/yongren/order/detail/index');
|
|
|
console.debug('[小程序] 打开订单详情页');
|
|
console.debug('[小程序] 打开订单详情页');
|
|
|
|
|
|
|
|
- // 5. 验证订单详情页包含订单名称
|
|
|
|
|
|
|
+ // 6. 等待订单详情页数据加载完成
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+ await miniPage.page.waitForFunction(
|
|
|
|
|
+ () => !document.body?.textContent?.includes('加载中'),
|
|
|
|
|
+ { timeout: TIMEOUTS.PAGE_LOAD }
|
|
|
|
|
+ ).catch(() => {
|
|
|
|
|
+ console.debug('[小程序] 加载状态检查超时,继续执行测试');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 7. 验证订单详情页包含订单名称
|
|
|
const pageContent = await miniPage.page.textContent('body') || '';
|
|
const pageContent = await miniPage.page.textContent('body') || '';
|
|
|
- expect(pageContent).toContain(TEST_ORDER_NAME);
|
|
|
|
|
|
|
+ expect(pageContent).toContain(testOrderName);
|
|
|
console.debug('[小程序] 订单详情页显示后台创建的订单信息 ✓');
|
|
console.debug('[小程序] 订单详情页显示后台创建的订单信息 ✓');
|
|
|
|
|
|
|
|
- // 6. 验证订单状态字段(如果有)
|
|
|
|
|
- const hasOrderStatus = pageContent.includes('进行中') ||
|
|
|
|
|
|
|
+ // 8. 验证订单状态字段(草稿、进行中、已完成、未开始等状态应该显示)
|
|
|
|
|
+ const hasOrderStatus = pageContent.includes('草稿') ||
|
|
|
|
|
+ pageContent.includes('进行中') ||
|
|
|
pageContent.includes('已完成') ||
|
|
pageContent.includes('已完成') ||
|
|
|
pageContent.includes('未开始');
|
|
pageContent.includes('未开始');
|
|
|
- if (hasOrderStatus) {
|
|
|
|
|
- console.debug('[小程序] 订单状态字段显示 ✓');
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ expect(hasOrderStatus).toBeTruthy();
|
|
|
|
|
+ console.debug('[小程序] 订单状态字段显示 ✓');
|
|
|
|
|
|
|
|
console.debug('[小程序] 后台编辑后订单详情页同步验证完成 ✓');
|
|
console.debug('[小程序] 后台编辑后订单详情页同步验证完成 ✓');
|
|
|
});
|
|
});
|