Skip to content
This repository has been archived by the owner on May 28, 2019. It is now read-only.
/ puppeteer-helper Public archive

An AVA helper that makes a Puppeteer page available to a test

License

Notifications You must be signed in to change notification settings

ianwalter/puppeteer-helper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@ianwalter/puppeteer-helper

An AVA helper that makes a Puppeteer page available to a test

npm page

Archived

Please use bff instead.

About

This helper is based on a recipe that can be found in AVA's docs.

Installation

yarn add @ianwalter/puppeteer-helper --dev

Warning

This is meant for testing. You wouldn't want to run untrusted code as root with this since sandboxing is disabled.

Usage

JavaScript to evaluate in the browser (something.js):

import subpub from '@ianwalter/subpub'

// Run your evaluation inside of `window.run` which passes the resolve/reject
// functions from the returned promise and an arg if a second argument is passed
// to `t.evaluate`.
window.run((resolve, reject, args) => {
  // Subscribe to the 'alerts' topic and resolve the evaluation when a message
  // is received.
  subpub.sub('alerts', data => resolve(data.msg))

  // Send a test message to the 'alerts' topic.
  subpub.pub('alerts', { msg: 'Winter Snow Advisory!' })
})

Using the evaluation script in an AVA test:

import test from 'ava'
import puppeteerHelper from '@ianwalter/puppeteer-helper'

const withPage = puppeteerHelper() // You can pass Puppeteer options here.

test('message received', withPage, async (t, page) => {
  t.is(await t.evaluate('./something.js'), 'Winter Snow Advisory!')
})

API

t.evaluate(evaluationScriptPath, [frame]) - Runs the evaluation script (path is relative to process.cwd()) on the given frame (defaults to page). Arguments to the evaluate call can be supplied by adding them to t.context.args. A custom Webpack config can also be added to t.context.webpack.

Debugging

To aid in debugging tests, pass { devtools: true } to the puppeteerHelper call and then add debugger to the problem area in your evaluation script. This will stop the browser from automatically running in headless mode and pause execution where debugger is placed. This is helpful if you, for example, want to see/modify a snapshot of variables in the execution context within Chrome DevTools.

Related

  • ianwalter/puppeteer - A GitHub Action / Docker image for Puppeteer, the Headless Chrome Node API

License

Apache 2.0 with Commons Clause - See LICENSE

 

Created by Ian Walter