Skip to content

Commit 1e78e21

Browse files
authored
feat(wd): screenshots for sessions (#4322)
1 parent 2704307 commit 1e78e21

File tree

4 files changed

+28
-21
lines changed

4 files changed

+28
-21
lines changed

lib/helper/WebDriver.js

+11-4
Original file line numberDiff line numberDiff line change
@@ -1795,14 +1795,21 @@ class WebDriver extends Helper {
17951795
* {{> saveScreenshot }}
17961796
*/
17971797
async saveScreenshot(fileName, fullPage = false) {
1798-
const outputFile = screenshotOutputFolder(fileName);
1798+
let outputFile = screenshotOutputFolder(fileName);
17991799

18001800
if (this.activeSessionName) {
18011801
const browser = this.sessionWindows[this.activeSessionName];
18021802

1803-
if (browser) {
1804-
this.debug(`Screenshot of ${this.activeSessionName} session has been saved to ${outputFile}`);
1805-
return browser.saveScreenshot(outputFile);
1803+
for (const sessionName in this.sessionWindows) {
1804+
const activeSessionPage = this.sessionWindows[sessionName];
1805+
outputFile = screenshotOutputFolder(`${sessionName}_${fileName}`);
1806+
1807+
this.debug(`${sessionName} - Screenshot is saving to ${outputFile}`);
1808+
1809+
if (browser) {
1810+
this.debug(`Screenshot of ${sessionName} session has been saved to ${outputFile}`);
1811+
return browser.saveScreenshot(outputFile);
1812+
}
18061813
}
18071814
}
18081815

lib/plugin/screenshotOnFail.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,8 @@ module.exports = function (config) {
110110
allureReporter.addAttachment('Main session - Last Seen Screenshot', fs.readFileSync(path.join(global.output_dir, fileName)), dataType);
111111

112112
if (helper.activeSessionName) {
113-
for (const sessionName in helper.sessionPages) {
113+
const sessions = helper.sessionPages || helper.sessionWindows;
114+
for (const sessionName in sessions) {
114115
const screenshotFileName = `${sessionName}_${fileName}`;
115116
test.artifacts[`${sessionName.replace(/ /g, '_')}_screenshot`] = path.join(global.output_dir, screenshotFileName);
116117
allureReporter.addAttachment(`${sessionName} - Last Seen Screenshot`, fs.readFileSync(path.join(global.output_dir, screenshotFileName)), dataType);

test/acceptance/session_test.js

+15-8
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Scenario('screenshots reflect the current page of current session @Puppeteer @Pl
3333
const [default1Digest, default2Digest, john1Digest, john2Digest] = await I.getSHA256Digests([
3434
`${output_dir}/session_default_1.png`,
3535
`${output_dir}/session_default_2.png`,
36-
`${output_dir}/session_john_1.png`,
36+
`${output_dir}/john_session_john_1.png`,
3737
`${output_dir}/session_john_2.png`,
3838
]);
3939

@@ -77,24 +77,31 @@ Scenario('Different cookies for different sessions @Playwright @Puppeteer', asyn
7777
I.expectNotEqual(cookies.john, cookies.mary);
7878
});
7979

80-
Scenario('should save screenshot for active session @WebDriverIO @Puppeteer @Playwright', async function ({ I }) {
81-
I.amOnPage('/form/bug1467');
82-
I.saveScreenshot('original.png');
83-
I.amOnPage('/');
80+
Scenario('should save screenshot for sessions @WebDriverIO @Puppeteer @Playwright', async function ({ I }) {
81+
await I.amOnPage('/form/bug1467');
82+
await I.saveScreenshot('original.png');
83+
await I.amOnPage('/');
84+
await I.saveScreenshot('main_session.png');
8485
session('john', async () => {
8586
await I.amOnPage('/form/bug1467');
8687
event.dispatcher.emit(event.test.failed, this);
8788
});
8889

8990
const fileName = clearString(this.title);
90-
9191
const [original, failed] = await I.getSHA256Digests([
9292
`${output_dir}/original.png`,
93-
`${output_dir}/${fileName}.failed.png`,
93+
`${output_dir}/john_${fileName}.failed.png`,
9494
]);
9595

9696
// Assert that screenshots of same page in same session are equal
97-
I.expectEqual(original, failed);
97+
await I.expectEqual(original, failed);
98+
99+
// Assert that screenshots of sessions are created
100+
const [main_original, session_failed] = await I.getSHA256Digests([
101+
`${output_dir}/main_session.png`,
102+
`${output_dir}/john_${fileName}.failed.png`,
103+
]);
104+
await I.expectNotEqual(main_original, session_failed);
98105
});
99106

100107
Scenario('should throw exception and close correctly @WebDriverIO @Puppeteer @Playwright', ({ I }) => {

test/support/ScreenshotSessionHelper.js

-8
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@ const crypto = require('crypto');
44
const fs = require('fs');
55

66
class ScreenshotSessionHelper extends Helper {
7-
_finishTest() {
8-
// Cleanup screenshots created by session screenshot test
9-
const screenshotDir = fs.readdirSync(this.outputPath, { withFileTypes: true })
10-
.filter(item => item.isFile() && item.name.includes('session'));
11-
12-
screenshotDir.forEach(file => fs.unlinkSync(`${this.outputPath}/${file.name}`));
13-
}
14-
157
constructor(config) {
168
super(config);
179
this.outputPath = output_dir;

0 commit comments

Comments
 (0)