employee.spec.ts 6.62 KB
import { test, expect } from '@playwright/test';
import * as allure from 'allure-js-commons';
import { EmployeePage } from '../pages/employeePage';
import { generateCustomerName, generatePhoneNumber } from '../utils/dataGenerator';

/**
 * 员工管理测试
 */
test.describe('员工管理', () => {
  // 使用已保存的认证状态
  test.use({ storageState: 'auth.json' });

  // 强制测试串行执行
  test.describe.configure({ mode: 'serial' });

  /**
   * 生成随机员工姓名(使用已有函数)
   */
  function generateEmployeeName(): string {
    return generateCustomerName();
  }

  /**
   * 生成随机联系电话(使用已有函数)
   */
  function generatePhone(): string {
    return generatePhoneNumber();
  }

  /**
   * 生成包含"自动化"的备注
   */
  function generateRemark(): string {
    const timestamp = Date.now().toString().slice(-6);
    return `自动化员工测试备注${timestamp}`;
  }

  test('新增员工', async ({ page }, testInfo) => {
    const employeePage = new EmployeePage(page);
    
    // 添加allure元素
    await allure.epic('员工管理');
    await allure.feature('员工信息');
    await allure.story('新增员工');

    // 生成随机员工数据
    const employeeName = generateEmployeeName();
    const phone = generatePhone();
    const remark = generateRemark();
    
    console.log('员工姓名:', employeeName);
    console.log('联系电话:', phone);
    console.log('备注:', remark);

    // 步骤1:进入员工管理页面
    await allure.step('进入员工管理页面', async () => {
      await employeePage.openEmployeeManagement();
    });

    // 步骤2:点击新建员工按钮
    await allure.step('点击新建员工按钮', async () => {
      await employeePage.clickNewEmployee();
    });

    // 步骤3:点击手动添加
    await allure.step('点击手动添加', async () => {
      await employeePage.clickManualAdd();
    });

    // 步骤4:填写员工表单
    await allure.step('填写员工表单', async () => {
      await employeePage.fillEmployeeName(employeeName);
      await employeePage.fillPhone(phone);
      await employeePage.fillRemark(remark);
      await employeePage.selectPosition(); // 不传参数,随机选择岗位
    });

    // 步骤5:保存员工
    await allure.step('保存员工', async () => {
      await employeePage.clickConfirm();
    });

    // 步骤6:验证员工创建成功
    await allure.step('验证员工创建成功', async () => {
      // 使用员工姓名搜索
      await employeePage.searchEmployee(employeeName);
      const isExists = await employeePage.verifyEmployeeExists(employeeName);
      expect(isExists).toBeTruthy();
    });
  });

  test('修改员工', async ({ page }, testInfo) => {
    const employeePage = new EmployeePage(page);
    
    // 添加allure元素
    await allure.epic('员工管理');
    await allure.feature('员工信息');
    await allure.story('修改员工');

    // 先生成一个新员工用于修改测试
    const employeeName = generateEmployeeName();
    const phone = generatePhone();
    const originalRemark = '新建员工备注';
    
    console.log('待修改员工姓名:', employeeName);
    console.log('联系电话:', phone);

    // 步骤1:新增员工
    await allure.step('新增员工', async () => {
      await employeePage.openEmployeeManagement();
      await employeePage.clickNewEmployee();
      await employeePage.clickManualAdd();
      await employeePage.fillEmployeeName(employeeName);
      await employeePage.fillPhone(phone);
      await employeePage.fillRemark(originalRemark);
      await employeePage.selectPosition();
      await employeePage.clickConfirm();
    });

    // 步骤2:搜索员工
    await allure.step('搜索员工', async () => {
      await employeePage.searchEmployee(employeeName);
      await employeePage.verifyEmployeeExists(employeeName);
    });

    // 步骤3:点击修改按钮
    await allure.step('点击修改按钮', async () => {
      await employeePage.clickEditButton();
    });

    // 步骤4:填写修改信息(姓名和电话不允许修改,只修改备注、状态、岗位)
    await allure.step('填写修改信息', async () => {
      const newRemark = '修改后的备注';
      await employeePage.fillRemarkForEdit(newRemark);
      await employeePage.clickStatusSwitch();
      await employeePage.selectPositionForEdit('采购员');
    });

    // 步骤5:保存修改
    await allure.step('保存修改', async () => {
      await employeePage.clickConfirm();
      await employeePage.page.waitForTimeout(1000);
    });

    // 步骤6:验证修改成功 - 搜索员工并检查备注是否包含"修改"
    await allure.step('验证修改成功', async () => {
      await employeePage.searchEmployee(employeeName);
      const isSuccess = await employeePage.verifyEmployeeRemarkContains('修改');
      expect(isSuccess).toBeTruthy();
    });
  });

  test('解绑员工', async ({ page }, testInfo) => {
    const employeePage = new EmployeePage(page);
    
    // 添加allure元素
    await allure.epic('员工管理');
    await allure.feature('员工信息');
    await allure.story('解绑员工');

    // 先生成一个新员工用于解绑测试
    const employeeName = generateEmployeeName();
    const phone = generatePhone();
    const originalRemark = '解绑测试备注';
    
    console.log('待解绑员工姓名:', employeeName);
    console.log('联系电话:', phone);

    // 步骤1:新增员工
    await allure.step('新增员工', async () => {
      await employeePage.openEmployeeManagement();
      await employeePage.clickNewEmployee();
      await employeePage.clickManualAdd();
      await employeePage.fillEmployeeName(employeeName);
      await employeePage.fillPhone(phone);
      await employeePage.fillRemark(originalRemark);
      await employeePage.selectPosition();
      await employeePage.clickConfirm();
    });

    // 步骤2:搜索员工
    await allure.step('搜索员工', async () => {
      await employeePage.searchEmployee(employeeName);
      await employeePage.verifyEmployeeExists(employeeName);
    });

    // 步骤3:点击解绑按钮
    await allure.step('点击解绑按钮', async () => {
      await employeePage.clickUnbindButton();
    });

    // 步骤4:确认解绑
    await allure.step('确认解绑', async () => {
      await employeePage.confirmUnbind();
    });

    // 步骤5:验证解绑成功 - 页面不再显示该员工
    await allure.step('验证解绑成功', async () => {
      const isNotExists = await employeePage.verifyEmployeeNotExists(employeeName);
      expect(isNotExists).toBeTruthy();
    });
  });
});