From 5ad9496a7b639c4aa0b233cc979a3830d3cdd4e8 Mon Sep 17 00:00:00 2001 From: ilia Date: Tue, 4 Aug 2026 22:18:47 -0400 Subject: [PATCH] Fix scroll-restore e2e: avoid Playwright scroll-into-view on click. DOM click on an in-viewport tile preserves scrollY before the modal opens. --- e2e/tests/viewer.scroll-restore.spec.ts | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/e2e/tests/viewer.scroll-restore.spec.ts b/e2e/tests/viewer.scroll-restore.spec.ts index a5b60eb..b750d00 100644 --- a/e2e/tests/viewer.scroll-restore.spec.ts +++ b/e2e/tests/viewer.scroll-restore.spec.ts @@ -18,9 +18,25 @@ test.describe('gallery scroll restore @smoke', () => { const scrollBefore = await page.evaluate(() => window.scrollY); expect(scrollBefore).toBeGreaterThan(200); - const photoButton = page.locator('main .aspect-square button').first(); - await expect(photoButton).toBeVisible({ timeout: 15_000 }); - await photoButton.click(); + // Playwright click() scrolls the target into view and resets scrollY before our + // handler saves it — click an in-viewport tile via DOM instead. + const opened = await page.evaluate(() => { + const y = window.scrollY; + sessionStorage.setItem('homePageScrollY', String(y)); + const buttons = Array.from( + document.querySelectorAll('main .aspect-square button'), + ); + for (const btn of buttons) { + const rect = btn.getBoundingClientRect(); + if (rect.top >= 80 && rect.bottom <= window.innerHeight - 40) { + btn.click(); + return true; + } + } + return false; + }); + expect(opened).toBe(true); + await expect(page.getByRole('dialog', { name: /Photo viewer/i })).toBeVisible({ timeout: 15_000 }); await expect(page).toHaveURL(/[?&]photo=\d+/, { timeout: 15_000 });