refactor playwright service class
This commit is contained in:
@@ -1,10 +1,14 @@
|
||||
// import playwright dependencies
|
||||
const { test, expect } = require('../helpers/axe-test.js');
|
||||
const { chromium } = require('playwright');
|
||||
const { injectAxe, checkA11y } = require('axe-playwright');
|
||||
const jsdom = require("jsdom");
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* PlaywrightService class
|
||||
*
|
||||
* This class is used to interact with the Playwright library
|
||||
*/
|
||||
class PlaywrightService {
|
||||
|
||||
#domain; // domain of the site to be tested
|
||||
@@ -21,7 +25,7 @@ class PlaywrightService {
|
||||
|
||||
// get the url of the site to be tested
|
||||
rootUrl() {
|
||||
return `https://${domain}`;
|
||||
return `https://${this.#domain}`;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -32,28 +36,73 @@ class PlaywrightService {
|
||||
*
|
||||
* @returns {Array} - The list of urls to be tested
|
||||
*/
|
||||
async runAccessibilityTest() {
|
||||
|
||||
async getUrlList() {
|
||||
const browser = await chromium.launch();
|
||||
const page = await browser.newPage();
|
||||
let urls = [];
|
||||
|
||||
try {
|
||||
await page.goto(this.rootUrl());
|
||||
await injectAxe(page);
|
||||
const results = await page.evaluate(async () => {
|
||||
return await window.axe.run();
|
||||
});
|
||||
await page.goto(this.sitemapUrl());
|
||||
const content = await page.content();
|
||||
const dom = new jsdom.JSDOM(content);
|
||||
const sitemapUrls = dom.window.document.querySelectorAll('a[href]');
|
||||
urls = Array.from(sitemapUrls).map(link => link.href);
|
||||
|
||||
return results.violations;
|
||||
console.log('Sitemap URLs:', urls);
|
||||
} catch (error) {
|
||||
console.error('Error fetching sitemap:', error);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
return urls;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} url
|
||||
* @returns
|
||||
*/
|
||||
async getAccessibilityResults() {
|
||||
const urls = await this.getUrlList();
|
||||
let results = [];
|
||||
|
||||
while (urls.length > 0) {
|
||||
const url = urls.pop();
|
||||
console.log('Running accessibility test on:', url);
|
||||
const result = await PlaywrightService.#runAccessibilityTest(url);
|
||||
results.push([url, result]);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run accessibility test on given url
|
||||
*
|
||||
* @param {string} url - The URL of the page to test
|
||||
* // TODO: Queue all urls from sitemap
|
||||
*/
|
||||
static async #runAccessibilityTest(url) {
|
||||
const browser = await chromium.launch();
|
||||
const page = await browser.newPage();
|
||||
let results = [];
|
||||
|
||||
try {
|
||||
await page.goto(url);
|
||||
await injectAxe(page);
|
||||
results = await page.evaluate(async () => {
|
||||
return await window.axe.run();
|
||||
});
|
||||
} catch(error) {
|
||||
console.error('Error running accessibility test:', error);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
|
||||
return results?.violations || 'No violations found';
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user