dashboard-navigation.spec.ts 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import { TIMEOUTS } from '../../utils/timeouts';
  2. import { test, expect } from '../../utils/test-setup';
  3. // import { EnterpriseMiniPage } from '../../pages/mini/enterprise-mini.page';
  4. /**
  5. * 首页导航和交互测试 (Story 13.7)
  6. *
  7. * 测试目标:验证企业小程序首页 dashboard 的导航和交互功能
  8. *
  9. * Playwright MCP 探索结果 (2026-01-14):
  10. * - 底部导航正常工作 (首页/人才/订单/数据/设置)
  11. * - 人才列表页人才卡片点击可导航到详情页
  12. * - 首页快捷操作按钮未触发跳转(可能为展示用途)
  13. * - 首页"查看全部"链接未触发跳转
  14. * - 首页人才卡片未触发跳转
  15. */
  16. // 测试数据常量
  17. const TEST_USER_PHONE = '13800001111';
  18. const TEST_USER_PASSWORD = 'password123';
  19. const TEST_TALENT_NAME = '测试残疾人_1768346782426_12_8219';
  20. // 使用 test.describe.serial 确保测试按顺序执行
  21. test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
  22. // 每个测试使用独立的浏览器上下文
  23. test.use({ storageState: undefined });
  24. /**
  25. * 测试场景:底部导航 - 点击人才按钮
  26. */
  27. test('应该通过底部导航跳转到人才页面', async ({ enterpriseMiniPage: miniPage }) => {
  28. // 1. 登录
  29. await miniPage.goto();
  30. await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
  31. await miniPage.expectLoginSuccess();
  32. await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
  33. // 2. 点击底部导航"人才"按钮
  34. await miniPage.clickBottomNav('talent');
  35. // 3. 验证 URL 正确
  36. await miniPage.expectUrl('/pages/yongren/talent/list/index');
  37. // 4. 验证页面标题(仅记录调试信息)
  38. await miniPage.expectPageTitle('人才管理');
  39. console.debug('[导航] 底部导航跳转到人才页面 ✓');
  40. });
  41. /**
  42. * 测试场景:底部导航 - 点击订单按钮
  43. */
  44. test('应该通过底部导航跳转到订单页面', async ({ enterpriseMiniPage: miniPage }) => {
  45. // 1. 登录
  46. await miniPage.goto();
  47. await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
  48. await miniPage.expectLoginSuccess();
  49. await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
  50. // 2. 点击底部导航"订单"按钮
  51. await miniPage.clickBottomNav('order');
  52. // 3. 验证 URL 正确
  53. await miniPage.expectUrl('/pages/yongren/order');
  54. // 4. 验证页面标题
  55. await miniPage.expectPageTitle('订单列表');
  56. console.debug('[导航] 底部导航跳转到订单页面 ✓');
  57. });
  58. /**
  59. * 测试场景:底部导航 - 点击数据按钮
  60. */
  61. test('应该通过底部导航跳转到数据页面', async ({ enterpriseMiniPage: miniPage }) => {
  62. // 1. 登录
  63. await miniPage.goto();
  64. await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
  65. await miniPage.expectLoginSuccess();
  66. await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
  67. // 2. 点击底部导航"数据"按钮
  68. await miniPage.clickBottomNav('data');
  69. // 3. 验证 URL 正确
  70. await miniPage.expectUrl('/pages/yongren/data');
  71. console.debug('[导航] 底部导航跳转到数据页面 ✓');
  72. });
  73. /**
  74. * 测试场景:底部导航 - 点击设置按钮
  75. */
  76. test('应该通过底部导航跳转到设置页面', async ({ enterpriseMiniPage: miniPage }) => {
  77. // 1. 登录
  78. await miniPage.goto();
  79. await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
  80. await miniPage.expectLoginSuccess();
  81. await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
  82. // 2. 点击底部导航"设置"按钮
  83. await miniPage.clickBottomNav('settings');
  84. // 3. 验证 URL 正确
  85. await miniPage.expectUrl('/pages/yongren/settings');
  86. console.debug('[导航] 底部导航跳转到设置页面 ✓');
  87. });
  88. /**
  89. * 测试场景:返回首页功能
  90. */
  91. test('应该可以通过底部导航首页按钮返回首页', async ({ enterpriseMiniPage: miniPage }) => {
  92. const page = miniPage.page;
  93. // 1. 登录
  94. await miniPage.goto();
  95. await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
  96. await miniPage.expectLoginSuccess();
  97. await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
  98. // 2. 先导航到其他页面(人才页面)
  99. await miniPage.clickBottomNav('talent');
  100. await miniPage.expectUrl('/pages/yongren/talent/list/index');
  101. // 3. 返回首页
  102. await miniPage.goBackToHome();
  103. // 4. 验证首页元素正确显示
  104. const dashboard = page.getByText('分配人才');
  105. await expect(dashboard).toBeVisible();
  106. console.debug('[导航] 返回首页 ✓');
  107. });
  108. /**
  109. * 测试场景:人才卡片点击导航
  110. */
  111. test('应该点击人才卡片跳转到人才详情页', async ({ enterpriseMiniPage: miniPage }) => {
  112. // 1. 登录
  113. await miniPage.goto();
  114. await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
  115. await miniPage.expectLoginSuccess();
  116. await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
  117. // 2. 导航到人才列表页面
  118. await miniPage.clickBottomNav('talent');
  119. await miniPage.expectUrl('/pages/yongren/talent/list/index');
  120. // 3. 点击人才卡片
  121. await miniPage.clickTalentCardFromList(TEST_TALENT_NAME);
  122. // 4. 验证跳转到详情页
  123. await miniPage.expectUrl('/pages/yongren/talent/detail/index');
  124. // 5. 验证详情页面显示正确的人才信息
  125. await miniPage.expectTalentDetailInfo(TEST_TALENT_NAME);
  126. console.debug('[导航] 人才卡片点击跳转到详情页 ✓');
  127. });
  128. /**
  129. * 测试场景:完整导航流程
  130. * 验证首页 → 人才列表 → 人才详情 → 返回首页的完整流程
  131. */
  132. test('应该支持完整的导航流程:首页→人才列表→详情→首页', async ({ enterpriseMiniPage: miniPage }) => {
  133. const page = miniPage.page;
  134. // 1. 登录
  135. await miniPage.goto();
  136. await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
  137. await miniPage.expectLoginSuccess();
  138. await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
  139. // 2. 从首页导航到人才列表
  140. await miniPage.clickBottomNav('talent');
  141. await page.waitForURL(
  142. url => url.hash.includes('/pages/yongren/talent/list/index'),
  143. { timeout: TIMEOUTS.PAGE_LOAD }
  144. );
  145. // 3. 点击人才卡片进入详情页
  146. await miniPage.clickTalentCardFromList(TEST_TALENT_NAME);
  147. await miniPage.expectUrl('/pages/yongren/talent/detail/index');
  148. // 4. 返回首页
  149. await miniPage.clickBottomNav('home');
  150. await page.waitForURL(
  151. url => url.hash.includes('/pages/yongren/dashboard/index'),
  152. { timeout: TIMEOUTS.PAGE_LOAD }
  153. );
  154. // 5. 验证首页数据正常显示
  155. const dashboard = page.getByText('分配人才');
  156. await expect(dashboard).toBeVisible();
  157. console.debug('[导航] 完整导航流程 ✓');
  158. });
  159. });