浏览代码

test(e2e): 改进公司创建 E2E 测试

- 修复 backdrop 点击逻辑,使用正确的 Radix Dialog overlay 选择器
- 添加 ESC 键作为备选方案
- 添加防止重复创建的验证
- 改进删除公司的调试信息

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 4 天之前
父节点
当前提交
54898bea16
共有 2 个文件被更改,包括 31 次插入10 次删除
  1. 10 2
      web/tests/e2e/pages/admin/company-management.page.ts
  2. 21 8
      web/tests/e2e/specs/admin/company-create.spec.ts

+ 10 - 2
web/tests/e2e/pages/admin/company-management.page.ts

@@ -595,8 +595,15 @@ export class CompanyManagementPage {
         new Promise((resolve) => setTimeout(() => resolve({ success: false, timeout: true }), 10000))
       ]) as any;
 
-      // 如果超时或公司找不到,返回 true(允许测试继续)
-      if (result.timeout || result.notFound) {
+      // 如果超时:打印警告但返回 true(允许测试继续)
+      if (result.timeout) {
+        console.debug(`删除公司 "${companyName}" 超时,但允许测试继续`);
+        return true;
+      }
+
+      // 如果公司找不到:认为删除成功(可能已被其他测试删除)
+      if (result.notFound) {
+        console.debug(`删除公司 "${companyName}": 公司不存在,认为已删除`);
         return true;
       }
 
@@ -606,6 +613,7 @@ export class CompanyManagementPage {
       }
 
       if (!result.success) {
+        console.debug(`删除公司 "${companyName}" 失败: 未知错误`);
         return false;
       }
 

+ 21 - 8
web/tests/e2e/specs/admin/company-create.spec.ts

@@ -277,16 +277,24 @@ test.describe('公司创建功能', () => {
       await companyManagementPage.openCreateDialog();
       await companyManagementPage.companyNameInput.fill(companyName);
 
-      // 点击对话框外部区域(使用 backdrop)
-      const backdrop = companyManagementPage.page.locator('[data-radix-toast-swipe-end]');
-      if (await backdrop.count() > 0) {
-        await backdrop.click();
+      // 点击对话框外部区域(使用 Radix UI Dialog overlay)
+      // Radix Dialog 使用 data-radix-dialog-overlay 或 [data-state="open"] 作为 backdrop
+      const backdrop = companyManagementPage.page.locator('[data-radix-dialog-overlay]').or(
+        companyManagementPage.page.locator('[data-state="open"][role="presentation"]')
+      );
+
+      // 验证 backdrop 存在
+      const backdropCount = await backdrop.count();
+      if (backdropCount > 0) {
+        // 点击 backdrop 关闭对话框
+        await backdrop.first().click();
+        await companyManagementPage.waitForDialogClosed();
+      } else {
+        // 如果找不到 backdrop(某些浏览器行为),使用 ESC 键作为备选
+        await companyManagementPage.page.keyboard.press('Escape');
+        await companyManagementPage.waitForDialogClosed();
       }
 
-      // 或者按 ESC 键作为备选方案
-      await companyManagementPage.page.keyboard.press('Escape');
-      await companyManagementPage.waitForDialogClosed();
-
       // 验证公司没有出现在列表中
       const exists = await companyManagementPage.companyExists(companyName);
       expect(exists).toBe(false);
@@ -389,6 +397,11 @@ test.describe('公司创建功能', () => {
         expect(result.hasError || !result.success).toBe(true);
       }
 
+      // 验证列表中只有一个同名公司(没有重复创建)
+      const companyRow = companyManagementPage.companyTable.locator('tbody tr').filter({ hasText: companyName });
+      const count = await companyRow.count();
+      expect(count).toBe(1);
+
       // 清理
       await companyManagementPage.deleteCompany(companyName);
       await platformManagementPage.goto();