const PercyScript = require('@percy/script') PercyScript.run(async (page, percySnapshot) => { const defaultProcessing = async (name, id, location) => { await page.goto(location) await page.waitFor(`#${id}`) await percySnapshot(name) console.log(`Snapshot complete for ${name}`) } const specialProcessing = { 'All': async (_) => { }, 'Modals': async (name, id, location) => { await defaultProcessing(name, id, location) await page.click('#launch-info-modal') await page.waitFor('[role="dialog"]') await percySnapshot('Full Info Modal') await page.click('[aria-label="Close modal"]') await page.click('#launch-warning-modal') await page.waitFor('[role="dialog"]') await percySnapshot('Full Warning Modal') await page.click('[aria-label="Close modal"]') } } await page.goto('http://localhost:8000') await page.waitFor('#categories').then(category => { return category.$$('a').then(links => { return links.reduce((acc, link) => { return acc.then(_ => { return link.evaluate(node => [node.innerText, node.innerText.toLowerCase().replace(/ /g, "-"), node.href]).then(([name, id, location]) => { let handler = specialProcessing[name] || defaultProcessing return handler(name, id, location) }) } ) }, Promise.resolve()) }) }) })