codeceptjs 2.6.10 → 2.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/docs/basics.md +2 -1
- package/docs/bdd.md +1 -2
- package/docs/build/Appium.js +1 -2
- package/docs/build/FileSystem.js +3 -3
- package/docs/build/Mochawesome.js +1 -1
- package/docs/build/Nightmare.js +5 -5
- package/docs/build/Playwright.js +40 -14
- package/docs/build/Protractor.js +2 -2
- package/docs/build/WebDriver.js +18 -6
- package/docs/changelog.md +134 -127
- package/docs/community-helpers.md +1 -1
- package/docs/helpers/Playwright.md +1 -1
- package/docs/translation.md +20 -0
- package/docs/wiki/{Community-Helpers.md → Community-Helpers-&-Plugins.md} +1 -1
- package/docs/wiki/Home.md +8 -4
- package/docs/wiki/Tests.md +64 -61
- package/lib/actor.js +1 -1
- package/lib/assert/empty.js +1 -1
- package/lib/assert/equal.js +1 -1
- package/lib/assert/include.js +1 -1
- package/lib/assert/truth.js +1 -1
- package/lib/codecept.js +2 -3
- package/lib/command/configMigrate.js +3 -5
- package/lib/command/definitions.js +1 -2
- package/lib/command/dryRun.js +1 -2
- package/lib/command/gherkin/init.js +1 -1
- package/lib/command/gherkin/snippets.js +3 -3
- package/lib/command/gherkin/steps.js +2 -3
- package/lib/command/info.js +1 -2
- package/lib/command/init.js +1 -1
- package/lib/command/interactive.js +1 -2
- package/lib/command/list.js +3 -4
- package/lib/command/run-multiple.js +2 -3
- package/lib/command/run-rerun.js +2 -4
- package/lib/command/run.js +1 -2
- package/lib/container.js +1 -1
- package/lib/data/context.js +1 -1
- package/lib/event.js +1 -1
- package/lib/helper/Appium.js +1 -2
- package/lib/helper/FileSystem.js +3 -3
- package/lib/helper/Mochawesome.js +1 -1
- package/lib/helper/Nightmare.js +5 -5
- package/lib/helper/Playwright.js +40 -14
- package/lib/helper/Protractor.js +2 -2
- package/lib/helper/WebDriver.js +18 -6
- package/lib/helper/clientscripts/PollyWebDriverExt.js +1 -1
- package/lib/hooks.js +1 -2
- package/lib/interfaces/gherkin.js +0 -1
- package/lib/listener/helpers.js +1 -2
- package/lib/listener/mocha.js +0 -1
- package/lib/locator.js +2 -2
- package/lib/pause.js +1 -1
- package/lib/plugin/allure.js +1 -1
- package/lib/plugin/autoDelay.js +2 -2
- package/lib/plugin/autoLogin.js +1 -1
- package/lib/plugin/standardActingHelpers.js +0 -2
- package/lib/recorder.js +1 -1
- package/package.json +3 -2
- package/translations/fr-FR.js +63 -0
- package/translations/index.js +5 -4
package/lib/assert/empty.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const Assertion = require('../assert');
|
|
2
2
|
const AssertionFailedError = require('./error');
|
|
3
|
-
const template = require('../utils')
|
|
3
|
+
const { template } = require('../utils');
|
|
4
4
|
const output = require('../output');
|
|
5
5
|
|
|
6
6
|
class EmptinessAssertion extends Assertion {
|
package/lib/assert/equal.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const Assertion = require('../assert');
|
|
2
2
|
const AssertionFailedError = require('./error');
|
|
3
|
-
const template = require('../utils')
|
|
3
|
+
const { template } = require('../utils');
|
|
4
4
|
const output = require('../output');
|
|
5
5
|
|
|
6
6
|
class EqualityAssertion extends Assertion {
|
package/lib/assert/include.js
CHANGED
package/lib/assert/truth.js
CHANGED
package/lib/codecept.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
const existsSync = require('fs')
|
|
2
|
-
const readFileSync = require('fs').readFileSync;
|
|
1
|
+
const { existsSync, readFileSync } = require('fs');
|
|
3
2
|
const glob = require('glob');
|
|
4
3
|
const fsPath = require('path');
|
|
5
|
-
const resolve = require('path')
|
|
4
|
+
const { resolve } = require('path');
|
|
6
5
|
|
|
7
6
|
const container = require('./container');
|
|
8
7
|
const Config = require('./config');
|
|
@@ -5,11 +5,9 @@ const mkdirp = require('mkdirp');
|
|
|
5
5
|
const path = require('path');
|
|
6
6
|
const util = require('util');
|
|
7
7
|
|
|
8
|
-
const print = require('../output')
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const fileExists = require('../utils').fileExists;
|
|
12
|
-
const getTestRoot = require('./utils').getTestRoot;
|
|
8
|
+
const { print, success, error } = require('../output');
|
|
9
|
+
const { fileExists } = require('../utils');
|
|
10
|
+
const { getTestRoot } = require('./utils');
|
|
13
11
|
|
|
14
12
|
module.exports = function (initPath) {
|
|
15
13
|
const testsPath = getTestRoot(initPath);
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
|
|
4
|
-
const getConfig = require('./utils')
|
|
5
|
-
const getTestRoot = require('./utils').getTestRoot;
|
|
4
|
+
const { getConfig, getTestRoot } = require('./utils');
|
|
6
5
|
const Codecept = require('../codecept');
|
|
7
6
|
const container = require('../container');
|
|
8
7
|
const output = require('../output');
|
package/lib/command/dryRun.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
const getConfig = require('./utils')
|
|
2
|
-
const getTestRoot = require('./utils').getTestRoot;
|
|
1
|
+
const { getConfig, getTestRoot } = require('./utils');
|
|
3
2
|
const Config = require('../config');
|
|
4
3
|
const Codecept = require('../codecept');
|
|
5
4
|
const output = require('../output');
|
|
@@ -4,7 +4,7 @@ const path = require('path');
|
|
|
4
4
|
const mkdirp = require('mkdirp');
|
|
5
5
|
|
|
6
6
|
const output = require('../../output');
|
|
7
|
-
const { fileExists
|
|
7
|
+
const { fileExists } = require('../../utils');
|
|
8
8
|
const {
|
|
9
9
|
getConfig, getTestRoot, updateConfig, safeFileWrite,
|
|
10
10
|
} = require('../utils');
|
|
@@ -4,8 +4,8 @@ const { Parser } = require('gherkin');
|
|
|
4
4
|
const glob = require('glob');
|
|
5
5
|
const fsPath = require('path');
|
|
6
6
|
|
|
7
|
-
const getConfig = require('../utils')
|
|
8
|
-
const getTestRoot = require('../utils')
|
|
7
|
+
const { getConfig } = require('../utils');
|
|
8
|
+
const { getTestRoot } = require('../utils');
|
|
9
9
|
const Codecept = require('../../codecept');
|
|
10
10
|
const output = require('../../output');
|
|
11
11
|
const { matchStep } = require('../../interfaces/bdd');
|
|
@@ -97,7 +97,7 @@ module.exports = function (genPath, options) {
|
|
|
97
97
|
|
|
98
98
|
let stepFile = options.path || config.gherkin.steps[0];
|
|
99
99
|
if (!fs.existsSync(stepFile)) {
|
|
100
|
-
output.error(
|
|
100
|
+
output.error(`Please enter a valid step file path ${stepFile}`);
|
|
101
101
|
process.exit(1);
|
|
102
102
|
}
|
|
103
103
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
const getConfig = require('../utils')
|
|
2
|
-
const getTestRoot = require('../utils')
|
|
1
|
+
const { getConfig } = require('../utils');
|
|
2
|
+
const { getTestRoot } = require('../utils');
|
|
3
3
|
const Codecept = require('../../codecept');
|
|
4
|
-
const container = require('../../container');
|
|
5
4
|
const output = require('../../output');
|
|
6
5
|
const { getSteps } = require('../../interfaces/bdd');
|
|
7
6
|
|
package/lib/command/info.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const envinfo = require('envinfo');
|
|
2
2
|
|
|
3
|
-
const getConfig = require('./utils')
|
|
4
|
-
const getTestRoot = require('./utils').getTestRoot;
|
|
3
|
+
const { getConfig, getTestRoot } = require('./utils');
|
|
5
4
|
const Codecept = require('../codecept');
|
|
6
5
|
const output = require('../output');
|
|
7
6
|
|
package/lib/command/init.js
CHANGED
|
@@ -21,7 +21,7 @@ const defaultConfig = {
|
|
|
21
21
|
mocha: {},
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
-
const helpers =
|
|
24
|
+
const helpers = require('../plugin/standardActingHelpers').slice();
|
|
25
25
|
const translations = Object.keys(require('../../translations'));
|
|
26
26
|
|
|
27
27
|
const noTranslation = 'English (no localization)';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
const getConfig = require('./utils')
|
|
2
|
-
const getTestRoot = require('./utils').getTestRoot;
|
|
1
|
+
const { getConfig, getTestRoot } = require('./utils');
|
|
3
2
|
const recorder = require('../recorder');
|
|
4
3
|
const Codecept = require('../codecept');
|
|
5
4
|
const event = require('../event');
|
package/lib/command/list.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
const getConfig = require('./utils')
|
|
2
|
-
const getTestRoot = require('./utils').getTestRoot;
|
|
1
|
+
const { getConfig, getTestRoot } = require('./utils');
|
|
3
2
|
const Codecept = require('../codecept');
|
|
4
3
|
const container = require('../container');
|
|
5
|
-
const getParamsToString = require('../parser')
|
|
6
|
-
const methodsOfObject = require('../utils')
|
|
4
|
+
const { getParamsToString } = require('../parser');
|
|
5
|
+
const { methodsOfObject } = require('../utils');
|
|
7
6
|
const output = require('../output');
|
|
8
7
|
|
|
9
8
|
module.exports = function (path) {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
const fork = require('child_process')
|
|
1
|
+
const { fork } = require('child_process');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const crypto = require('crypto');
|
|
4
4
|
|
|
5
5
|
const runHook = require('../hooks');
|
|
6
6
|
const event = require('../event');
|
|
7
7
|
const collection = require('./run-multiple/collection');
|
|
8
|
-
const clearString = require('../utils')
|
|
9
|
-
const replaceValueDeep = require('../utils').replaceValueDeep;
|
|
8
|
+
const { clearString, replaceValueDeep } = require('../utils');
|
|
10
9
|
const {
|
|
11
10
|
getConfig, getTestRoot, fail,
|
|
12
11
|
} = require('./utils');
|
package/lib/command/run-rerun.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
const getConfig = require('./utils')
|
|
2
|
-
const
|
|
3
|
-
const printError = require('./utils').printError;
|
|
4
|
-
const createOutputDir = require('./utils').createOutputDir;
|
|
1
|
+
const { getConfig, getTestRoot } = require('./utils');
|
|
2
|
+
const { printError, createOutputDir } = require('./utils');
|
|
5
3
|
const Config = require('../config');
|
|
6
4
|
const Codecept = require('../rerun');
|
|
7
5
|
|
package/lib/command/run.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
const mkdirp = require('mkdirp');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
|
|
4
|
-
const getConfig = require('./utils')
|
|
5
|
-
const getTestRoot = require('./utils').getTestRoot;
|
|
4
|
+
const { getConfig, getTestRoot } = require('./utils');
|
|
6
5
|
const printError = require('./utils').printError;
|
|
7
6
|
const createOutputDir = require('./utils').createOutputDir;
|
|
8
7
|
const Config = require('../config');
|
package/lib/container.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const glob = require('glob');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
|
|
4
|
-
const fileExists = require('./utils')
|
|
4
|
+
const { fileExists } = require('./utils');
|
|
5
5
|
const Translation = require('./translation');
|
|
6
6
|
const MochaFactory = require('./mochaFactory');
|
|
7
7
|
const recorder = require('./recorder');
|
package/lib/data/context.js
CHANGED
package/lib/event.js
CHANGED
package/lib/helper/Appium.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
let webdriverio;
|
|
2
2
|
let wdioV4;
|
|
3
|
-
let SCREEN_SIZE;
|
|
4
3
|
|
|
5
4
|
const fs = require('fs');
|
|
6
5
|
const requireg = require('requireg');
|
|
7
6
|
|
|
8
7
|
const Webdriver = require('./WebDriver');
|
|
9
8
|
const AssertionFailedError = require('../assert/error');
|
|
10
|
-
const truth = require('../assert/truth')
|
|
9
|
+
const { truth } = require('../assert/truth');
|
|
11
10
|
const recorder = require('../recorder');
|
|
12
11
|
const Locator = require('../locator');
|
|
13
12
|
const ConnectionRefused = require('./errors/ConnectionRefused');
|
package/lib/helper/FileSystem.js
CHANGED
|
@@ -3,9 +3,9 @@ const path = require('path');
|
|
|
3
3
|
const fs = require('fs');
|
|
4
4
|
|
|
5
5
|
const Helper = require('../helper');
|
|
6
|
-
const fileExists = require('../utils')
|
|
7
|
-
const fileIncludes = require('../assert/include')
|
|
8
|
-
const fileEquals = require('../assert/equal')
|
|
6
|
+
const { fileExists } = require('../utils');
|
|
7
|
+
const { fileIncludes } = require('../assert/include');
|
|
8
|
+
const { fileEquals } = require('../assert/equal');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Helper for testing filesystem.
|
package/lib/helper/Nightmare.js
CHANGED
|
@@ -3,11 +3,11 @@ const requireg = require('requireg');
|
|
|
3
3
|
const urlResolve = require('url').resolve;
|
|
4
4
|
|
|
5
5
|
const Helper = require('../helper');
|
|
6
|
-
const stringIncludes = require('../assert/include')
|
|
7
|
-
const urlEquals = require('../assert/equal')
|
|
8
|
-
const equals = require('../assert/equal')
|
|
9
|
-
const empty = require('../assert/empty')
|
|
10
|
-
const truth = require('../assert/truth')
|
|
6
|
+
const { includes: stringIncludes } = require('../assert/include');
|
|
7
|
+
const { urlEquals } = require('../assert/equal');
|
|
8
|
+
const { equals } = require('../assert/equal');
|
|
9
|
+
const { empty } = require('../assert/empty');
|
|
10
|
+
const { truth } = require('../assert/truth');
|
|
11
11
|
const Locator = require('../locator');
|
|
12
12
|
const ElementNotFound = require('./errors/ElementNotFound');
|
|
13
13
|
const {
|
package/lib/helper/Playwright.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const requireg = require('requireg');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const fs = require('fs');
|
|
4
|
-
const fsExtra = require('fs-extra');
|
|
5
4
|
|
|
6
5
|
const Helper = require('../helper');
|
|
7
6
|
const Locator = require('../locator');
|
|
@@ -11,7 +10,7 @@ const { urlEquals } = require('../assert/equal');
|
|
|
11
10
|
const { equals } = require('../assert/equal');
|
|
12
11
|
const { empty } = require('../assert/empty');
|
|
13
12
|
const { truth } = require('../assert/truth');
|
|
14
|
-
|
|
13
|
+
|
|
15
14
|
const {
|
|
16
15
|
xpathLocator,
|
|
17
16
|
ucfirst,
|
|
@@ -160,7 +159,7 @@ const { createValueEngine, createDisabledEngine } = require('./extras/Playwright
|
|
|
160
159
|
* }
|
|
161
160
|
* ```
|
|
162
161
|
*
|
|
163
|
-
* #### Example #6:
|
|
162
|
+
* #### Example #6: Launch tests emulating iPhone 6
|
|
164
163
|
*
|
|
165
164
|
*
|
|
166
165
|
*
|
|
@@ -234,6 +233,7 @@ class Playwright extends Helper {
|
|
|
234
233
|
keepBrowserState: false,
|
|
235
234
|
show: false,
|
|
236
235
|
defaultPopupAction: 'accept',
|
|
236
|
+
ignoreHTTPSErrors: false, // Adding it here o that context can be set up to ignore the SSL errors
|
|
237
237
|
};
|
|
238
238
|
|
|
239
239
|
config = Object.assign(defaults, config);
|
|
@@ -542,7 +542,7 @@ class Playwright extends Helper {
|
|
|
542
542
|
this.browser.on('targetchanged', (target) => {
|
|
543
543
|
this.debugSection('Url', target.url());
|
|
544
544
|
});
|
|
545
|
-
this.browserContext = await this.browser.newContext({ acceptDownloads: true, ...this.options.emulate })
|
|
545
|
+
this.browserContext = await this.browser.newContext({ ignoreHTTPSErrors: this.options.ignoreHTTPSErrors, acceptDownloads: true, ...this.options.emulate });// Adding the HTTPSError ignore in the context so that we can ignore those errors
|
|
546
546
|
|
|
547
547
|
const existingPages = await this.browserContext.pages();
|
|
548
548
|
|
|
@@ -694,7 +694,7 @@ class Playwright extends Helper {
|
|
|
694
694
|
assertElementExists(els);
|
|
695
695
|
|
|
696
696
|
// Use manual mouse.move instead of .hover() so the offset can be added to the coordinates
|
|
697
|
-
const { x, y } = await els[0]
|
|
697
|
+
const { x, y } = await clickablePoint(els[0]);
|
|
698
698
|
await this.page.mouse.move(x + offsetX, y + offsetY);
|
|
699
699
|
return this._waitForAction();
|
|
700
700
|
}
|
|
@@ -750,7 +750,7 @@ class Playwright extends Helper {
|
|
|
750
750
|
const els = await this._locate(locator);
|
|
751
751
|
assertElementExists(els, locator, 'Element');
|
|
752
752
|
await els[0].scrollIntoViewIfNeeded();
|
|
753
|
-
const elementCoordinates = await els[0]
|
|
753
|
+
const elementCoordinates = await clickablePoint(els[0]);
|
|
754
754
|
await this.executeScript((offsetX, offsetY) => window.scrollBy(offsetX, offsetY), { offsetX: elementCoordinates.x + offsetX, offsetY: elementCoordinates.y + offsetY });
|
|
755
755
|
} else {
|
|
756
756
|
await this.executeScript(({ offsetX, offsetY }) => window.scrollTo(offsetX, offsetY), { offsetX, offsetY });
|
|
@@ -1617,8 +1617,8 @@ class Playwright extends Helper {
|
|
|
1617
1617
|
const src = await this._locate(locator);
|
|
1618
1618
|
assertElementExists(src, locator, 'Slider Element');
|
|
1619
1619
|
|
|
1620
|
-
// Note: Using private api
|
|
1621
|
-
const sliderSource = await src[0]
|
|
1620
|
+
// Note: Using clickablePoint private api because the .BoundingBox does not take into account iframe offsets!
|
|
1621
|
+
const sliderSource = await clickablePoint(src[0]);
|
|
1622
1622
|
|
|
1623
1623
|
// Drag start point
|
|
1624
1624
|
await this.page.mouse.move(sliderSource.x, sliderSource.y, { steps: 5 });
|
|
@@ -2100,7 +2100,14 @@ async function proceedClick(locator, context = null, options = {}) {
|
|
|
2100
2100
|
} else {
|
|
2101
2101
|
assertElementExists(els, locator, 'Clickable element');
|
|
2102
2102
|
}
|
|
2103
|
-
|
|
2103
|
+
/*
|
|
2104
|
+
using the force true options itself but instead dispatching a click
|
|
2105
|
+
*/
|
|
2106
|
+
if (options.force) {
|
|
2107
|
+
await els[0].dispatchEvent('click');
|
|
2108
|
+
} else {
|
|
2109
|
+
await els[0].click(options);
|
|
2110
|
+
}
|
|
2104
2111
|
const promises = [];
|
|
2105
2112
|
if (options.waitForNavigation) {
|
|
2106
2113
|
promises.push(this.waitForNavigation());
|
|
@@ -2222,9 +2229,9 @@ async function proceedDragAndDrop(sourceLocator, destinationLocator, options = {
|
|
|
2222
2229
|
const dst = await this._locate(destinationLocator);
|
|
2223
2230
|
assertElementExists(dst, destinationLocator, 'Destination Element');
|
|
2224
2231
|
|
|
2225
|
-
// Note: Using private api
|
|
2226
|
-
const dragSource = await src[0]
|
|
2227
|
-
const dragDestination = await dst[0]
|
|
2232
|
+
// Note: Using clickablePoint private api becaues the .BoundingBox does not take into account iframe offsets!
|
|
2233
|
+
const dragSource = await clickablePoint(src[0]);
|
|
2234
|
+
const dragDestination = await clickablePoint(dst[0]);
|
|
2228
2235
|
|
|
2229
2236
|
// Drag start point
|
|
2230
2237
|
await this.page.mouse.move(dragSource.x, dragSource.y, { steps: 5 });
|
|
@@ -2349,10 +2356,20 @@ function $XPath(element, selector) {
|
|
|
2349
2356
|
async function targetCreatedHandler(page) {
|
|
2350
2357
|
if (!page) return;
|
|
2351
2358
|
this.withinLocator = null;
|
|
2352
|
-
page.on('load', (
|
|
2359
|
+
page.on('load', () => {
|
|
2353
2360
|
page.$('body')
|
|
2354
2361
|
.catch(() => null)
|
|
2355
|
-
.then(context =>
|
|
2362
|
+
.then(async context => {
|
|
2363
|
+
if (this.context._type === 'Frame') {
|
|
2364
|
+
// we are inside iframe?
|
|
2365
|
+
const frameEl = await this.context.frameElement();
|
|
2366
|
+
this.context = await frameEl.contentFrame();
|
|
2367
|
+
return;
|
|
2368
|
+
}
|
|
2369
|
+
// if context element was in iframe - keep it
|
|
2370
|
+
// if (await this.context.ownerFrame()) return;
|
|
2371
|
+
this.context = context;
|
|
2372
|
+
});
|
|
2356
2373
|
});
|
|
2357
2374
|
page.on('console', (msg) => {
|
|
2358
2375
|
this.debugSection(`Browser:${ucfirst(msg.type())}`, (msg._text || '') + msg.args().join(' '));
|
|
@@ -2435,3 +2452,12 @@ function getNormalizedKey(key) {
|
|
|
2435
2452
|
}
|
|
2436
2453
|
return normalizedKey;
|
|
2437
2454
|
}
|
|
2455
|
+
|
|
2456
|
+
async function clickablePoint(el) {
|
|
2457
|
+
const rect = await el.boundingBox();
|
|
2458
|
+
if (!rect) throw new ElementNotFound(el);
|
|
2459
|
+
const {
|
|
2460
|
+
x, y, width, height,
|
|
2461
|
+
} = rect;
|
|
2462
|
+
return { x: x + width / 2, y: y + height / 2 };
|
|
2463
|
+
}
|
package/lib/helper/Protractor.js
CHANGED
|
@@ -10,8 +10,8 @@ const requireg = require('requireg');
|
|
|
10
10
|
const Helper = require('../helper');
|
|
11
11
|
const stringIncludes = require('../assert/include').includes;
|
|
12
12
|
const { urlEquals, equals } = require('../assert/equal');
|
|
13
|
-
const empty = require('../assert/empty')
|
|
14
|
-
const truth = require('../assert/truth')
|
|
13
|
+
const { empty } = require('../assert/empty');
|
|
14
|
+
const { truth } = require('../assert/truth');
|
|
15
15
|
const {
|
|
16
16
|
xpathLocator,
|
|
17
17
|
fileExists,
|
package/lib/helper/WebDriver.js
CHANGED
|
@@ -1839,12 +1839,24 @@ class WebDriver extends Helper {
|
|
|
1839
1839
|
|
|
1840
1840
|
// for chrome
|
|
1841
1841
|
if (browser.isW3C) {
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1842
|
+
const xOffset = await this.grabElementBoundingRect(locator, 'x');
|
|
1843
|
+
const yOffset = await this.grabElementBoundingRect(locator, 'y');
|
|
1844
|
+
|
|
1845
|
+
return browser.performActions([{
|
|
1846
|
+
type: 'pointer',
|
|
1847
|
+
id: 'pointer1',
|
|
1848
|
+
parameters: { pointerType: 'mouse' },
|
|
1849
|
+
actions: [
|
|
1850
|
+
{
|
|
1851
|
+
type: 'pointerMove', origin: 'pointer', duration: 1000, x: xOffset, y: yOffset,
|
|
1852
|
+
},
|
|
1853
|
+
{ type: 'pointerDown', button: 0 },
|
|
1854
|
+
{
|
|
1855
|
+
type: 'pointerMove', origin: 'pointer', duration: 1000, x: offsetX, y: 0,
|
|
1856
|
+
},
|
|
1857
|
+
{ type: 'pointerUp', button: 0 },
|
|
1858
|
+
],
|
|
1859
|
+
},
|
|
1848
1860
|
]);
|
|
1849
1861
|
}
|
|
1850
1862
|
|
|
@@ -55,7 +55,7 @@ const pollyWebDriver = {
|
|
|
55
55
|
throw new Error(`Invalid value for baseUrl: ${baseUrl}`);
|
|
56
56
|
}
|
|
57
57
|
if (!(typeof oneOrMoreUrls === 'string' || Array.isArray(oneOrMoreUrls))) {
|
|
58
|
-
throw new Error(`Expected type of
|
|
58
|
+
throw new Error(`Expected type of URLs is 'string' or 'array', found '${typeof oneOrMoreUrls}'.`);
|
|
59
59
|
}
|
|
60
60
|
// Remove '/' if it's at the end of baseUrl
|
|
61
61
|
const lastChar = baseUrl.substr(-1);
|
package/lib/hooks.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const fsPath = require('path');
|
|
2
2
|
|
|
3
|
-
const getParamNames = require('./utils')
|
|
4
|
-
const fileExists = require('./utils').fileExists;
|
|
3
|
+
const { getParamNames, fileExists } = require('./utils');
|
|
5
4
|
const output = require('./output');
|
|
6
5
|
|
|
7
6
|
module.exports = function (hook, done, stage) {
|
|
@@ -2,7 +2,6 @@ const { Parser } = require('gherkin');
|
|
|
2
2
|
const { Context, Suite, Test } = require('mocha');
|
|
3
3
|
|
|
4
4
|
const { matchStep } = require('./bdd');
|
|
5
|
-
const { isAsyncFunction } = require('../utils');
|
|
6
5
|
const event = require('../event');
|
|
7
6
|
const scenario = require('../scenario');
|
|
8
7
|
const Step = require('../step');
|
package/lib/listener/helpers.js
CHANGED
|
@@ -2,8 +2,7 @@ const event = require('../event');
|
|
|
2
2
|
const container = require('../container');
|
|
3
3
|
const recorder = require('../recorder');
|
|
4
4
|
const store = require('../store');
|
|
5
|
-
const error = require('../output')
|
|
6
|
-
const { deepMerge } = require('../utils');
|
|
5
|
+
const { error } = require('../output');
|
|
7
6
|
/**
|
|
8
7
|
* Enable Helpers to listen to test events
|
|
9
8
|
*/
|
package/lib/listener/mocha.js
CHANGED
package/lib/locator.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const cssToXPath = require('css-to-xpath');
|
|
2
|
-
const sprintf = require('sprintf-js')
|
|
2
|
+
const { sprintf } = require('sprintf-js');
|
|
3
3
|
|
|
4
|
-
const xpathLocator = require('./utils')
|
|
4
|
+
const { xpathLocator } = require('./utils');
|
|
5
5
|
|
|
6
6
|
const locatorTypes = ['css', 'by', 'xpath', 'id', 'name', 'fuzzy', 'frame'];
|
|
7
7
|
/** @class */
|
package/lib/pause.js
CHANGED
|
@@ -7,7 +7,7 @@ const store = require('./store');
|
|
|
7
7
|
const recorder = require('./recorder');
|
|
8
8
|
const event = require('./event');
|
|
9
9
|
const output = require('./output');
|
|
10
|
-
const methodsOfObject = require('./utils')
|
|
10
|
+
const { methodsOfObject } = require('./utils');
|
|
11
11
|
|
|
12
12
|
// npm install colors
|
|
13
13
|
let rl;
|
package/lib/plugin/allure.js
CHANGED
|
@@ -2,7 +2,7 @@ const Allure = require('allure-js-commons');
|
|
|
2
2
|
|
|
3
3
|
const event = require('../event');
|
|
4
4
|
const logger = require('../output');
|
|
5
|
-
const ansiRegExp = require('../utils')
|
|
5
|
+
const { ansiRegExp } = require('../utils');
|
|
6
6
|
|
|
7
7
|
const defaultConfig = {
|
|
8
8
|
outputDir: global.output_dir,
|
package/lib/plugin/autoDelay.js
CHANGED
|
@@ -2,8 +2,8 @@ const Container = require('../container');
|
|
|
2
2
|
const store = require('../store');
|
|
3
3
|
const recorder = require('../recorder');
|
|
4
4
|
const event = require('../event');
|
|
5
|
-
const log = require('../output')
|
|
6
|
-
const supportedHelpers = require('./standardActingHelpers');
|
|
5
|
+
const { log } = require('../output');
|
|
6
|
+
const supportedHelpers = require('./standardActingHelpers').slice();
|
|
7
7
|
|
|
8
8
|
const methodsToDelay = [
|
|
9
9
|
'click',
|
package/lib/plugin/autoLogin.js
CHANGED
|
@@ -4,7 +4,7 @@ const { fileExists } = require('../utils');
|
|
|
4
4
|
const container = require('../container');
|
|
5
5
|
const store = require('../store');
|
|
6
6
|
const recorder = require('../recorder');
|
|
7
|
-
const debug = require('../output')
|
|
7
|
+
const { debug } = require('../output');
|
|
8
8
|
const isAsyncFunction = require('../utils').isAsyncFunction;
|
|
9
9
|
|
|
10
10
|
const defaultUser = {
|
package/lib/recorder.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeceptjs",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.11",
|
|
4
4
|
"description": "Supercharged End 2 End Testing Framework for NodeJS",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"acceptance",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"puppeteer",
|
|
10
10
|
"webdriver",
|
|
11
11
|
"testcafe",
|
|
12
|
+
"playwright",
|
|
12
13
|
"protractor",
|
|
13
14
|
"bdd",
|
|
14
15
|
"tdd",
|
|
@@ -110,7 +111,7 @@
|
|
|
110
111
|
"mocha-parallel-tests": "^2.3.0",
|
|
111
112
|
"nightmare": "^3.0.2",
|
|
112
113
|
"nodemon": "^1.19.4",
|
|
113
|
-
"playwright": "^1.
|
|
114
|
+
"playwright": "^1.4.0",
|
|
114
115
|
"protractor": "^5.4.4",
|
|
115
116
|
"puppeteer": "^4.0.0",
|
|
116
117
|
"qrcode-terminal": "^0.12.0",
|