import { chromium } from 'playwright'; /* Jumps to card 3 via its dot, then back to card 1 via its dot, and reports where the page rests. */ const [,, url, width = '1440', height = '900'] = process.argv; const browser = await chromium.launch(); const page = await browser.newPage({ viewport: { width: Number(width), height: Number(height) } }); await page.goto(url, { waitUntil: 'networkidle' }); const snaps = await page.evaluate(() => Array.from(document.querySelectorAll('[data-deck-snap]')).map((a) => Math.round(a.getBoundingClientRect().top + window.scrollY - parseFloat(getComputedStyle(a).scrollMarginTop)))); const dots = page.locator('[data-deck-dots] a'); await page.evaluate((y) => window.scrollTo(0, y), snaps[2]); await page.waitForTimeout(800); const before = await page.evaluate(() => Math.round(window.scrollY)); await dots.nth(0).click(); await page.waitForTimeout(1500); const back = await page.evaluate(() => Math.round(window.scrollY)); await dots.nth(3).click(); await page.waitForTimeout(1500); const fwd = await page.evaluate(() => Math.round(window.scrollY)); const active = await page.evaluate(() => Array.from(document.querySelectorAll('[data-deck-dots] a')).map((a) => a.getAttribute('aria-current') === 'true')); const hint = await page.evaluate(() => { const h = document.querySelector('[data-deck-hint]'); return { href: h?.getAttribute('href'), last: h?.hasAttribute('data-last') }; }); console.log({ snaps, before, backTo1: back, expected1: snaps[0], fwdTo4: fwd, expected4: snaps[3], active, hint }); await browser.close();