September 14, 2020
Modern Web Testing and Automation with Puppeteer (Google I/O ‘19)
cosnt browser = await puppeteer.launch()
it ('', async() => {
const context = await browser.createIncognitoBrowserContext();
// ...
await context.close()
})브라우저의 새로운 시크릿 컨텍스트를 생성해서 테스팅 하는 것이 더 빠르다.
렌더링이 되기 전에 테스트를 돌리다 보면, 테스트가 실패하는 이슈가 발생하는데, 기본적인 해결책은 sleep을 넣어준다.
await page.waitFor(1000)그런데, 이 방식은 좋지 않다.
page.waitForSelector()
page.waitForReqeust()
page.waitForResponse()
page.waitForFunction()
page.waitForNavigation()page.waitForXX API를 사용하자.
위의 예시에서 page.waitForSelector()를 사용하면, DOM 요소가 나타날 때까지 기다리게 된다.
page.setGeolocation({})await context.waitForTarget(target => {
return target.type() === 'service_worker'
})page.on('request', reqeust => {
console.log(request.method())
})
page.on('response', response => {
console.log(response.method())
})그 밖에 다양한 API를 제공 한다.
await page.setRequestInterception(true)
page.on('request', reqeust => {
if (request.resourceType() === 'image') {
request.respond({ body: randomCatImage() })
} else {
request.continue()
}
})await page.keyboard.press()const metrics = await page.metrics()await page.tracing.start({ path: './trace.json' })
// something doing
await page.tracing.stop()page.coverage.startCSSCoverage()page.coverage.stopCSSCoverage()page.coverage.startJSCoverage()page.coverage.stopJSCoverage()const snapshot = await page accessiblity.snapshot()