diff --git a/apps/web/tests/composer-draft-scroll.e2e.ts b/apps/web/tests/composer-draft-scroll.e2e.ts index 83147f6110..8261df8ecd 100644 --- a/apps/web/tests/composer-draft-scroll.e2e.ts +++ b/apps/web/tests/composer-draft-scroll.e2e.ts @@ -346,10 +346,8 @@ describe('web e2e: composer draft scrolling', () => { const m = await measureScrollport(page) return m.scrollTop === m.scrollMax }, { timeout: 10_000 }).toBe(true) - // The caret at the draft's end, then the trailing lines removed one at a - // time; the box must stay at the end, where the caret is. Select-all plus - // ArrowRight lands the caret on the document end; the collapse has to be - // observable before Backspace, or the whole selection is what gets deleted. + // Chromium updates the DOM selection before delivering selectionchange + // to Lexical. Deliver it before deletion so the editor sees the end caret. const input = surface(page) await input.click() await page.keyboard.press('ControlOrMeta+KeyA') @@ -358,6 +356,7 @@ describe('web e2e: composer draft scrolling', () => { async () => page.evaluate(() => window.getSelection()?.isCollapsed ?? false), { timeout: 10_000 }, ).toBe(true) + await input.evaluate(el => el.ownerDocument.dispatchEvent(new Event('selectionchange'))) await page.keyboard.press('Backspace') await expect.poll(async () => (await measureScrollport(page)).overflows, { timeout: 10_000 }).toBe(true) await expect.poll(async () => { @@ -372,6 +371,7 @@ describe('web e2e: composer draft scrolling', () => { // lines and delete them at once. await page.keyboard.press('Shift+ArrowUp') await page.keyboard.press('Shift+ArrowUp') + await input.evaluate(el => el.ownerDocument.dispatchEvent(new Event('selectionchange'))) await page.keyboard.press('Delete') await expect.poll(async () => { const m = await measureScrollport(page)