Agent-skills puppeteer-skill
install
source · Clone the upstream repo
git clone https://github.com/LambdaTest/agent-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/LambdaTest/agent-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/puppeteer-skill" ~/.claude/skills/lambdatest-agent-skills-puppeteer-skill && rm -rf "$T"
manifest:
puppeteer-skill/SKILL.mdsource content
Puppeteer Automation Skill
Core Patterns
Basic Script
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: 'new' }); const page = await browser.newPage(); await page.setViewport({ width: 1280, height: 720 }); await page.goto('https://example.com', { waitUntil: 'networkidle0' }); await page.type('#username', 'user@test.com'); await page.type('#password', 'password123'); await page.click('button[type="submit"]'); await page.waitForNavigation({ waitUntil: 'networkidle0' }); const title = await page.title(); console.log('Title:', title); await browser.close(); })();
Wait Strategies
// Wait for selector await page.waitForSelector('.result', { visible: true, timeout: 10000 }); // Wait for navigation await Promise.all([ page.waitForNavigation({ waitUntil: 'networkidle0' }), page.click('a.nav-link'), ]); // Wait for function await page.waitForFunction('document.querySelector(".count").innerText === "5"'); // Wait for network request const response = await page.waitForResponse(resp => resp.url().includes('/api/data') && resp.status() === 200 );
Screenshot & PDF
await page.screenshot({ path: 'screenshot.png', fullPage: true }); await page.pdf({ path: 'page.pdf', format: 'A4', printBackground: true });
Network Interception
await page.setRequestInterception(true); page.on('request', request => { if (request.resourceType() === 'image') request.abort(); else request.continue(); }); // Mock API page.on('request', request => { if (request.url().includes('/api/data')) { request.respond({ status: 200, contentType: 'application/json', body: JSON.stringify({ items: [] }), }); } else request.continue(); });
TestMu AI Cloud
For full setup, capabilities, and shared capability reference, see reference/cloud-integration.md.
const capabilities = { browserName: 'Chrome', browserVersion: 'latest', 'LT:Options': { platform: 'Windows 11', build: 'Puppeteer Build', user: process.env.LT_USERNAME, accessKey: process.env.LT_ACCESS_KEY, }, }; const browser = await puppeteer.connect({ browserWSEndpoint: `wss://cdp.lambdatest.com/puppeteer?capabilities=${encodeURIComponent(JSON.stringify(capabilities))}`, });
Quick Reference
| Task | Code |
|---|---|
| Launch headed | |
| Evaluate JS | |
| Extract text | |
| Extract all | |
| Set cookie | |
| Emulate device | |
Deep Patterns → reference/playbook.md
reference/playbook.md| § | Section | Lines |
|---|---|---|
| 1 | Production Setup & Configuration | Launch options, Jest integration |
| 2 | Page Object Pattern | BasePage, LoginPage, DashboardPage |
| 3 | Network Interception & Mocking | Request mock, response capture |
| 4 | Wait Strategies | DOM, network, custom conditions |
| 5 | Screenshots, PDF & Media | Full page, clip, PDF, video |
| 6 | Authentication & Cookies | API login, session save/restore |
| 7 | iFrame, Dialog & File Operations | Upload, download, dialogs |
| 8 | Performance & Metrics | Web Vitals, Lighthouse, coverage |
| 9 | Accessibility Testing | axe-core integration |
| 10 | CI/CD Integration | GitHub Actions, Docker |
| 11 | Debugging Quick-Reference | 11 common problems |
| 12 | Best Practices Checklist | 13 items |