page-check

Webpage tester based on Puppeteer and Node.js

Usage no npm install needed!

<script type="module">
  import pageCheck from 'https://cdn.skypack.dev/page-check';
</script>

README

Page Check

Webpage tester based on Puppeteer and Node.js

Module runs your webpage, app or banner within virtual browser. While running, it registers next few things:

  • javascript errors (including errors inside onresize handler)
  • missing files
  • console events (log, warn, etc.)
  • requests to a different hosts

Installation

npm install page-check

API

PageCheck(input[, options])

input

Type: String | Array

options.timeout

Type: Number
Default: 60
Keep checking for this amout of seconds

options.clones

Type: Boolean
Default: false
If set to false, the same errors will be removed from the list

options.filter

Type: Function
This function will be used by Array.filter() to filter final list of errors.
For example we could leave only js errors and external request:

Here is the codes for quick filtering:

Code Event
1 page error
2 failed request
3 external request
4 iframe attached
6 console.log
7 console.error
8 console.warn, console.info ...
9 dialog, alert ...
10 not existing page or any else errors

options.args

Type: Array
Array of arguments that would be passed into puppeteer.launch(args)

options.spoof_list

Type: Array
List of requests that should be replaced. For example, you don't want to wait until some heavy library is downloaded from remote server:

PageCheck(page_url, {
   args: [ '--disable-web-security' ],
   spoof_list: [
      { 
         rule: 'https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.8.2/pixi.js', 
         body: fs.readFileSync('./libs/pixi.js'), 
         status: 200, 
         contentType: 'text/plain'
      }, 
   ]
})

Note: set args: [ '--disable-web-security' ] if you have the CORS error

options.screenshot

Type: Boolean
Default: false

options.screenshot.delay

Type: Number
Default: 3
Wait for this number of seconds before taking a screenshot

options.viewport

Type: Object
Default: { width: 1000, height: 600 }

options.headless

Type: Boolean
Default: true

options.devtools

Type: Boolean
Default: false

Usage

const PageCheck = require('page-check');

let results = await PageCheck('http://localhost/page', {
   timeout: 15, 
   filter: err => /[1234]/.test(err.code), 
   screenshot: {
      delay: 5,
      path: `./screenshots/${Date.now()}.png`
   }
});

console.log(results);

Output

{
  "screenshot": <Buffer>,
  "errors": [
    {
      "code": 3,
      "type": "external request",
      "details": "http://domain.com/favicon.ico"
    },
    {
      "code": 6,
      "type": "console.log",
      "details": "Boop!"
    },
    {
      "code": 7,
      "type": "console.error",
      "details": "Failed to load resource: the server responded with a status of 404 (Not Found)"
    }
  ]
}

Changelog

v3.1.0 (2018-11-18):

  • added ability to spoof page requests

v3.0.2 (2018-11-22):

  • added 'iframe' error type for attached iframes

v3.0.1 (2018-11-13):

  • removed input property from results data

v3.0.0 (2018-11-11):

  • input argument now could be only a String
  • now you can take a screenshot of the testing page

v2.1.1 (2018-09-21):

  • fixed Unhandled promise rejection when the browser was closing but 'setViewport' keep firing

v2.1.0 (2018-08-30):

  • input now could be an array of links that would be auto queued

v2.0.0 (2018-08-26):

  • moved from unmaintained PhantomJS to Puppeteer