donobu
Version:
Create browser automations with an LLM agent and replay them as Playwright scripts.
49 lines • 2.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RunAccessibilityTestTool = void 0;
const Tool_1 = require("./Tool");
const JsonUtils_1 = require("../utils/JsonUtils");
class RunAccessibilityTestTool extends Tool_1.Tool {
constructor() {
super(RunAccessibilityTestTool.NAME, 'Run an web accessibility (i.e. axe-core) test on the current webpage.', 'RunAccessibilityTestToolCoreParameters', 'RunAccessibilityTestToolGptParameters');
}
async call(context, _parameters) {
const page = context.page;
// Run the Axe-core analysis
const fullResultStr = (await page.evaluate(() => {
return window.axe.run().then((results) => {
return JSON.stringify(results);
});
}));
const fullResult = JsonUtils_1.JsonUtils.jsonStringToJsonObject(fullResultStr);
const violations = fullResult.violations;
if (!violations || violations.length === 0) {
return {
isSuccessful: true,
forLlm: 'No accessibility violations found.',
metadata: fullResult,
};
}
// Summarize the violations using "help" as the key
const violationSummary = new Map();
for (const violation of violations) {
violationSummary.set(violation.help, (violationSummary.get(violation.help) ?? 0) + violation.nodes.length);
}
// Build the summary report
const summaryReport = [];
violationSummary.forEach((count, helpText) => {
summaryReport.push(`${count} violations found for: ${helpText}`);
});
return {
isSuccessful: true,
forLlm: summaryReport.join('\n'),
metadata: fullResult,
};
}
async callFromGpt(context, parameters) {
return this.call(context, parameters);
}
}
exports.RunAccessibilityTestTool = RunAccessibilityTestTool;
RunAccessibilityTestTool.NAME = 'runAccessibilityTest';
//# sourceMappingURL=RunAccessibilityTestTool.js.map