import { test, expect } from '@playwright/test'; import { LoginPage } from '../pages/LoginPage'; /** * Bug #765: [收费工作站-门诊挂号] 在"患者身份信息"框中选中检索的患者后,患者列表浮窗未自动隐藏 * 修复验证: 选中患者后 popover 应自动关闭 */ test.describe('🐛 Bug#765', () => { let loginPage: LoginPage; test.beforeEach(async ({ page }) => { loginPage = new LoginPage(page); await loginPage.goto(); await loginPage.login( process.env.TEST_USERNAME || 'admin', process.env.TEST_PASSWORD || 'admin123' ); await loginPage.expectLoginSuccess(); }); test('#765 门诊挂号患者浮窗选中后自动隐藏 @bug765 @regression', async ({ page }) => { // 1. 进入门诊挂号页面 await page.goto('/charge/outpatientregistration'); await page.waitForLoadState('networkidle'); await expect(page).not.toHaveURL(/.*login.*/); // 2. 截图: 初始状态 await page.screenshot({ path: 'tests/e2e/report/bug-765-initial.png', fullPage: true }); // 3. 检查页面无 JS 错误 const jsErrors: string[] = []; page.on('pageerror', (err) => jsErrors.push(err.message)); // 4. 找到患者搜索输入框并输入 const searchInput = page.locator('input[placeholder*="患者"], input[placeholder*="姓名"], input[placeholder*="检索"]').first(); if (await searchInput.isVisible({ timeout: 5000 }).catch(() => false)) { await searchInput.click(); await searchInput.fill(''); await page.waitForTimeout(1000); // 5. 截图: 输入后浮窗出现 await page.screenshot({ path: 'tests/e2e/report/bug-765-popover-shown.png', fullPage: true }); // 6. 尝试点选患者(如果浮窗有数据) const patientRow = page.locator('.el-popover .patient-item, .el-popover tr, .el-popover .el-table__row').first(); if (await patientRow.isVisible({ timeout: 3000 }).catch(() => false)) { await patientRow.click(); await page.waitForTimeout(500); // 7. 截图: 选中后浮窗应关闭 await page.screenshot({ path: 'tests/e2e/report/bug-765-after-select.png', fullPage: true }); // 8. 验证浮窗已关闭 const popover = page.locator('.el-popover:visible'); await expect(popover).not.toBeVisible({ timeout: 3000 }); } } // 9. 最终截图 await page.screenshot({ path: 'tests/e2e/report/bug-765-result.png', fullPage: true }); // 10. 无 JS 错误 expect(jsErrors).toEqual([]); }); });