Skip to content

Commit e0fe15f

Browse files
committed
added setWindowSize, renamed hooks
1 parent 6c3db51 commit e0fe15f

12 files changed

+181
-90
lines changed

README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@ Configuration hook is a function that is updates CodeceptJS configuration.
44

55
Those hooks are expected to simplify configuration for common use cases.
66

7-
### useHeadlessWhen
7+
### setHeadlessWhen
88

99
Toggle headless mode for Puppeteer, WebDriver, TestCafe, and Nightmare on condition.
1010

1111
Usage:
1212

1313
```js
1414
// in codecept.conf.js
15-
const { useHeadlessWhen } = require('@codeceptjs/configure');
15+
const { setHeadlessWhen } = require('@codeceptjs/configure');
1616

1717
// enable headless only if environment variable HEADLESS exist
18-
useHeadlessWhen(process.env.HEADLESS);
18+
setHeadlessWhen(process.env.HEADLESS);
1919

2020
// or enable headless on CI
21-
useHeadlessWhen(process.env.CI);
21+
setHeadlessWhen(process.env.CI);
2222

2323
exports.config = {
2424
helpers: {
@@ -33,7 +33,7 @@ exports.config = {
3333
* For Puppeteer, TestCafe, Nigthmare it enables `show: true`.
3434
* For WebDriver with Chrome browser adds `--headless` option to chrome options inside desiredCapabilities.
3535

36-
### useSharedCookies
36+
### setSharedCookies
3737

3838
Shares cookies between browser and REST/GraphQL helpers.
3939

@@ -42,10 +42,10 @@ This function obtains cookies from an active session in WebDriver or Puppeteer h
4242

4343
```js
4444
// in codecept.conf.js
45-
const { useSharedCookies } = require('@codeceptjs/configure');
45+
const { setSharedCookies } = require('@codeceptjs/configure');
4646

4747
// share cookies between browser helpers and REST/GraphQL
48-
useSharedCookies();
48+
setSharedCookies();
4949

5050
exports.config = {
5151
helpers: {

codeceptjs.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const codeceptjs = require('codeceptjs');
2+
3+
module.exports = codeceptjs;

deepMerge.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const merge = require('lodash.mergewith');
2+
3+
function customizer(objValue, srcValue) {
4+
if (Array.isArray(objValue)) {
5+
return objValue.concat(srcValue);
6+
}
7+
}
8+
9+
module.exports = function (a, b) {
10+
return merge(a, b, customizer);
11+
}

hooks/setHeadlessWhen.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const { config } = require('../codeceptjs');
2+
const merge = require('../deepMerge');
3+
4+
module.exports = function(when) {
5+
if (!when) return;
6+
7+
config.addHook(cfg => {
8+
if (!cfg.helpers) return;
9+
if (cfg.helpers.Puppeteer) {
10+
cfg.helpers.Puppeteer.show = false;
11+
}
12+
if (cfg.helpers.Nightmare) {
13+
cfg.helpers.Nightmare.show = false;
14+
}
15+
if (cfg.helpers.TestCafe) {
16+
cfg.helpers.TestCafe.show = false;
17+
}
18+
if (cfg.helpers.WebDriver) {
19+
if (cfg.helpers.WebDriver.browser === 'chrome') {
20+
21+
cfg.helpers.WebDriver.desiredCapabilities = merge(
22+
cfg.helpers.WebDriver.desiredCapabilities || {},
23+
{
24+
chromeOptions: {
25+
args: [ "--headless", "--disable-gpu", "--no-sandbox" ]
26+
}
27+
}
28+
)
29+
}
30+
}
31+
});
32+
}

hooks/setSharedCookies.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
const { container, config } = require('../codeceptjs');
2+
3+
module.exports = function() {
4+
const browserHelpers = ['WebDriver','Protractor','Puppeteer','TestCafe','Nigthmare'];
5+
config.addHook(cfg => {
6+
const helper = detectBrowserHelper(cfg.helpers);
7+
let cookies;
8+
const shareCookiesFn = async (request) => {
9+
if (!cookies) cookies = await container.helpers(helper).grabCookie();
10+
request.headers = { Cookie: cookies.map(c => `${c.name}=${c.value}`).join('; ') };
11+
}
12+
if (cfg.helpers.REST) {
13+
cfg.helpers.REST.onRequest = shareCookiesFn;
14+
}
15+
if (cfg.helpers.ApiDataFactory) {
16+
cfg.helpers.ApiDataFactory.onRequest = shareCookiesFn;
17+
}
18+
if (cfg.helpers.GraphQL) {
19+
cfg.helpers.GraphQL.onRequest = shareCookiesFn;
20+
}
21+
if (cfg.helpers.GraphQLDataFactory) {
22+
cfg.helpers.GraphQLDataFactory.onRequest = shareCookiesFn;
23+
}
24+
});
25+
26+
function detectBrowserHelper(helperConfig) {
27+
if (!helperConfig) return false;
28+
for (const helper of browserHelpers) {
29+
if (Object.keys(helperConfig).indexOf(helper) >= 0) return helper;
30+
}
31+
}
32+
}

hooks/setWindowSize.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const { config } = require('../codeceptjs');
2+
const merge = require('../deepMerge');
3+
4+
module.exports = function(width, height) {
5+
config.addHook(cfg => {
6+
if (!cfg.helpers) return;
7+
if (cfg.helpers.Puppeteer) {
8+
const args = ['--no-sandbox', `--window-size=${width},${height}`];
9+
cfg.helpers.Puppeteer.windowSize = `${width}x${height}`;
10+
11+
// prepare window for a browser
12+
cfg.helpers.Puppeteer.chrome = merge(
13+
cfg.helpers.Puppeteer.chrome || {},
14+
{ args, defaultViewport: null, } // disables viewport emualtion. See https://github.com/Codeception/CodeceptJS/issues/1209#issuecomment-522487793
15+
);
16+
}
17+
18+
if (cfg.helpers.Protractor) {
19+
cfg.helpers.Protractor.windowSize = `${width}x${height}`;
20+
}
21+
if (cfg.helpers.Nightmare) {
22+
cfg.helpers.Nightmare.windowSize = `${width}x${height}`;
23+
}
24+
if (cfg.helpers.TestCafe) {
25+
cfg.helpers.TestCafe.windowSize = `${width}x${height}`;
26+
}
27+
if (cfg.helpers.WebDriver) {
28+
cfg.helpers.WebDriver.windowSize = `${width}x${height}`;
29+
}
30+
});
31+
}

hooks/useHeadlessWhen.js

Lines changed: 0 additions & 31 deletions
This file was deleted.

hooks/useSharedCookies.js

Lines changed: 0 additions & 32 deletions
This file was deleted.

index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
module.exports = {
2-
useHeadlessWhen: require('./hooks/useHeadlessWhen'),
3-
useSharedCookies: require('./hooks/useSharedCookies'),
2+
setHeadlessWhen: require('./hooks/setHeadlessWhen'),
3+
setSharedCookies: require('./hooks/setSharedCookies'),
4+
setWindowSize: require('./hooks/setWindowSize'),
45
}

package-lock.json

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)