Files
his/openhis-ui-vue3/tests/e2e/specs/bug-regression.spec.ts
2026-05-27 01:19:32 +08:00

103 lines
4.3 KiB
TypeScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { test, expect } from '@playwright/test';
// 假设文件原有内容...
test.describe('HIS 系统回归测试集', () => {
test('基础登录流程', async ({ page }) => {
await page.goto('/login');
await expect(page).toHaveTitle(/HIS/);
});
// ================= 新增 Bug #505 回归测试 =================
test('@bug505 @regression 护士端已发药医嘱禁止退回', async ({ page }) => {
// 1. 登录护士账号
await page.goto('/login');
await page.fill('input[name="username"]', 'wx');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
// 2. 进入医嘱校对模块 -> 已校对页签
await page.click('text=医嘱校对');
await page.click('text=已校对');
await page.waitForLoadState('networkidle');
// 3. 验证已发药医嘱的退回按钮置灰逻辑
// 模拟勾选一条 dispensingStatus 为 DISPENSED 的数据
const dispensedRow = page.locator('tr:has-text("已发药")').first();
await dispensedRow.locator('input[type="checkbox"]').check();
const returnBtn = page.locator('button:has-text("退回")');
const isDisabled = await returnBtn.isDisabled();
// 预期:按钮应置灰不可点击
expect(isDisabled).toBe(true);
// 4. 若前端未置灰,验证点击拦截与提示文案
if (!isDisabled) {
await returnBtn.click();
await expect(page.locator('.el-message--error')).toContainText(
'该药品已由药房发放,请先执行退药处理,不可直接退回'
);
}
});
// ================= 新增 Bug #503 回归测试 =================
test('@bug503 @regression 住院发退药明细与汇总单触发时机同步校验', async ({ page }) => {
// 前置:确保字典配置为“需申请模式”(默认)
// 1. 护士登录并执行医嘱
await page.goto('/login');
await page.fill('input[name="username"]', 'wx');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
await page.click('text=医嘱执行');
await page.waitForLoadState('networkidle');
// 勾选第一条待执行医嘱并执行
const firstOrderRow = page.locator('.el-table__body-wrapper tbody tr').first();
await firstOrderRow.locator('input[type="checkbox"]').check();
await page.click('button:has-text("执行")');
});
// ================= 新增 Bug #561 回归测试 =================
test('@bug561 @regression 门诊医生站医嘱总量单位显示校验', async ({ page }) => {
// 1. 医生登录
await page.goto('/login');
await page.fill('input[name="username"]', 'doctor1');
await page.fill('input[name="password"]', '123456');
await page.click('button[type="submit"]');
await expect(page).toHaveURL(/.*dashboard.*/);
// 2. 进入门诊医生工作站,选择患者
await page.click('text=门诊医生工作站');
await page.waitForLoadState('networkidle');
const firstPatient = page.locator('.el-table__body-wrapper tbody tr').first();
await firstPatient.click();
// 3. 开立手术申请单
await page.click('button:has-text("手术申请")');
await page.waitForLoadState('networkidle');
// 4. 搜索并添加已配置使用单位的项目(如:超声切骨刀辅助操作)
await page.fill('input[placeholder*="搜索"]', '超声切骨刀');
await page.waitForTimeout(500);
await page.click('text=超声切骨刀辅助操作');
await page.click('button:has-text("确认开立")');
await page.waitForLoadState('networkidle');
// 5. 切换至医嘱标签页,验证总量单位显示
await page.click('text=医嘱');
await page.waitForLoadState('networkidle');
// 获取最新一条医嘱的总量单元格文本
const orderTable = page.locator('.el-table__body-wrapper tbody');
const latestRow = orderTable.locator('tr').first();
const totalQuantityText = await latestRow.locator('td').nth(4).innerText(); // 假设总量在第5列可根据实际DOM调整
// 断言:不应包含 null且应包含配置的单位如“次”
expect(totalQuantityText).not.toContain('null');
expect(totalQuantityText).toMatch(/\d+\s*次/);
});
});