From 1d2cecc5229e56abea673086c061969484c2784d Mon Sep 17 00:00:00 2001 From: weichen Date: Sun, 13 Sep 2026 12:02:01 +0000 Subject: [PATCH] test(e2e): scope project creation selectors to fixed modal --- web/e2e/document-revision-runtime.spec.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/web/e2e/document-revision-runtime.spec.ts b/web/e2e/document-revision-runtime.spec.ts index 38811562..456e246a 100644 --- a/web/e2e/document-revision-runtime.spec.ts +++ b/web/e2e/document-revision-runtime.spec.ts @@ -435,16 +435,21 @@ test.describe.serial('document-revision-runtime UI acceptance', () => { // Isolate network evidence to project-create window (exclude login-era noise). logs = []; await page.getByRole('button', { name: '新建立项会话' }).click(); - await expect(page.getByText('发起医疗器械新项目立项')).toBeVisible(); - await page.fill('input[placeholder*="无线便携式"]', PROJECT_NAME); - const desc = page.locator('textarea').first(); + const projectModalHeading = page.getByText('发起医疗器械新项目立项', { exact: true }); + await expect(projectModalHeading).toBeVisible({ timeout: 30_000 }); + const projectModal = projectModalHeading.locator( + 'xpath=ancestor::div[contains(@style,"position: fixed")][1]', + ); + await projectModal.locator('input[placeholder*="无线便携式"]').fill(PROJECT_NAME); + const desc = projectModal.locator('textarea'); if ((await desc.count()) === 0) fail('project form missing required description textarea'); await desc.fill('用于骨科微创手术的双频超声吸引与止血,需符合 GB 9706.1 与相关法规要求。'); - // Select B as member - const memberRow = page.locator('div').filter({ hasText: `协作者B-${suffix}` }).first(); - if ((await memberRow.count()) === 0) fail('member B not listed in create-project form'); + // Select B as member inside project modal scope + const memberRow = projectModal.locator('div').filter({ hasText: `协作者B-${suffix}` }).first(); + await expect(memberRow).toBeVisible({ timeout: 15_000 }); await memberRow.click(); - await page.getByRole('button', { name: /确认立项/ }).click(); + await projectModal.getByRole('button', { name: /确认立项/ }).click(); + await expect(projectModalHeading).toBeHidden({ timeout: 15_000 }); await expect(page.getByText(PROJECT_NAME)).toBeVisible({ timeout: 30_000 }); await expect(page.locator('aside')).toBeVisible(); // Template doc selected: must show non-error hint, never 账本未就绪