From 3ae837bd114d2ced129b164918828c4be65aac83 Mon Sep 17 00:00:00 2001 From: KobeNguyenT <7845001+kobenguyent@users.noreply.github.com> Date: Sat, 1 Jul 2023 10:03:06 +0200 Subject: [PATCH] fix: screenshots every session for easy debugging (#3711) * fix: screenshots every session for easy debugging * fix: artifact keys * fix: DRY --- lib/helper/Playwright.js | 31 ++++++++++++++++++++----------- lib/helper/Puppeteer.js | 31 ++++++++++++++++++++----------- lib/plugin/screenshotOnFail.js | 13 +++++++++++-- 3 files changed, 51 insertions(+), 24 deletions(-) diff --git a/lib/helper/Playwright.js b/lib/helper/Playwright.js index 36d201916..6bddce056 100644 --- a/lib/helper/Playwright.js +++ b/lib/helper/Playwright.js @@ -2103,23 +2103,32 @@ class Playwright extends Helper { */ async saveScreenshot(fileName, fullPage) { const fullPageOption = fullPage || this.options.fullPageScreenshots; - const outputFile = screenshotOutputFolder(fileName); + let outputFile = screenshotOutputFolder(fileName); this.debug(`Screenshot is saving to ${outputFile}`); + await this.page.screenshot({ + path: outputFile, + fullPage: fullPageOption, + type: 'png', + }); + if (this.activeSessionName) { - const activeSessionPage = this.sessionPages[this.activeSessionName]; - - if (activeSessionPage) { - return activeSessionPage.screenshot({ - path: outputFile, - fullPage: fullPageOption, - type: 'png', - }); + for (const sessionName in this.sessionPages) { + const activeSessionPage = this.sessionPages[sessionName]; + outputFile = screenshotOutputFolder(`${sessionName}_${fileName}`); + + this.debug(`${sessionName} - Screenshot is saving to ${outputFile}`); + + if (activeSessionPage) { + await activeSessionPage.screenshot({ + path: outputFile, + fullPage: fullPageOption, + type: 'png', + }); + } } } - - return this.page.screenshot({ path: outputFile, fullPage: fullPageOption, type: 'png' }); } /** diff --git a/lib/helper/Puppeteer.js b/lib/helper/Puppeteer.js index f5c0a1581..18190ff37 100644 --- a/lib/helper/Puppeteer.js +++ b/lib/helper/Puppeteer.js @@ -1838,23 +1838,32 @@ class Puppeteer extends Helper { */ async saveScreenshot(fileName, fullPage) { const fullPageOption = fullPage || this.options.fullPageScreenshots; - const outputFile = screenshotOutputFolder(fileName); + let outputFile = screenshotOutputFolder(fileName); this.debug(`Screenshot is saving to ${outputFile}`); + await this.page.screenshot({ + path: outputFile, + fullPage: fullPageOption, + type: 'png', + }); + if (this.activeSessionName) { - const activeSessionPage = this.sessionPages[this.activeSessionName]; - - if (activeSessionPage) { - return activeSessionPage.screenshot({ - path: outputFile, - fullPage: fullPageOption, - type: 'png', - }); + for (const sessionName in this.sessionPages) { + const activeSessionPage = this.sessionPages[sessionName]; + outputFile = screenshotOutputFolder(`${sessionName}_${fileName}`); + + this.debug(`${sessionName} - Screenshot is saving to ${outputFile}`); + + if (activeSessionPage) { + await activeSessionPage.screenshot({ + path: outputFile, + fullPage: fullPageOption, + type: 'png', + }); + } } } - - return this.page.screenshot({ path: outputFile, fullPage: fullPageOption, type: 'png' }); } async _failed() { diff --git a/lib/plugin/screenshotOnFail.js b/lib/plugin/screenshotOnFail.js index 2ba5f6cd3..3ce1f388f 100644 --- a/lib/plugin/screenshotOnFail.js +++ b/lib/plugin/screenshotOnFail.js @@ -75,7 +75,8 @@ module.exports = function (config) { event.dispatcher.on(event.test.failed, (test) => { recorder.add('screenshot of failed test', async () => { let fileName = clearString(test.title); - // This prevent data driven to be included in the failed screenshot file name + const dataType = 'image/png'; + // This prevents data driven to be included in the failed screenshot file name if (fileName.indexOf('{') !== -1) { fileName = fileName.substr(0, (fileName.indexOf('{') - 3)).trim(); } @@ -106,7 +107,15 @@ module.exports = function (config) { const allureReporter = Container.plugins('allure'); if (allureReporter) { - allureReporter.addAttachment('Last Seen Screenshot', fs.readFileSync(path.join(global.output_dir, fileName)), 'image/png'); + allureReporter.addAttachment('Main session - Last Seen Screenshot', fs.readFileSync(path.join(global.output_dir, fileName)), dataType); + + if (helper.activeSessionName) { + for (const sessionName in helper.sessionPages) { + const screenshotFileName = `${sessionName}_${fileName}`; + test.artifacts[`${sessionName.replace(/ /g, '_')}_screenshot`] = path.join(global.output_dir, screenshotFileName); + allureReporter.addAttachment(`${sessionName} - Last Seen Screenshot`, fs.readFileSync(path.join(global.output_dir, screenshotFileName)), dataType); + } + } } const cucumberReporter = Container.plugins('cucumberJsonReporter');