diff --git a/lib/helper/WebDriver.js b/lib/helper/WebDriver.js index 359fb16ea..82182b3a7 100644 --- a/lib/helper/WebDriver.js +++ b/lib/helper/WebDriver.js @@ -1795,14 +1795,21 @@ class WebDriver extends Helper { * {{> saveScreenshot }} */ async saveScreenshot(fileName, fullPage = false) { - const outputFile = screenshotOutputFolder(fileName); + let outputFile = screenshotOutputFolder(fileName); if (this.activeSessionName) { const browser = this.sessionWindows[this.activeSessionName]; - if (browser) { - this.debug(`Screenshot of ${this.activeSessionName} session has been saved to ${outputFile}`); - return browser.saveScreenshot(outputFile); + for (const sessionName in this.sessionWindows) { + const activeSessionPage = this.sessionWindows[sessionName]; + outputFile = screenshotOutputFolder(`${sessionName}_${fileName}`); + + this.debug(`${sessionName} - Screenshot is saving to ${outputFile}`); + + if (browser) { + this.debug(`Screenshot of ${sessionName} session has been saved to ${outputFile}`); + return browser.saveScreenshot(outputFile); + } } } diff --git a/lib/plugin/screenshotOnFail.js b/lib/plugin/screenshotOnFail.js index 3ce1f388f..58ef1948a 100644 --- a/lib/plugin/screenshotOnFail.js +++ b/lib/plugin/screenshotOnFail.js @@ -110,7 +110,8 @@ module.exports = function (config) { 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 sessions = helper.sessionPages || helper.sessionWindows; + for (const sessionName in sessions) { 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); diff --git a/test/acceptance/session_test.js b/test/acceptance/session_test.js index 0d313b06d..d8ea18627 100644 --- a/test/acceptance/session_test.js +++ b/test/acceptance/session_test.js @@ -33,7 +33,7 @@ Scenario('screenshots reflect the current page of current session @Puppeteer @Pl const [default1Digest, default2Digest, john1Digest, john2Digest] = await I.getSHA256Digests([ `${output_dir}/session_default_1.png`, `${output_dir}/session_default_2.png`, - `${output_dir}/session_john_1.png`, + `${output_dir}/john_session_john_1.png`, `${output_dir}/session_john_2.png`, ]); @@ -77,24 +77,31 @@ Scenario('Different cookies for different sessions @Playwright @Puppeteer', asyn I.expectNotEqual(cookies.john, cookies.mary); }); -Scenario('should save screenshot for active session @WebDriverIO @Puppeteer @Playwright', async function ({ I }) { - I.amOnPage('/form/bug1467'); - I.saveScreenshot('original.png'); - I.amOnPage('/'); +Scenario('should save screenshot for sessions @WebDriverIO @Puppeteer @Playwright', async function ({ I }) { + await I.amOnPage('/form/bug1467'); + await I.saveScreenshot('original.png'); + await I.amOnPage('/'); + await I.saveScreenshot('main_session.png'); session('john', async () => { await I.amOnPage('/form/bug1467'); event.dispatcher.emit(event.test.failed, this); }); const fileName = clearString(this.title); - const [original, failed] = await I.getSHA256Digests([ `${output_dir}/original.png`, - `${output_dir}/${fileName}.failed.png`, + `${output_dir}/john_${fileName}.failed.png`, ]); // Assert that screenshots of same page in same session are equal - I.expectEqual(original, failed); + await I.expectEqual(original, failed); + + // Assert that screenshots of sessions are created + const [main_original, session_failed] = await I.getSHA256Digests([ + `${output_dir}/main_session.png`, + `${output_dir}/john_${fileName}.failed.png`, + ]); + await I.expectNotEqual(main_original, session_failed); }); Scenario('should throw exception and close correctly @WebDriverIO @Puppeteer @Playwright', ({ I }) => { diff --git a/test/support/ScreenshotSessionHelper.js b/test/support/ScreenshotSessionHelper.js index 43f5164a8..f7314731d 100644 --- a/test/support/ScreenshotSessionHelper.js +++ b/test/support/ScreenshotSessionHelper.js @@ -4,14 +4,6 @@ const crypto = require('crypto'); const fs = require('fs'); class ScreenshotSessionHelper extends Helper { - _finishTest() { - // Cleanup screenshots created by session screenshot test - const screenshotDir = fs.readdirSync(this.outputPath, { withFileTypes: true }) - .filter(item => item.isFile() && item.name.includes('session')); - - screenshotDir.forEach(file => fs.unlinkSync(`${this.outputPath}/${file.name}`)); - } - constructor(config) { super(config); this.outputPath = output_dir;