145 lines
4.4 KiB
JavaScript
145 lines
4.4 KiB
JavaScript
const fs = require('fs')
|
|
var {Before, BeforeAll, After, AfterAll, Status} = require('cucumber')
|
|
var {logging} = require('selenium-webdriver');
|
|
|
|
/*
|
|
Before(function (scenario, callback) {
|
|
callback();
|
|
});
|
|
|
|
BeforeAll(async function (scenario, callback) {
|
|
// await __wdriver.get('chrome://settings/clearBrowserData').then(async () => {
|
|
// console.log("DEBUG clearing browser cache");
|
|
// await __wdriver.sleep(3000);
|
|
// await __wdriver.switchTo().activeElement();
|
|
//// await __wdriver.findElement(By.css("* /deep/ #clearBrowsingDataConfirm")).click();
|
|
// await __wdriver.findElement(By.css("clearBrowsingDataConfirm")).click();
|
|
// await __wdriver.sleep(3000);
|
|
// }).catch(async err => {
|
|
// console.log("DEBUG caught err " + err);
|
|
// throw err;
|
|
// });
|
|
callback();
|
|
})*/
|
|
|
|
|
|
async function writeScreenShot(filename) {
|
|
filename = filename.replace(/\s+/g, '_');
|
|
return await __wdriver.takeScreenshot().then(async (image, err) => {
|
|
|
|
await fs.writeFile(filename, image, 'base64', (err) => {
|
|
if (err) {
|
|
console.log(err)
|
|
}
|
|
})
|
|
|
|
return image
|
|
})
|
|
}
|
|
|
|
async function writeConsoleLog(filename){
|
|
filename = filename.replace(/\s+/g, '_');
|
|
await __wdriver.manage().logs().get(logging.Type.BROWSER).then(async logs => {
|
|
for(let log in logs){
|
|
fs.appendFileSync(filename, `[${(new Date(parseInt(logs[log].timestamp))).toISOString()}]${logs[log].level}:${logs[log].message}\n`);
|
|
}
|
|
})
|
|
|
|
}
|
|
|
|
async function writeDriverLog(filename){
|
|
filename = filename.replace(/\s+/g, '_');
|
|
await __wdriver.manage().logs().get(logging.Type.DRIVER).then(async logs => {
|
|
for(let log in logs){
|
|
fs.appendFileSync(filename, `[${(new Date(parseInt(logs[log].timestamp))).toISOString()}]:${logs[log].message}\n`);
|
|
}
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
let scenarioCt = 0;
|
|
let currentFeature = '';
|
|
|
|
Before(async function (scenario){
|
|
|
|
//safety kill any live data generator
|
|
if(!await scenarioContainsTag(scenario, '@use-live-data') && __liveDataGenRunning){
|
|
console.log("killing live generator");
|
|
__killLiveDataGen = true;
|
|
}
|
|
});
|
|
|
|
async function scenarioContainsTag(scenario, tag){
|
|
let match = scenario.pickle.tags.find( elem => elem.name === tag)
|
|
//console.log("DEBUG match " + match);
|
|
return match !== undefined;
|
|
}
|
|
|
|
After(async function (scenario /*, callback */) {
|
|
|
|
//__wdriver.sleep(1500) //DEBUG - getting shots out of order
|
|
// Handled in cucumber.js
|
|
// if(!fs.existsSync(`./${__config.screenshot_dir}`)){
|
|
// fs.mkdir(`./${__config.screenshot_dir}`, () => {})
|
|
// }
|
|
|
|
let uri = scenario.sourceLocation.uri
|
|
let feature = uri.substring(uri.lastIndexOf("/") + 1).replace('.','-')
|
|
let name = scenario.pickle.name.trim().replace(' ', '_');
|
|
name = name.replace('/', '-');
|
|
name = name.replace('\\', '-');
|
|
|
|
if(feature !== currentFeature){
|
|
scenarioCt = 0;
|
|
}
|
|
|
|
if(scenarioCt === 0){
|
|
currentFeature = feature;
|
|
}
|
|
// let now = new Date()
|
|
// let nowStr = now.getFullYear().toString() +
|
|
// (now.getMonth() + 1).toString().padStart(2, '0') +
|
|
// now.getDate().toString().padStart(2, '0') + "-" +
|
|
// now.getHours().toString().padStart(2, '0') +
|
|
// now.getMinutes().toString().padStart(2, '0') +
|
|
// now.getSeconds().toString().padStart(2, '0')
|
|
//let filebase = __config.screenshot_dir + '/' + feature + "-" + nowStr + "-" + name
|
|
let filebase = __screenShotDir + "/" + feature + "-" + (scenarioCt++).toString().padStart(2, '0') + "-" + name;
|
|
let world = this;
|
|
|
|
if(scenario.result.status === Status.FAILED){
|
|
await writeScreenShot(filebase + "-ERR" + ".png").then(async img => {
|
|
await world.attach(img, 'image/png')
|
|
});
|
|
await writeConsoleLog(filebase + '-ERR-console.log').catch(async e => {
|
|
throw('failed to write ' + filebase + '-ERR-console.log\n' + e);
|
|
});
|
|
await writeDriverLog(filebase + '-ERR-driver.log').catch(async e => {
|
|
throw('failed to write ' + filebase + '-ERR-console.log\n' + e);
|
|
})
|
|
|
|
}else {
|
|
await writeScreenShot(filebase + "--OK" + ".png").then(async img => {
|
|
await world.attach(img, 'image/png')
|
|
})
|
|
}
|
|
|
|
//callback()
|
|
|
|
});
|
|
|
|
|
|
|
|
AfterAll(async function ( ) {
|
|
if(__liveDataGenRunning) {
|
|
console.log("killing live generator");
|
|
__killLiveDataGen = true;
|
|
}
|
|
});
|
|
|
|
|
|
|
|
|