nemo-accessibility
Version:
nemo-accessibility is a nemo plugin aimed to run accessibility scans during nemo tests. nemo-accessibility plugin uses axe-core, htmlcode smiffer and chrome engines to run accessibility scans on a given page or on a given element on a page.
67 lines (61 loc) • 2.67 kB
JavaScript
var request = require("request"),
debug = require("debug"),
fs = require('fs'),
log = debug("nemo-accessibility:log"),
error = debug("nemo-accessibility:error"),
path = require('path');
var jsonOp = {};
function getChromeResults(argObj, nemo, callback){
return new Promise(function(resolve, reject) {
var retStr ='';
var driver = nemo.driver;
var filePath = path.join(__dirname, '../lib/engines/chrome/axs_testing.js');
var scriptSource = fs.readFileSync(filePath, 'utf8');
driver.executeScript(scriptSource)
.then(function(){
driver.switchTo().defaultContent();
driver.executeAsyncScript(function() {
var callback = arguments[arguments.length - 1];
var configuration = new axs.AuditConfiguration();
configuration.showUnsupportedRulesWarning = false;
var results = axs.Audit.run(configuration);
var audit = results.map(function (result) {
var DOMElements = result.elements;
var message = '';
if(result.result ==='FAIL'){
if (DOMElements !== undefined) {
var maxElements = Math.min(DOMElements.length, 5);
for (var i = 0; i < maxElements; i++) {
var el = DOMElements[i];
message += '\n';
try {
message += axs.utils.getQuerySelectorText(el);
} catch (err) {
message += ' tagName:' + el.tagName;
message += ' id:' + el.id;
}
}
}
return {
heading: result.rule.heading,
result: result.result,
severity: result.rule.severity,
elements: message
};
} //Return Failures only
});
for (var i=audit.length;i--;){
if (audit[i] == null) audit.splice(i,1);
}
callback(audit);
}).then(function(audit) {
// console.log(audit)
jsonOp["results"] = audit;
var retobj = JSON.stringify(jsonOp);
resolve(retobj);
})
})
}) //end return promise
}
module.exports.getChromeResults = getChromeResults;
;