|
@@ -0,0 +1,199 @@
|
|
|
|
|
+import { TIMEOUTS } from '../../utils/timeouts';
|
|
|
|
|
+import { test, expect } from '../../utils/test-setup';
|
|
|
|
|
+// import { EnterpriseMiniPage } from '../../pages/mini/enterprise-mini.page';
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * 首页导航和交互测试 (Story 13.7)
|
|
|
|
|
+ *
|
|
|
|
|
+ * 测试目标:验证企业小程序首页 dashboard 的导航和交互功能
|
|
|
|
|
+ *
|
|
|
|
|
+ * Playwright MCP 探索结果 (2026-01-14):
|
|
|
|
|
+ * - 底部导航正常工作 (首页/人才/订单/数据/设置)
|
|
|
|
|
+ * - 人才列表页人才卡片点击可导航到详情页
|
|
|
|
|
+ * - 首页快捷操作按钮未触发跳转(可能为展示用途)
|
|
|
|
|
+ * - 首页"查看全部"链接未触发跳转
|
|
|
|
|
+ * - 首页人才卡片未触发跳转
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
|
|
+// 测试数据常量
|
|
|
|
|
+const TEST_USER_PHONE = '13800001111';
|
|
|
|
|
+const TEST_USER_PASSWORD = 'password123';
|
|
|
|
|
+const TEST_TALENT_NAME = '测试残疾人_1768346782426_12_8219';
|
|
|
|
|
+
|
|
|
|
|
+// 使用 test.describe.serial 确保测试按顺序执行
|
|
|
|
|
+test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
|
|
|
|
|
+ // 每个测试使用独立的浏览器上下文
|
|
|
|
|
+ test.use({ storageState: undefined });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:底部导航 - 点击人才按钮
|
|
|
|
|
+ */
|
|
|
|
|
+ test('应该通过底部导航跳转到人才页面', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
+ // 1. 登录
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 点击底部导航"人才"按钮
|
|
|
|
|
+ await miniPage.clickBottomNav('talent');
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 验证 URL 正确
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/talent/list/index');
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 验证页面标题(仅记录调试信息)
|
|
|
|
|
+ await miniPage.expectPageTitle('人才管理');
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[导航] 底部导航跳转到人才页面 ✓');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:底部导航 - 点击订单按钮
|
|
|
|
|
+ */
|
|
|
|
|
+ test('应该通过底部导航跳转到订单页面', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
+ // 1. 登录
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 点击底部导航"订单"按钮
|
|
|
|
|
+ await miniPage.clickBottomNav('order');
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 验证 URL 正确
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/order');
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 验证页面标题
|
|
|
|
|
+ await miniPage.expectPageTitle('订单列表');
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[导航] 底部导航跳转到订单页面 ✓');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:底部导航 - 点击数据按钮
|
|
|
|
|
+ */
|
|
|
|
|
+ test('应该通过底部导航跳转到数据页面', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
+ // 1. 登录
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 点击底部导航"数据"按钮
|
|
|
|
|
+ await miniPage.clickBottomNav('data');
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 验证 URL 正确
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/data');
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[导航] 底部导航跳转到数据页面 ✓');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:底部导航 - 点击设置按钮
|
|
|
|
|
+ */
|
|
|
|
|
+ test('应该通过底部导航跳转到设置页面', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
+ // 1. 登录
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 点击底部导航"设置"按钮
|
|
|
|
|
+ await miniPage.clickBottomNav('settings');
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 验证 URL 正确
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/settings');
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[导航] 底部导航跳转到设置页面 ✓');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:返回首页功能
|
|
|
|
|
+ */
|
|
|
|
|
+ test('应该可以通过底部导航首页按钮返回首页', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
+ const page = miniPage.page;
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 登录
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 先导航到其他页面(人才页面)
|
|
|
|
|
+ await miniPage.clickBottomNav('talent');
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/talent/list/index');
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 返回首页
|
|
|
|
|
+ await miniPage.goBackToHome();
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 验证首页元素正确显示
|
|
|
|
|
+ const dashboard = page.getByText('分配人才');
|
|
|
|
|
+ await expect(dashboard).toBeVisible();
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[导航] 返回首页 ✓');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:人才卡片点击导航
|
|
|
|
|
+ */
|
|
|
|
|
+ test('应该点击人才卡片跳转到人才详情页', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
+ // 1. 登录
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 导航到人才列表页面
|
|
|
|
|
+ await miniPage.clickBottomNav('talent');
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/talent/list/index');
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 点击人才卡片
|
|
|
|
|
+ await miniPage.clickTalentCardFromList(TEST_TALENT_NAME);
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 验证跳转到详情页
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/talent/detail/index');
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 验证详情页面显示正确的人才信息
|
|
|
|
|
+ await miniPage.expectTalentDetailInfo(TEST_TALENT_NAME);
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[导航] 人才卡片点击跳转到详情页 ✓');
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 测试场景:完整导航流程
|
|
|
|
|
+ * 验证首页 → 人才列表 → 人才详情 → 返回首页的完整流程
|
|
|
|
|
+ */
|
|
|
|
|
+ test('应该支持完整的导航流程:首页→人才列表→详情→首页', async ({ enterpriseMiniPage: miniPage }) => {
|
|
|
|
|
+ const page = miniPage.page;
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 登录
|
|
|
|
|
+ await miniPage.goto();
|
|
|
|
|
+ await miniPage.login(TEST_USER_PHONE, TEST_USER_PASSWORD);
|
|
|
|
|
+ await miniPage.expectLoginSuccess();
|
|
|
|
|
+ await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 从首页导航到人才列表
|
|
|
|
|
+ await miniPage.clickBottomNav('talent');
|
|
|
|
|
+ await page.waitForURL(
|
|
|
|
|
+ url => url.hash.includes('/pages/yongren/talent/list/index'),
|
|
|
|
|
+ { timeout: TIMEOUTS.PAGE_LOAD }
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 点击人才卡片进入详情页
|
|
|
|
|
+ await miniPage.clickTalentCardFromList(TEST_TALENT_NAME);
|
|
|
|
|
+ await miniPage.expectUrl('/pages/yongren/talent/detail/index');
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 返回首页
|
|
|
|
|
+ await miniPage.clickBottomNav('home');
|
|
|
|
|
+ await page.waitForURL(
|
|
|
|
|
+ url => url.hash.includes('/pages/yongren/dashboard/index'),
|
|
|
|
|
+ { timeout: TIMEOUTS.PAGE_LOAD }
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 验证首页数据正常显示
|
|
|
|
|
+ const dashboard = page.getByText('分配人才');
|
|
|
|
|
+ await expect(dashboard).toBeVisible();
|
|
|
|
|
+
|
|
|
|
|
+ console.debug('[导航] 完整导航流程 ✓');
|
|
|
|
|
+ });
|
|
|
|
|
+});
|