From 7773e858112a342c9b39b26d49ca39d297334f83 Mon Sep 17 00:00:00 2001 From: Aarish <118203269+ImprobableGenius@users.noreply.github.com> Date: Fri, 23 May 2025 00:42:55 -0500 Subject: [PATCH] refactor playwright service class --- services/PlaywrightService.js | 75 +++++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 13 deletions(-) diff --git a/services/PlaywrightService.js b/services/PlaywrightService.js index 8179046..2ff900e 100644 --- a/services/PlaywrightService.js +++ b/services/PlaywrightService.js @@ -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'; + } + /** * */