Skip to content
This repository was archived by the owner on Sep 21, 2022. It is now read-only.

Commit ec52a5e

Browse files
author
Stefan Lau
committed
feat: introduce option to specify delay before a screenshot is made
1 parent 084c7a0 commit ec52a5e

File tree

4 files changed

+33
-7
lines changed

4 files changed

+33
-7
lines changed

doc/config.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,11 @@ Settings list:
236236

237237
:warning: Option does not work in Opera@12.16.
238238

239+
* `screenshotDelay` — allows to specify a delay (in milliseconds) before making any screenshot.
240+
By default there is no delay.
241+
242+
This is useful when the page has elements which are animated.
243+
239244
## Sets
240245

241246
You can link some set of tests with certain browsers using `sets`.

lib/browser/browser.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
const _ = require('lodash');
4+
const Promise = require('bluebird');
45
const wd = require('./wd-bluebird');
56

67
const Camera = require('./camera');
@@ -17,11 +18,12 @@ module.exports = class Browser {
1718
}
1819

1920
captureViewportImage(page) {
20-
return this._camera.captureViewportImage(page);
21+
return Promise.delay(this.config.screenshotDelay)
22+
.then(() => this._camera.captureViewportImage(page));
2123
}
2224

2325
serialize() {
24-
const props = ['id', 'gridUrl', 'httpTimeout', 'screenshotMode', 'compositeImage'];
26+
const props = ['id', 'gridUrl', 'httpTimeout', 'screenshotMode', 'screenshotDelay', 'compositeImage'];
2527

2628
return {
2729
config: _.pick(this.config, props),

lib/config/browser-options.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ const getTopLevel = () => {
2929
windowSize: null,
3030
retry: 0,
3131
screenshotMode: 'auto',
32-
compositeImage: false
32+
compositeImage: false,
33+
screenshotDelay: 0
3334
};
3435

3536
const provideDefault = (key) => defaults[key];
@@ -207,6 +208,15 @@ function buildBrowserOptions(defaultFactory, extra) {
207208
}
208209
}),
209210

211+
screenshotDelay: option({
212+
defaultValue: defaultFactory('screenshotDelay'),
213+
parseEnv: Number,
214+
parseCli: Number,
215+
validate: (value) => {
216+
assertNonNegative(value, 'screenshotDelay');
217+
}
218+
}),
219+
210220
compositeImage: booleanOption(defaultFactory('compositeImage'))
211221
});
212222
}

test/unit/browser/new-browser.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,16 +421,25 @@ describe('browser/new-browser', () => {
421421
});
422422

423423
describe('captureViewportImage', () => {
424-
let browser;
425-
426424
beforeEach(() => {
427425
sandbox.stub(Camera.prototype, 'captureViewportImage');
426+
sandbox.stub(Promise, 'delay').returns(Promise.resolve());
427+
});
428428

429-
browser = makeBrowser({browserName: 'browser', version: '1.0'}, {calibrate: true});
429+
it('should delay capturing by the configured amount', () => {
430+
const browser = makeBrowser({browserName: 'browser', version: '1.0'}, {calibrate: false, screenshotDelay: 42});
431+
432+
return browser.launch()
433+
.then(() => browser.captureViewportImage())
434+
.then(() => {
435+
assert.calledOnce(Promise.delay);
436+
assert.calledWith(Promise.delay, 42);
437+
assert.callOrder(Promise.delay, Camera.prototype.captureViewportImage);
438+
});
430439
});
431440

432441
it('should delegate actual capturing to camera object', () => {
433-
browser = makeBrowser({browserName: 'browser', version: '1.0'}, {calibrate: false});
442+
const browser = makeBrowser({browserName: 'browser', version: '1.0'}, {calibrate: false});
434443

435444
Camera.prototype.captureViewportImage.returns(Promise.resolve({some: 'image'}));
436445

0 commit comments

Comments
 (0)