Sha256: 37844aee8de5241959b1d2492edb011e0f6118f70546fec25390531d5a7fde31

Contents?: true

Size: 1.83 KB

Versions: 375

Compression:

Stored size: 1.83 KB

Contents

const CDP = require('chrome-remote-interface');
const axeCore = require('axe-core');
const assert = require('assert');
const { parse: parseURL } = require('url');

// Cheap URL validation
const isValidURL = input => {
	const u = parseURL(input);
	return u.protocol && u.host;
};

const example = async url => {
	// eslint-disable-next-line new-cap
	const client = await CDP();
	const { Runtime: runtime, Page: page } = client;

	let results;

	try {
		await page.enable();
		await runtime.enable();

		await page.navigate({ url });

		// This function is injected into the browser and is responsible for
		// running `axe-core`.
		const browserCode = () => {
			/* eslint-env browser */
			return new Promise((resolve, reject) => {
				const axe = window.axe;
				if (!axe) {
					throw new Error('Unable to find axe-core');
				}

				// Finally, run axe-core
				axe
					.run()
					// For some reason, when resolving with an object, CDP ignores
					// its value (`results.result.value` is undefined). By
					// `JSON.stringify()`ing it, we can `JSON.parse()` it later on
					// and return a valid results set.
					.then(results => JSON.stringify(results))
					.then(resolve)
					.catch(reject);
			});
		};

		// Inject axe-core
		await runtime.evaluate({
			expression: axeCore.source
		});

		// Run axe-core
		const ret = await runtime.evaluate({
			expression: `(${browserCode})()`,
			awaitPromise: true
		});

		// re-parse
		results = JSON.parse(ret.result.value);
	} catch (err) {
		// Ensure we close the client before exiting the fn
		client.close();
		throw err;
	}
	client.close();
	return results;
};

// node axe-cdp.js <url>
const url = process.argv[2];
assert(isValidURL(url), 'Invalid URL');

example(url)
	.then(results => {
		console.log(results);
	})
	.catch(err => {
		console.error('Error running axe-core:', err.message);
		process.exit(1);
	});

Version data entries

375 entries across 375 versions & 1 rubygems

Version Path
govuk_publishing_components-30.4.1 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-30.4.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-30.3.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-30.2.1 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-30.2.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-30.1.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-30.0.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.15.3 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.15.2 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.15.1 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.15.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.14.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.13.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.12.1 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.12.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.11.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.10.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.9.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.8.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js
govuk_publishing_components-29.7.0 node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js