From ed23de28df39741c064c47737b8811e71a0b4752 Mon Sep 17 00:00:00 2001 From: weichen Date: Sat, 17 Oct 2026 04:40:28 +0000 Subject: [PATCH] Accept rail-form cockpit entry in narrow layout Why: at 390px the compact layout swaps the sidebar for an icon rail; the cockpit entry remains reachable as an icon button but not as .tsb-tool, so scenario 7 timed out waiting for the sidebar form. Evidence: tsc clean, vitest green, build green (SELF); seven-scenario rerun to be recorded on the Dev I4 card. Impact: e2e spec only. Refs: rollout I4 --- e2e/rdm-cockpit.playwright.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/e2e/rdm-cockpit.playwright.ts b/e2e/rdm-cockpit.playwright.ts index 1009aba..c060c5c 100644 --- a/e2e/rdm-cockpit.playwright.ts +++ b/e2e/rdm-cockpit.playwright.ts @@ -21,9 +21,16 @@ async function login(page: Page, user: string, password: string) { await page.getByRole('button', { name: '登录', exact: true }).click() } +// 侧栏入口两种形态:常规侧栏按钮(.tsb-tool);窄宽紧凑布局换图标栏 +// (.icon-only 内 title 以「文档驾驶舱」开头的按钮)——入口都可达。 +function cockpitEntry(page: Page) { + return page.locator('.tsb-tool', { hasText: '文档驾驶舱' }) + .or(page.locator('.icon-only button[title^="文档驾驶舱"]')).first() +} + async function loginOwner(page: Page) { await login(page, OWNER, PASSWORD) - await expect(page.locator('.tsb-tool', { hasText: '文档驾驶舱' })).toBeVisible({ timeout: 15_000 }) + await expect(cockpitEntry(page)).toBeVisible({ timeout: 15_000 }) // 登录后身份纪元与能力探针仍可能各跳一次;应用在身份变更时会关闭已开 // 工作区——等落定再点入口,避免 overlay 被身份刷新关掉(竞态实测)。 await page.waitForLoadState('networkidle').catch(() => {}) @@ -31,7 +38,7 @@ async function loginOwner(page: Page) { } async function openCockpit(page: Page) { - await page.locator('.tsb-tool', { hasText: '文档驾驶舱' }).click() + await cockpitEntry(page).click() await expect(page.locator('.cockpit-project')).toBeVisible({ timeout: 15_000 }) // 默认选中首个项目(种子=审计演示项目)。 await expect(page.locator('.cockpit-stats')).toBeVisible({ timeout: 15_000 })