Skip to content

Commit 1040494

Browse files
authored
fix: screenshot error in beforeSuite/AfterSuite (#4385)
1 parent 2469f24 commit 1040494

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

lib/plugin/screenshotOnFail.js

+4
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ module.exports = function (config) {
7373
}
7474

7575
event.dispatcher.on(event.test.failed, (test) => {
76+
if (test.ctx?._runnable.title.includes('hook: ')) {
77+
output.plugin('screenshotOnFail', 'BeforeSuite/AfterSuite do not have any access to the browser, hence it could not take screenshot.');
78+
return;
79+
}
7680
recorder.add('screenshot of failed test', async () => {
7781
let fileName = clearString(test.title);
7882
const dataType = 'image/png';

lib/plugin/stepByStepReport.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -99,21 +99,23 @@ module.exports = function (config) {
9999
currentTest = test;
100100
});
101101

102-
event.dispatcher.on(event.step.failed, persistStep);
103-
104-
event.dispatcher.on(event.step.after, (step) => {
102+
event.dispatcher.on(event.step.failed, (step) => {
105103
recorder.add('screenshot of failed test', async () => persistStep(step), true);
106104
});
107105

106+
event.dispatcher.on(event.step.after, persistStep);
107+
108108
event.dispatcher.on(event.test.passed, (test) => {
109109
if (!config.deleteSuccessful) return persist(test);
110110
// cleanup
111111
deleteDir(dir);
112112
});
113113

114114
event.dispatcher.on(event.test.failed, (test, err) => {
115-
// BeforeSuite/AfterSuite don't have any access to the browser, hence it could not take screenshot.
116-
if (test.ctx._runnable.title.includes('hook: BeforeSuite')) return;
115+
if (test.ctx._runnable.title.includes('hook: ')) {
116+
output.plugin('stepByStepReport', 'BeforeSuite/AfterSuite do not have any access to the browser, hence it could not take screenshot.');
117+
return;
118+
}
117119
persist(test, err);
118120
});
119121

test/unit/plugin/screenshotOnFail_test.js

+14
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,19 @@ describe('screenshotOnFail', () => {
6464
const regexpFileName = /test1_[0-9]{10}.failed.png/;
6565
expect(fileName.match(regexpFileName).length).is.equal(1);
6666
});
67+
68+
it('should not save screenshot in BeforeSuite', async () => {
69+
screenshotOnFail({ uniqueScreenshotNames: true });
70+
event.dispatcher.emit(event.test.failed, { title: 'test1', ctx: { _runnable: { title: 'hook: BeforeSuite' } } });
71+
await recorder.promise();
72+
expect(!screenshotSaved.called).is.ok;
73+
});
74+
75+
it('should not save screenshot in AfterSuite', async () => {
76+
screenshotOnFail({ uniqueScreenshotNames: true });
77+
event.dispatcher.emit(event.test.failed, { title: 'test1', ctx: { _runnable: { title: 'hook: AfterSuite' } } });
78+
await recorder.promise();
79+
expect(!screenshotSaved.called).is.ok;
80+
});
6781
// TODO: write more tests for different options
6882
});

0 commit comments

Comments
 (0)