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 });