@applitools/eyes-selenium 4.56.0 → 4.56.4

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 CHANGED
@@ -3,6 +3,36 @@
3
3
  ## Unreleased
4
4
 
5
5
 
6
+ ## 4.56.4 - 2021/10/12
7
+
8
+ - move spec driver implementation to the separate package
9
+ - updated to @applitools/eyes-api@1.1.4 (from 1.1.3)
10
+ - updated to @applitools/eyes-sdk-core@12.23.15 (from 12.23.14)
11
+ - updated to @applitools/spec-driver-selenium@1.0.2 (from 1.0.1)
12
+ - updated to @applitools/visual-grid-client@15.8.34 (from 15.8.33)
13
+ - updated to @applitools/spec-driver-selenium@1.1.0 (from 1.0.2)
14
+
15
+ ## 4.56.3 - 2021/10/7
16
+
17
+ - updated to @applitools/eyes-api@1.1.3 (from 1.1.1)
18
+ - updated to @applitools/eyes-sdk-core@12.23.14 (from 12.23.6)
19
+ - updated to @applitools/visual-grid-client@15.8.33 (from 15.8.26)
20
+
21
+ ## 4.56.2 - 2021/9/13
22
+
23
+ - updated to @applitools/eyes-sdk-core@12.23.0 (from 12.22.6)
24
+ - updated to @applitools/visual-grid-client@15.8.21 (from 15.8.20)
25
+ - updated to @applitools/eyes-api@1.1.1 (from 1.0.12)
26
+ - updated to @applitools/eyes-sdk-core@12.23.6 (from 12.23.0)
27
+ - updated to @applitools/utils@1.2.3 (from 1.2.2)
28
+ - updated to @applitools/visual-grid-client@15.8.26 (from 15.8.21)
29
+
30
+ ## 4.56.1 - 2021/8/13
31
+
32
+ - updated to @applitools/eyes-api@1.0.12 (from 1.0.11)
33
+ - updated to @applitools/eyes-sdk-core@12.22.6 (from 12.22.4)
34
+ - updated to @applitools/visual-grid-client@15.8.20 (from 15.8.18)
35
+
6
36
  ## 4.56.0 - 2021/8/9
7
37
 
8
38
  - updated to @applitools/eyes-api@1.0.11 (from 1.0.7)
package/dist/api.js CHANGED
@@ -6,15 +6,27 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
6
6
  if (k2 === undefined) k2 = k;
7
7
  o[k2] = m[k];
8
8
  }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
9
21
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
22
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
23
  };
12
24
  Object.defineProperty(exports, "__esModule", { value: true });
13
25
  exports.BatchClose = exports.Target = exports.CheckSettings = exports.Configuration = exports.Eyes = void 0;
14
26
  const eyes_sdk_core_1 = require("@applitools/eyes-sdk-core");
15
- const api = require("@applitools/eyes-api");
16
- const spec = require("./spec-driver");
17
- const sdk = eyes_sdk_core_1.makeSDK({
27
+ const api = __importStar(require("@applitools/eyes-api"));
28
+ const spec = __importStar(require("@applitools/spec-driver-selenium"));
29
+ const sdk = (0, eyes_sdk_core_1.makeSDK)({
18
30
  name: 'eyes.selenium',
19
31
  version: `${require('../package.json').version}--${process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION}`,
20
32
  spec,
@@ -38,4 +50,3 @@ class BatchClose extends api.BatchClose {
38
50
  }
39
51
  exports.BatchClose = BatchClose;
40
52
  BatchClose._spec = sdk;
41
- //# sourceMappingURL=api.js.map
package/dist/index.js CHANGED
@@ -10,10 +10,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- if (!process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION) {
14
- const { version } = require('selenium-webdriver/package.json');
15
- const [major] = version.split('.', 1);
16
- process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION = major;
17
- }
18
13
  __exportStar(require("./api"), exports);
19
- //# sourceMappingURL=index.js.map
@@ -1,323 +1,13 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
12
11
  };
13
12
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.wrapDriver = exports.build = exports.performAction = exports.getElementText = exports.getElementAttribute = exports.getElementRegion = exports.getOrientation = exports.waitUntilDisplayed = exports.scrollIntoView = exports.type = exports.hover = exports.click = exports.takeScreenshot = exports.visit = exports.getUrl = exports.getTitle = exports.getDriverInfo = exports.setWindowSize = exports.getWindowSize = exports.findElements = exports.findElement = exports.childContext = exports.parentContext = exports.mainContext = exports.executeScript = exports.isEqualElements = exports.isStaleElementError = exports.transformDriver = exports.isSelector = exports.isElement = exports.isDriver = void 0;
15
- const utils = require("@applitools/utils");
16
- const legacy = require("./legacy");
17
- const byHash = ['className', 'css', 'id', 'js', 'linkText', 'name', 'partialLinkText', 'tagName', 'xpath'];
18
- function extractElementId(element) {
19
- return element.getId();
20
- }
21
- function transformSelector(selector) {
22
- if (utils.types.isString(selector)) {
23
- return { css: selector };
24
- }
25
- else if (utils.types.has(selector, ['type', 'selector'])) {
26
- if (selector.type === 'css')
27
- return { css: selector.selector };
28
- else if (selector.type === 'xpath')
29
- return { xpath: selector.selector };
30
- else
31
- return { using: selector.type, value: selector.selector };
32
- }
33
- return selector;
34
- }
35
- function isDriver(driver) {
36
- return utils.types.instanceOf(driver, 'WebDriver');
37
- }
38
- exports.isDriver = isDriver;
39
- function isElement(element) {
40
- return utils.types.instanceOf(element, 'WebElement');
41
- }
42
- exports.isElement = isElement;
43
- function isSelector(selector) {
44
- if (!selector)
45
- return false;
46
- return (utils.types.has(selector, ['type', 'selector']) ||
47
- utils.types.has(selector, ['using', 'value']) ||
48
- Object.keys(selector).some(key => byHash.includes(key)) ||
49
- utils.types.isString(selector));
50
- }
51
- exports.isSelector = isSelector;
52
- function transformDriver(driver) {
53
- driver.getExecutor().defineCommand('getSessionDetails', 'GET', '/session/:sessionId');
54
- driver.getExecutor().defineCommand('getOrientation', 'GET', '/session/:sessionId/orientation');
55
- driver.getExecutor().defineCommand('performTouch', 'POST', '/session/:sessionId/touch/perform');
56
- if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
57
- driver.getExecutor().defineCommand('switchToParentFrame', 'POST', '/session/:sessionId/frame/parent');
58
- }
59
- return driver;
60
- }
61
- exports.transformDriver = transformDriver;
62
- function isStaleElementError(error) {
63
- if (!error)
64
- return false;
65
- error = error.originalError || error;
66
- return error instanceof Error && error.name === 'StaleElementReferenceError';
67
- }
68
- exports.isStaleElementError = isStaleElementError;
69
- async function isEqualElements(_driver, element1, element2) {
70
- if (!element1 || !element2)
71
- return false;
72
- const elementId1 = await extractElementId(element1);
73
- const elementId2 = await extractElementId(element2);
74
- return elementId1 === elementId2;
75
- }
76
- exports.isEqualElements = isEqualElements;
77
- async function executeScript(driver, script, arg) {
78
- return driver.executeScript(script, arg);
79
- }
80
- exports.executeScript = executeScript;
81
- async function mainContext(driver) {
82
- await driver.switchTo().defaultContent();
83
- return driver;
84
- }
85
- exports.mainContext = mainContext;
86
- async function parentContext(driver) {
87
- if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
88
- const { Command } = require('selenium-webdriver/lib/command');
89
- await driver.schedule(new Command('switchToParentFrame'));
90
- return driver;
91
- }
92
- await driver.switchTo().parentFrame();
93
- return driver;
94
- }
95
- exports.parentContext = parentContext;
96
- async function childContext(driver, element) {
97
- await driver.switchTo().frame(element);
98
- return driver;
99
- }
100
- exports.childContext = childContext;
101
- async function findElement(driver, selector) {
102
- try {
103
- return await driver.findElement(transformSelector(selector));
104
- }
105
- catch (err) {
106
- if (err.name === 'NoSuchElementError')
107
- return null;
108
- else
109
- throw err;
110
- }
111
- }
112
- exports.findElement = findElement;
113
- async function findElements(driver, selector) {
114
- return driver.findElements(transformSelector(selector));
115
- }
116
- exports.findElements = findElements;
117
- async function getWindowSize(driver) {
118
- try {
119
- const window = driver.manage().window();
120
- if (utils.types.isFunction(window.getSize)) {
121
- return await window.getSize();
122
- }
123
- else if (utils.types.isFunction(window.getRect)) {
124
- const rect = await window.getRect();
125
- return { width: rect.width, height: rect.height };
126
- }
127
- }
128
- catch (err) {
129
- const cmd = require('selenium-webdriver/lib/command');
130
- return driver.execute(new cmd.Command(cmd.Name.GET_WINDOW_SIZE).setParameter('windowHandle', 'current'));
131
- }
132
- }
133
- exports.getWindowSize = getWindowSize;
134
- async function setWindowSize(driver, size) {
135
- const window = driver.manage().window();
136
- if (utils.types.isFunction(window.setRect)) {
137
- await window.setRect({ x: 0, y: 0, width: size.width, height: size.height });
138
- }
139
- else {
140
- await window.setPosition(0, 0);
141
- await window.setSize(size.width, size.height);
142
- }
143
- }
144
- exports.setWindowSize = setWindowSize;
145
- async function getDriverInfo(driver) {
146
- var _a, _b, _c, _d, _e, _f;
147
- const session = await driver.getSession();
148
- const capabilities = await driver.getCapabilities();
149
- const desiredCapabilities = (_a = capabilities.get('desired')) !== null && _a !== void 0 ? _a : {};
150
- const platformName = (_c = (_b = capabilities.get('platformName')) !== null && _b !== void 0 ? _b : capabilities.get('platform')) !== null && _c !== void 0 ? _c : desiredCapabilities.platformName;
151
- const isMobile = ['android', 'ios'].includes(platformName === null || platformName === void 0 ? void 0 : platformName.toLowerCase());
152
- const info = {
153
- sessionId: session.getId(),
154
- isMobile,
155
- isNative: isMobile && !capabilities.get('browserName'),
156
- deviceName: (_d = desiredCapabilities.deviceName) !== null && _d !== void 0 ? _d : capabilities.get('deviceName'),
157
- platformName,
158
- platformVersion: capabilities.get('platformVersion'),
159
- browserName: (_e = capabilities.get('browserName')) !== null && _e !== void 0 ? _e : desiredCapabilities.browserName,
160
- browserVersion: (_f = capabilities.get('browserVersion')) !== null && _f !== void 0 ? _f : capabilities.get('version'),
161
- };
162
- if (info.isNative) {
163
- let details;
164
- if (capabilities.has('viewportRect') && capabilities.has('pixelRatio')) {
165
- details = { viewportRect: capabilities.get('viewportRect'), pixelRatio: capabilities.get('pixelRatio') };
166
- }
167
- else {
168
- const { Command } = require('selenium-webdriver/lib/command');
169
- const getSessionDetailsCommand = new Command('getSessionDetails');
170
- details =
171
- process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3'
172
- ? await driver.schedule(getSessionDetailsCommand)
173
- : await driver.execute(getSessionDetailsCommand);
174
- }
175
- info.pixelRatio = details.pixelRatio;
176
- if (details.viewportRect) {
177
- info.viewportRegion = {
178
- x: details.viewportRect.left,
179
- y: details.viewportRect.top,
180
- width: details.viewportRect.width,
181
- height: details.viewportRect.height,
182
- };
183
- }
184
- }
185
- return info;
186
- }
187
- exports.getDriverInfo = getDriverInfo;
188
- async function getTitle(driver) {
189
- return driver.getTitle();
190
- }
191
- exports.getTitle = getTitle;
192
- async function getUrl(driver) {
193
- return driver.getCurrentUrl();
194
- }
195
- exports.getUrl = getUrl;
196
- async function visit(driver, url) {
197
- await driver.get(url);
198
- }
199
- exports.visit = visit;
200
- async function takeScreenshot(driver) {
201
- return driver.takeScreenshot();
202
- }
203
- exports.takeScreenshot = takeScreenshot;
204
- async function click(driver, element) {
205
- if (isSelector(element))
206
- element = await findElement(driver, element);
207
- await element.click();
208
- }
209
- exports.click = click;
210
- async function hover(driver, element) {
211
- if (isSelector(element))
212
- element = await findElement(driver, element);
213
- if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
214
- const { ActionSequence } = require('selenium-webdriver');
215
- const action = new ActionSequence(driver);
216
- await action.mouseMove(element).perform();
217
- }
218
- else {
219
- await driver.actions().move({ origin: element }).perform();
220
- }
221
- }
222
- exports.hover = hover;
223
- async function type(driver, element, keys) {
224
- if (isSelector(element))
225
- element = await findElement(driver, element);
226
- await element.sendKeys(keys);
227
- }
228
- exports.type = type;
229
- async function scrollIntoView(driver, element, align = false) {
230
- if (isSelector(element))
231
- element = await findElement(driver, element);
232
- await driver.executeScript('arguments[0].scrollIntoView(arguments[1])', element, align);
233
- }
234
- exports.scrollIntoView = scrollIntoView;
235
- async function waitUntilDisplayed(driver, selector, timeout) {
236
- const { until } = require('selenium-webdriver');
237
- const element = await findElement(driver, selector);
238
- await driver.wait(until.elementIsVisible(element), timeout);
239
- }
240
- exports.waitUntilDisplayed = waitUntilDisplayed;
241
- async function getOrientation(driver) {
242
- const { Command } = require('selenium-webdriver/lib/command');
243
- const getOrientationCommand = new Command('getOrientation');
244
- const orientation = process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3'
245
- ? await driver.schedule(getOrientationCommand)
246
- : await driver.execute(getOrientationCommand);
247
- return orientation.toLowerCase();
248
- }
249
- exports.getOrientation = getOrientation;
250
- async function getElementRegion(_driver, element) {
251
- return element.getRect();
252
- }
253
- exports.getElementRegion = getElementRegion;
254
- async function getElementAttribute(_driver, element, attr) {
255
- return element.getAttribute(attr);
256
- }
257
- exports.getElementAttribute = getElementAttribute;
258
- async function getElementText(_driver, element) {
259
- return element.getText();
260
- }
261
- exports.getElementText = getElementText;
262
- async function performAction(driver, steps) {
263
- const { Command } = require('selenium-webdriver/lib/command');
264
- const performTouchCommand = new Command('performTouch').setParameters({
265
- actions: steps.map((_a) => {
266
- var { action } = _a, options = __rest(_a, ["action"]);
267
- return ({ action, options });
268
- }),
269
- });
270
- if (process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3') {
271
- await driver.schedule(performTouchCommand);
272
- }
273
- else {
274
- await driver.execute(performTouchCommand);
275
- }
276
- }
277
- exports.performAction = performAction;
278
- const browserOptionsNames = {
279
- chrome: 'goog:chromeOptions',
280
- firefox: 'moz:firefoxOptions',
281
- };
282
- async function build(env) {
283
- var _a;
284
- const { Builder } = require('selenium-webdriver');
285
- const parseEnv = require('@applitools/test-utils/src/parse-env');
286
- const { browser, capabilities, url, attach, proxy, configurable = true, appium = false, args = [], headless, } = parseEnv(Object.assign(Object.assign({}, env), { legacy: (_a = env.legacy) !== null && _a !== void 0 ? _a : process.env.APPLITOOLS_SELENIUM_MAJOR_VERSION === '3' }));
287
- const desiredCapabilities = Object.assign({}, capabilities);
288
- if (configurable) {
289
- const browserOptionsName = browserOptionsNames[browser || desiredCapabilities.browserName];
290
- if (browserOptionsName) {
291
- const browserOptions = desiredCapabilities[browserOptionsName] || {};
292
- browserOptions.args = [...(browserOptions.args || []), ...args];
293
- if (headless)
294
- browserOptions.args.push('headless');
295
- if (attach) {
296
- browserOptions.debuggerAddress = attach === true ? 'localhost:9222' : attach;
297
- if (browser !== 'firefox')
298
- browserOptions.w3c = false;
299
- }
300
- desiredCapabilities[browserOptionsName] = browserOptions;
301
- }
302
- }
303
- if (appium && browser === 'chrome') {
304
- desiredCapabilities['appium:chromeOptions'] = { w3c: false };
305
- }
306
- const builder = new Builder().withCapabilities(desiredCapabilities);
307
- if (url && !attach)
308
- builder.usingServer(url.href);
309
- if (proxy) {
310
- builder.setProxy({
311
- proxyType: 'manual',
312
- httpProxy: proxy.http || proxy.server,
313
- sslProxy: proxy.https || proxy.server,
314
- ftpProxy: proxy.ftp,
315
- noProxy: proxy.bypass,
316
- });
317
- }
318
- const driver = await builder.build();
319
- return [driver, () => driver.quit()];
320
- }
321
- exports.build = build;
322
- exports.wrapDriver = legacy.wrapDriver;
323
- //# sourceMappingURL=spec-driver.js.map
13
+ __exportStar(require("@applitools/spec-driver-selenium"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@applitools/eyes-selenium",
3
- "version": "4.56.0",
3
+ "version": "4.56.4",
4
4
  "description": "Applitools Eyes SDK for Selenium WebDriver",
5
5
  "keywords": [
6
6
  "eyes-selenium",
@@ -42,21 +42,19 @@
42
42
  "types"
43
43
  ],
44
44
  "scripts": {
45
- "lint": "eslint '**/*.ts' '**/*.js'",
45
+ "lint": "eslint '**/*.ts'",
46
46
  "build": "yarn build:dist && yarn build:types",
47
- "doc": "typedoc ./types/index.d.ts --theme minimal --tsconfig ./tsconfig.doc.json",
48
47
  "build:dist": "tsc",
49
48
  "build:types": "api-extractor ./src/index.ts --out ./types/index.d.ts --external-modules selenium-webdriver",
50
49
  "generate:tests": "coverage-tests generate https://raw.githubusercontent.com/applitools/sdk.coverage.tests/master/js/config.js --name 'eyes-selenium'",
51
- "test": "yarn build:dist && yarn test:it && yarn test:coverage",
52
- "test:it": "mocha --no-timeouts './test/it/**/*.spec.js'",
50
+ "test": "yarn test:coverage",
53
51
  "test:coverage": "yarn generate:tests && APPLITOOLS_BATCH_NAME='JS Coverage Tests: eyes-selenium' APPLITOOLS_BATCH_ID=$(uuidgen) XUNIT_FILE=coverage-test-report.xml mocha --config .mocharc.cvg.js",
54
52
  "report": "coverage-tests report https://raw.githubusercontent.com/applitools/sdk.coverage.tests/master/js/config.js --name 'eyes-selenium'",
55
53
  "setup": "yarn docker:setup",
56
54
  "docker:setup": "node ../scripts/scripts/generate-docker-compose-config.js && docker-compose up -d",
57
55
  "docker:teardown": "docker-compose down",
58
56
  "deps": "bongo deps",
59
- "gh:test": "gh workflow run test.yml --ref $(git rev-parse --abbrev-ref HEAD) -f packages='selenium selenium@3' -f links='eyes-sdk-core eyes-api types test-utils utils driver screenshoter sdk-shared visual-grid-client' -f linking-depth=2",
57
+ "gh:test": "gh workflow run test.yml --ref $(git rev-parse --abbrev-ref HEAD) -f packages='selenium selenium@3' -f links='types test-utils sdk-shared eyes-sdk-core visual-grid-client eyes-api spec-driver-selenium utils driver snippets screenshoter' -f linking-depth=3",
60
58
  "gh:publish": "gh workflow run publish.yml --ref $(git rev-parse --abbrev-ref HEAD) -f packages='selenium'",
61
59
  "preversion": "bongo preversion && yarn build",
62
60
  "version": "bongo version",
@@ -68,23 +66,21 @@
68
66
  }
69
67
  },
70
68
  "dependencies": {
71
- "@applitools/eyes-api": "1.0.11",
72
- "@applitools/eyes-sdk-core": "12.22.4",
73
- "@applitools/utils": "1.2.2",
74
- "@applitools/visual-grid-client": "15.8.18"
69
+ "@applitools/eyes-api": "1.1.4",
70
+ "@applitools/eyes-sdk-core": "12.23.15",
71
+ "@applitools/spec-driver-selenium": "1.1.0",
72
+ "@applitools/visual-grid-client": "15.8.34"
75
73
  },
76
74
  "devDependencies": {
77
75
  "@applitools/api-extractor": "1.1.3",
78
76
  "@applitools/scripts": "1.0.1",
79
- "@applitools/sdk-coverage-tests": "2.3.14",
80
- "@applitools/sdk-release-kit": "0.13.0",
81
- "@applitools/sdk-shared": "0.9.5",
82
- "@applitools/test-utils": "1.0.7",
77
+ "@applitools/sdk-coverage-tests": "2.3.15",
78
+ "@applitools/sdk-release-kit": "0.13.3",
79
+ "@applitools/sdk-shared": "0.9.6",
80
+ "@applitools/test-utils": "1.0.9",
83
81
  "@types/selenium-webdriver": "^4.0.11",
84
82
  "@typescript-eslint/eslint-plugin": "^4.15.1",
85
83
  "@typescript-eslint/parser": "^4.15.1",
86
- "chai": "^4.2.0",
87
- "chai-as-promised": "^7.1.1",
88
84
  "chromedriver": "^87.0.4",
89
85
  "eslint": "^7.9.0",
90
86
  "eslint-config-prettier": "^7.2.0",
@@ -92,10 +88,9 @@
92
88
  "eslint-plugin-node": "^11.1.0",
93
89
  "eslint-plugin-prettier": "^3.3.1",
94
90
  "husky": "^4.3.8",
95
- "mocha": "^8.0.1",
96
- "ncp": "^2.0.0",
91
+ "mocha": "^9.1.2",
97
92
  "prettier": "^2.1.2",
98
- "selenium-webdriver": "^4.0.0-beta.4",
93
+ "selenium-webdriver": "^4.0.0-rc-2",
99
94
  "spec-xunit-file": "0.0.1-3",
100
95
  "typescript": "^4.1.3"
101
96
  },
package/types/index.d.ts CHANGED
@@ -61,6 +61,7 @@ export enum DeviceName {
61
61
  Galaxy_Note_9 = 'Galaxy Note 9',
62
62
  Galaxy_S10 = 'Galaxy S10',
63
63
  Galaxy_S10_Plus = 'Galaxy S10 Plus',
64
+ Galaxy_S20 = 'Galaxy S20',
64
65
  Galaxy_S3 = 'Galaxy S3',
65
66
  Galaxy_S5 = 'Galaxy S5',
66
67
  Galaxy_S8 = 'Galaxy S8',
@@ -92,6 +93,7 @@ export enum DeviceName {
92
93
  Pixel_3_XL = 'Pixel 3 XL',
93
94
  Pixel_4 = 'Pixel 4',
94
95
  Pixel_4_XL = 'Pixel 4 XL',
96
+ Pixel_5 = 'Pixel 5',
95
97
  iPad = 'iPad',
96
98
  iPad_6th_Gen = 'iPad 6th Gen',
97
99
  iPad_7th_Gen = 'iPad 7th Gen',
@@ -123,6 +125,10 @@ export enum IosDeviceName {
123
125
  iPhone_11 = 'iPhone 11',
124
126
  iPhone_11_Pro = 'iPhone 11 Pro',
125
127
  iPhone_11_Pro_Max = 'iPhone 11 Pro Max',
128
+ iPhone_12 = 'iPhone 12',
129
+ iPhone_12_Pro = 'iPhone 12 Pro',
130
+ iPhone_12_Pro_Max = 'iPhone 12 Pro Max',
131
+ iPhone_12_mini = 'iPhone 12 mini',
126
132
  iPhone_7 = 'iPhone 7',
127
133
  iPhone_8 = 'iPhone 8',
128
134
  iPhone_X = 'iPhone X',
@@ -192,7 +198,7 @@ export class AccessibilityMatchSettings implements Required<AccessibilityMatchSe
192
198
  setLeft(left: number): void;
193
199
  setRegion(region: RegionPlain): void;
194
200
  setTop(top: number): void;
195
- setType(type: AccessibilityRegionType): void;
201
+ setType(type: AccessibilityRegionTypePlain): void;
196
202
  setWidth(width: number): void;
197
203
  }
198
204
 
@@ -279,31 +285,40 @@ export class BatchInfo implements Required<BatchInfoPlain> {
279
285
 
280
286
  export class CheckSettings {
281
287
  constructor(settings?: CheckSettingsPlain);
282
- accessibilityRegion(region: {region: RegionPlain | Element | Selector; type?: AccessibilityRegionTypePlain}): this;
283
- accessibilityRegion(region: RegionPlain, type?: AccessibilityRegionType): this;
284
- accessibilityRegion(region: Element, type?: AccessibilityRegionType): this;
285
- accessibilityRegion(region: Selector, type?: AccessibilityRegionType): this;
288
+ accessibilityRegion(region: {
289
+ region: RegionPlain | Element | EyesSelector<Selector>;
290
+ type?: AccessibilityRegionTypePlain;
291
+ }): this;
292
+ accessibilityRegion(region: RegionPlain, type?: AccessibilityRegionTypePlain): this;
293
+ accessibilityRegion(region: Element, type?: AccessibilityRegionTypePlain): this;
294
+ accessibilityRegion(region: EyesSelector<Selector>, type?: AccessibilityRegionTypePlain): this;
295
+ accessibilityRegion(region: LegacyRegionPlain, type?: AccessibilityRegionTypePlain): this;
286
296
  accessibilityRegions(
287
297
  ...regions: (
288
- | {region: RegionPlain | Element | Selector; type?: AccessibilityRegionTypePlain}
298
+ | {region: RegionPlain | Element | EyesSelector<Selector>; type?: AccessibilityRegionTypePlain}
289
299
  | RegionPlain
290
300
  | Element
291
- | Selector
301
+ | EyesSelector<Selector>
302
+ | LegacyRegionPlain
292
303
  )[]
293
304
  ): this;
294
- accessibilityRegions(type: AccessibilityRegionType, ...regions: (RegionPlain | Element | Selector)[]): this;
305
+ accessibilityRegions(
306
+ type: AccessibilityRegionTypePlain,
307
+ ...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]
308
+ ): this;
295
309
  beforeRenderScreenshotHook(script: string): this;
296
310
  content(): this;
297
311
  contentRegion(region: RegionPlain): this;
298
312
  contentRegion(region: Element): this;
299
- contentRegion(region: Selector): this;
300
- contentRegions(...regions: (RegionPlain | Element | Selector)[]): this;
313
+ contentRegion(region: EyesSelector<Selector>): this;
314
+ contentRegion(region: LegacyRegionPlain): this;
315
+ contentRegions(...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]): this;
301
316
  disableBrowserFetching(disableBrowserFetching: boolean): this;
302
317
  enablePatterns(enablePatterns?: boolean): this;
303
318
  exact(): this;
304
319
  /** @deprecated */
305
320
  floating(region: {
306
- region: RegionPlain | Element | Selector;
321
+ region: RegionPlain | Element | EyesSelector<Selector>;
307
322
  maxUpOffset?: number;
308
323
  maxDownOffset?: number;
309
324
  maxLeftOffset?: number;
@@ -314,9 +329,11 @@ export class CheckSettings {
314
329
  /** @deprecated */
315
330
  floating(region: Element): this;
316
331
  /** @deprecated */
317
- floating(region: Selector): this;
332
+ floating(region: EyesSelector<Selector>): this;
333
+ /** @deprecated */
334
+ floating(region: LegacyRegionPlain): this;
318
335
  floatingRegion(region: {
319
- region: RegionPlain | Element | Selector;
336
+ region: RegionPlain | Element | EyesSelector<Selector>;
320
337
  maxUpOffset?: number;
321
338
  maxDownOffset?: number;
322
339
  maxLeftOffset?: number;
@@ -337,7 +354,14 @@ export class CheckSettings {
337
354
  maxRightOffset?: number,
338
355
  ): this;
339
356
  floatingRegion(
340
- region: Selector,
357
+ region: EyesSelector<Selector>,
358
+ maxUpOffset?: number,
359
+ maxDownOffset?: number,
360
+ maxLeftOffset?: number,
361
+ maxRightOffset?: number,
362
+ ): this;
363
+ floatingRegion(
364
+ region: LegacyRegionPlain,
341
365
  maxUpOffset?: number,
342
366
  maxDownOffset?: number,
343
367
  maxLeftOffset?: number,
@@ -346,7 +370,7 @@ export class CheckSettings {
346
370
  floatingRegions(
347
371
  ...regions: (
348
372
  | {
349
- region: RegionPlain | Element | Selector;
373
+ region: RegionPlain | Element | EyesSelector<Selector>;
350
374
  maxUpOffset?: number;
351
375
  maxDownOffset?: number;
352
376
  maxLeftOffset?: number;
@@ -354,15 +378,19 @@ export class CheckSettings {
354
378
  }
355
379
  | RegionPlain
356
380
  | Element
357
- | Selector
381
+ | EyesSelector<Selector>
382
+ | LegacyRegionPlain
358
383
  )[]
359
384
  ): this;
360
- floatingRegions(maxOffset: number, ...regions: (RegionPlain | Element | Selector)[]): this;
385
+ floatingRegions(
386
+ maxOffset: number,
387
+ ...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]
388
+ ): this;
361
389
  /** @deprecated */
362
390
  floatings(
363
391
  ...regions: (
364
392
  | {
365
- region: RegionPlain | Element | Selector;
393
+ region: RegionPlain | Element | EyesSelector<Selector>;
366
394
  maxUpOffset?: number;
367
395
  maxDownOffset?: number;
368
396
  maxLeftOffset?: number;
@@ -370,65 +398,80 @@ export class CheckSettings {
370
398
  }
371
399
  | RegionPlain
372
400
  | Element
373
- | Selector
401
+ | EyesSelector<Selector>
402
+ | LegacyRegionPlain
374
403
  )[]
375
404
  ): this;
376
405
  /** @deprecated */
377
- floatings(maxOffset: number, ...regions: (RegionPlain | Element | Selector)[]): this;
378
- frame(context: {frame: Element | Selector | string | number; scrollRootElement?: Element | Selector}): this;
406
+ floatings(
407
+ maxOffset: number,
408
+ ...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]
409
+ ): this;
410
+ frame(context: {
411
+ frame: Element | EyesSelector<Selector> | string | number;
412
+ scrollRootElement?: Element | EyesSelector<Selector>;
413
+ }): this;
379
414
  frame(frame: Element, scrollRootElement?: Element): this;
380
- frame(frame: Element, scrollRootElement?: Selector): this;
381
- frame(frame: Selector, scrollRootElement?: Element): this;
382
- frame(frame: Selector, scrollRootElement?: Selector): this;
415
+ frame(frame: Element, scrollRootElement?: EyesSelector<Selector>): this;
416
+ frame(frame: EyesSelector<Selector>, scrollRootElement?: Element): this;
417
+ frame(frame: EyesSelector<Selector>, scrollRootElement?: EyesSelector<Selector>): this;
383
418
  frame(frame: string, scrollRootElement?: Element): this;
384
- frame(frame: string, scrollRootElement?: Selector): this;
419
+ frame(frame: string, scrollRootElement?: EyesSelector<Selector>): this;
385
420
  frame(frame: number, scrollRootElement?: Element): this;
386
- frame(frame: number, scrollRootElement?: Selector): this;
421
+ frame(frame: number, scrollRootElement?: EyesSelector<Selector>): this;
387
422
  fully(fully?: boolean): this;
388
423
  hook(name: string, script: string): this;
389
424
  /** @deprecated */
390
- ignore(ignoreRegion: RegionPlain): this;
425
+ ignore(region: RegionPlain): this;
426
+ /** @deprecated */
427
+ ignore(region: Element): this;
391
428
  /** @deprecated */
392
- ignore(ignoreRegion: Element): this;
429
+ ignore(region: EyesSelector<Selector>): this;
393
430
  /** @deprecated */
394
- ignore(ignoreRegion: Selector): this;
431
+ ignore(region: LegacyRegionPlain): this;
395
432
  ignoreCaret(ignoreCaret?: boolean): this;
396
433
  ignoreDisplacements(ignoreDisplacements?: boolean): this;
397
- ignoreRegion(ignoreRegion: RegionPlain): this;
398
- ignoreRegion(ignoreRegion: Element): this;
399
- ignoreRegion(ignoreRegion: Selector): this;
400
- ignoreRegions(...ignoreRegions: (RegionPlain | Element | Selector)[]): this;
434
+ ignoreRegion(region: RegionPlain): this;
435
+ ignoreRegion(region: Element): this;
436
+ ignoreRegion(region: EyesSelector<Selector>): this;
437
+ ignoreRegion(region: LegacyRegionPlain): this;
438
+ ignoreRegions(...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]): this;
401
439
  /** @deprecated */
402
- ignores(...ignoreRegions: (RegionPlain | Element | Selector)[]): this;
440
+ ignores(...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]): this;
403
441
  layout(): this;
404
442
  layoutBreakpoints(layoutBreakpoints?: boolean): this;
405
443
  layoutBreakpoints(layoutBreakpoints?: number[]): this;
406
- layoutRegion(layoutRegion: RegionPlain): this;
407
- layoutRegion(layoutRegion: Element): this;
408
- layoutRegion(layoutRegion: Selector): this;
409
- layoutRegions(...layoutRegions: (RegionPlain | Element | Selector)[]): this;
410
- matchLevel(matchLevel: MatchLevel): this;
444
+ layoutRegion(region: RegionPlain): this;
445
+ layoutRegion(region: Element): this;
446
+ layoutRegion(region: EyesSelector<Selector>): this;
447
+ layoutRegion(region: LegacyRegionPlain): this;
448
+ layoutRegions(...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]): this;
449
+ matchLevel(matchLevel: MatchLevelPlain): this;
411
450
  /** @undocumented */
412
451
  name(name: string): this;
413
452
  region(region: RegionPlain): this;
414
453
  region(region: Element): this;
415
- region(region: Selector): this;
454
+ region(region: EyesSelector<Selector>): this;
455
+ region(region: LegacyRegionPlain): this;
416
456
  renderId(renderId: string): this;
417
457
  scrollRootElement(scrollRootElement: Element): this;
418
- scrollRootElement(scrollRootElement: Selector): this;
458
+ scrollRootElement(scrollRootElement: EyesSelector<Selector>): this;
419
459
  sendDom(sendDom?: boolean): this;
460
+ shadow(selector: EyesSelector<Selector>): this;
420
461
  /** @deprecated */
421
462
  stitchContent(stitchContent?: boolean): this;
422
463
  strict(): this;
423
- strictRegion(strictRegion: RegionPlain): this;
424
- strictRegion(strictRegion: Element): this;
425
- strictRegion(strictRegion: Selector): this;
426
- strictRegions(...regions: (RegionPlain | Element | Selector)[]): this;
464
+ strictRegion(region: RegionPlain): this;
465
+ strictRegion(region: Element): this;
466
+ strictRegion(region: EyesSelector<Selector>): this;
467
+ strictRegion(region: LegacyRegionPlain): this;
468
+ strictRegions(...regions: (RegionPlain | Element | EyesSelector<Selector> | LegacyRegionPlain)[]): this;
427
469
  timeout(timeout: number): this;
428
470
  useDom(useDom?: boolean): this;
429
471
  variationGroupId(variationGroupId: string): this;
430
472
  visualGridOption(key: string, value: any): this;
431
473
  visualGridOptions(options: {[key: string]: any}): this;
474
+ waitBeforeCapture(waitBeforeCapture: number): this;
432
475
  /** @deprecated */
433
476
  webHook(script: string): this;
434
477
  withName(name: string): this;
@@ -534,8 +577,8 @@ export class Configuration {
534
577
  set saveNewTests(saveNewTests: boolean);
535
578
  get scaleRatio(): number;
536
579
  set scaleRatio(scaleRatio: number);
537
- get scrollRootElement(): Element | Selector;
538
- set scrollRootElement(scrollRootElement: Element | Selector);
580
+ get scrollRootElement(): Element | EyesSelector<Selector>;
581
+ set scrollRootElement(scrollRootElement: Element | EyesSelector<Selector>);
539
582
  get sendDom(): boolean;
540
583
  set sendDom(sendDom: boolean);
541
584
  get serverUrl(): string;
@@ -552,13 +595,15 @@ export class Configuration {
552
595
  set viewportSize(viewportSize: RectangleSizePlain);
553
596
  get visualGridOptions(): {[key: string]: any};
554
597
  set visualGridOptions(visualGridOptions: {[key: string]: any});
598
+ get waitBeforeCapture(): number;
599
+ set waitBeforeCapture(waitBeforeCapture: number);
555
600
  get waitBeforeScreenshots(): number;
556
601
  set waitBeforeScreenshots(waitBeforeScreenshots: number);
557
602
  addBrowser(browserInfo: DesktopBrowserInfo): this;
558
603
  addBrowser(browserInfo: ChromeEmulationInfo): this;
559
604
  addBrowser(browserInfo: IOSDeviceInfo): this;
560
605
  addBrowser(browserInfo: {deviceName: DeviceNamePlain; screenOrientation?: ScreenOrientationPlain}): this;
561
- addBrowser(width: number, height: number, name?: BrowserType): this;
606
+ addBrowser(width: number, height: number, name?: BrowserTypePlain): this;
562
607
  addBrowsers(
563
608
  ...browsersInfo: (
564
609
  | DesktopBrowserInfo
@@ -567,7 +612,7 @@ export class Configuration {
567
612
  | {deviceName: DeviceNamePlain; screenOrientation?: ScreenOrientationPlain}
568
613
  )[]
569
614
  ): this;
570
- addDeviceEmulation(deviceName: DeviceName, screenOrientation?: ScreenOrientation): this;
615
+ addDeviceEmulation(deviceName: DeviceNamePlain, screenOrientation?: ScreenOrientationPlain): this;
571
616
  addProperty(name: string, value: string): this;
572
617
  addProperty(prop: PropertyDataPlain): this;
573
618
  clearProperties(): this;
@@ -633,7 +678,7 @@ export class Configuration {
633
678
  getSaveFailedTests(): boolean;
634
679
  getSaveNewTests(): boolean;
635
680
  getScaleRatio(): number;
636
- getScrollRootElement(): Element | Selector;
681
+ getScrollRootElement(): Element | EyesSelector<Selector>;
637
682
  getSendDom(): boolean;
638
683
  getServerUrl(): string;
639
684
  getSessionType(): SessionType;
@@ -645,6 +690,7 @@ export class Configuration {
645
690
  getUseDom(): boolean;
646
691
  getViewportSize(): RectangleSize;
647
692
  getVisualGridOptions(): {[key: string]: any};
693
+ getWaitBeforeCapture(): number;
648
694
  getWaitBeforeScreenshots(): number;
649
695
  setAccessibilityValidation(accessibilityValidation: AccessibilitySettings): this;
650
696
  setAgentId(agentId: string): this;
@@ -695,7 +741,7 @@ export class Configuration {
695
741
  setLayoutBreakpoints(layoutBreakpoints: number[]): this;
696
742
  /** @undocumented */
697
743
  setLogHandler(handler: LogHandlerPlain): this;
698
- setMatchLevel(matchLevel: MatchLevel): this;
744
+ setMatchLevel(matchLevel: MatchLevelPlain): this;
699
745
  setMatchTimeout(matchTimeout: number): this;
700
746
  setParentBranchName(parentBranchName: string): this;
701
747
  setProperties(properties: PropertyDataPlain[]): this;
@@ -715,19 +761,20 @@ export class Configuration {
715
761
  setSaveNewTests(saveNewTests: boolean): this;
716
762
  setScaleRatio(scaleRatio: number): this;
717
763
  setScrollRootElement(scrollRootElement: Element): this;
718
- setScrollRootElement(scrollRootElement: Selector): this;
764
+ setScrollRootElement(scrollRootElement: EyesSelector<Selector>): this;
719
765
  setSendDom(sendDom: boolean): this;
720
766
  setServerUrl(serverUrl: string): this;
721
- setSessionType(sessionType: SessionType): this;
767
+ setSessionType(sessionType: SessionTypePlain): this;
722
768
  /** @undocumented */
723
769
  setShowLogs(show: boolean): this;
724
- setStitchMode(stitchMode: StitchMode): this;
770
+ setStitchMode(stitchMode: StitchModePlain): this;
725
771
  setStitchOverlap(stitchOverlap: number): this;
726
772
  setTestName(testName: string): this;
727
773
  setUseDom(useDom: boolean): this;
728
774
  setViewportSize(viewportSize: RectangleSizePlain): this;
729
775
  setVisualGridOption(key: string, value: any): this;
730
776
  setVisualGridOptions(visualGridOptions: {[key: string]: any}): this;
777
+ setWaitBeforeCapture(waitBeforeCapture: number): this;
731
778
  setWaitBeforeScreenshots(waitBeforeScreenshots: number): this;
732
779
  }
733
780
 
@@ -808,11 +855,11 @@ export class Eyes {
808
855
  /** @deprecated */
809
856
  checkElement(element: Element, timeout?: number, name?: string): Promise<MatchResult>;
810
857
  /** @deprecated */
811
- checkElementBy(selector: Selector, timeout?: number, name?: string): Promise<MatchResult>;
858
+ checkElementBy(selector: EyesSelector<Selector>, timeout?: number, name?: string): Promise<MatchResult>;
812
859
  /** @deprecated */
813
860
  checkFrame(element: Element, timeout?: number, name?: string): Promise<MatchResult>;
814
861
  /** @deprecated */
815
- checkFrame(element: Selector, timeout?: number, name?: string): Promise<MatchResult>;
862
+ checkFrame(element: EyesSelector<Selector>, timeout?: number, name?: string): Promise<MatchResult>;
816
863
  /** @deprecated */
817
864
  checkFrame(element: string, timeout?: number, name?: string): Promise<MatchResult>;
818
865
  /** @deprecated */
@@ -820,21 +867,26 @@ export class Eyes {
820
867
  /** @deprecated */
821
868
  checkRegion(region?: RegionPlain, name?: string, timeout?: number): Promise<MatchResult>;
822
869
  /** @deprecated */
823
- checkRegionBy(selector: Selector, name?: string, timeout?: number, fully?: boolean): Promise<MatchResult>;
870
+ checkRegionBy(
871
+ selector: EyesSelector<Selector>,
872
+ name?: string,
873
+ timeout?: number,
874
+ fully?: boolean,
875
+ ): Promise<MatchResult>;
824
876
  /** @deprecated */
825
877
  checkRegionByElement(element: Element, name?: string, timeout?: number): Promise<MatchResult>;
826
878
  /** @deprecated */
827
879
  checkRegionInFrame(
828
880
  frame: Element,
829
- selector: Selector,
881
+ selector: EyesSelector<Selector>,
830
882
  timeout?: number,
831
883
  name?: string,
832
884
  fully?: boolean,
833
885
  ): Promise<MatchResult>;
834
886
  /** @deprecated */
835
887
  checkRegionInFrame(
836
- frame: Selector,
837
- selector: Selector,
888
+ frame: EyesSelector<Selector>,
889
+ selector: EyesSelector<Selector>,
838
890
  timeout?: number,
839
891
  name?: string,
840
892
  fully?: boolean,
@@ -842,7 +894,7 @@ export class Eyes {
842
894
  /** @deprecated */
843
895
  checkRegionInFrame(
844
896
  frame: string,
845
- selector: Selector,
897
+ selector: EyesSelector<Selector>,
846
898
  timeout?: number,
847
899
  name?: string,
848
900
  fully?: boolean,
@@ -850,7 +902,7 @@ export class Eyes {
850
902
  /** @deprecated */
851
903
  checkRegionInFrame(
852
904
  frame: number,
853
- selector: Selector,
905
+ selector: EyesSelector<Selector>,
854
906
  timeout?: number,
855
907
  name?: string,
856
908
  fully?: boolean,
@@ -904,7 +956,7 @@ export class Eyes {
904
956
  getSaveDiffs(): boolean;
905
957
  getSaveNewTests(): boolean;
906
958
  getScaleRatio(): number;
907
- getScrollRootElement(): Element | Selector;
959
+ getScrollRootElement(): Element | EyesSelector<Selector>;
908
960
  getSendDom(): boolean;
909
961
  getServerUrl(): string;
910
962
  /**
@@ -952,7 +1004,7 @@ export class Eyes {
952
1004
  appName?: string,
953
1005
  testName?: string,
954
1006
  viewportSize?: RectangleSizePlain,
955
- sessionType?: SessionType,
1007
+ sessionType?: SessionTypePlain,
956
1008
  ): Promise<Driver>;
957
1009
  /**
958
1010
  * @undocumented
@@ -985,7 +1037,7 @@ export class Eyes {
985
1037
  setImageCut(cutProvider: CutProvider): void;
986
1038
  setIsDisabled(isDisabled: boolean): void;
987
1039
  setLogHandler(handler: LogHandler): void;
988
- setMatchLevel(matchLevel: MatchLevel): void;
1040
+ setMatchLevel(matchLevel: MatchLevelPlain): void;
989
1041
  setMatchTimeout(matchTimeout: number): void;
990
1042
  setParentBranchName(parentBranchName: string): void;
991
1043
  setProxy(proxy: ProxySettingsPlain): void;
@@ -998,10 +1050,10 @@ export class Eyes {
998
1050
  setSaveNewTests(saveNewTests: boolean): void;
999
1051
  setScaleRatio(scaleRatio: number): void;
1000
1052
  setScrollRootElement(scrollRootElement: Element): void;
1001
- setScrollRootElement(scrollRootElement: Selector): void;
1053
+ setScrollRootElement(scrollRootElement: EyesSelector<Selector>): void;
1002
1054
  setSendDom(sendDom: boolean): void;
1003
1055
  setServerUrl(serverUrl: string): void;
1004
- setStitchMode(stitchMode: StitchMode): void;
1056
+ setStitchMode(stitchMode: StitchModePlain): void;
1005
1057
  setStitchOverlap(stitchOverlap: number): void;
1006
1058
  setTestName(testName: string): void;
1007
1059
  setViewportSize(size: RectangleSizePlain): Promise<void>;
@@ -1133,7 +1185,7 @@ export class ImageMatchSettings implements Required<ImageMatchSettingsPlain> {
1133
1185
  setIgnoreDisplacements(ignoreDisplacements: boolean): void;
1134
1186
  setIgnoreRegions(ignoreRegions: RegionPlain[]): void;
1135
1187
  setLayoutRegions(layoutRegions: RegionPlain[]): void;
1136
- setMatchLevel(matchLevel: MatchLevel): void;
1188
+ setMatchLevel(matchLevel: MatchLevelPlain): void;
1137
1189
  setStrictRegions(strictRegions: RegionPlain[]): void;
1138
1190
  setUseDom(useDom: boolean): void;
1139
1191
  }
@@ -1412,6 +1464,7 @@ export class TestResults implements Required<TestResultsPlain> {
1412
1464
  get hostApp(): string;
1413
1465
  get hostDisplaySize(): RectangleSizePlain;
1414
1466
  get hostOS(): string;
1467
+ get id(): string;
1415
1468
  get isAborted(): boolean;
1416
1469
  get isDifferent(): boolean;
1417
1470
  get isNew(): boolean;
@@ -1427,7 +1480,6 @@ export class TestResults implements Required<TestResultsPlain> {
1427
1480
  get steps(): number;
1428
1481
  get stepsInfo(): StepInfoPlain[];
1429
1482
  get strictMatches(): number;
1430
- get testId(): string;
1431
1483
  get url(): string;
1432
1484
  delete(): Promise<void>;
1433
1485
  /** @deprecated */
@@ -1624,15 +1676,15 @@ export type BrowserTypePlain =
1624
1676
 
1625
1677
  export type CheckSettingsPlain = {
1626
1678
  name?: string;
1627
- region?: RegionPlain | Element | Selector;
1679
+ region?: RegionPlain | Element | EyesSelector<Selector>;
1628
1680
  frames?: (
1629
- | {frame: Element | Selector | string | number; scrollRootElement?: Element | Selector}
1681
+ | {frame: Element | EyesSelector<Selector> | string | number; scrollRootElement?: Element | EyesSelector<Selector>}
1630
1682
  | Element
1631
- | Selector
1683
+ | EyesSelector<Selector>
1632
1684
  | string
1633
1685
  | number
1634
1686
  )[];
1635
- scrollRootElement?: Element | Selector;
1687
+ scrollRootElement?: Element | EyesSelector<Selector>;
1636
1688
  fully?: boolean;
1637
1689
  matchLevel?: MatchLevelPlain;
1638
1690
  useDom?: boolean;
@@ -1640,13 +1692,13 @@ export type CheckSettingsPlain = {
1640
1692
  enablePatterns?: boolean;
1641
1693
  ignoreDisplacements?: boolean;
1642
1694
  ignoreCaret?: boolean;
1643
- ignoreRegions?: (RegionPlain | Element | Selector)[];
1644
- layoutRegions?: (RegionPlain | Element | Selector)[];
1645
- strictRegions?: (RegionPlain | Element | Selector)[];
1646
- contentRegions?: (RegionPlain | Element | Selector)[];
1695
+ ignoreRegions?: (RegionPlain | Element | EyesSelector<Selector>)[];
1696
+ layoutRegions?: (RegionPlain | Element | EyesSelector<Selector>)[];
1697
+ strictRegions?: (RegionPlain | Element | EyesSelector<Selector>)[];
1698
+ contentRegions?: (RegionPlain | Element | EyesSelector<Selector>)[];
1647
1699
  floatingRegions?: (
1648
1700
  | {
1649
- region: RegionPlain | Element | Selector;
1701
+ region: RegionPlain | Element | EyesSelector<Selector>;
1650
1702
  maxUpOffset?: number;
1651
1703
  maxDownOffset?: number;
1652
1704
  maxLeftOffset?: number;
@@ -1654,13 +1706,13 @@ export type CheckSettingsPlain = {
1654
1706
  }
1655
1707
  | RegionPlain
1656
1708
  | Element
1657
- | Selector
1709
+ | EyesSelector<Selector>
1658
1710
  )[];
1659
1711
  accessibilityRegions?: (
1660
- | {region: RegionPlain | Element | Selector; type?: AccessibilityRegionTypePlain}
1712
+ | {region: RegionPlain | Element | EyesSelector<Selector>; type?: AccessibilityRegionTypePlain}
1661
1713
  | RegionPlain
1662
1714
  | Element
1663
- | Selector
1715
+ | EyesSelector<Selector>
1664
1716
  )[];
1665
1717
  disableBrowserFetching?: boolean;
1666
1718
  layoutBreakpoints?: boolean | number[];
@@ -1669,6 +1721,7 @@ export type CheckSettingsPlain = {
1669
1721
  renderId?: string;
1670
1722
  variationGroupId?: string;
1671
1723
  timeout?: number;
1724
+ waitBeforeCapture?: number;
1672
1725
  };
1673
1726
 
1674
1727
  export type ChromeEmulationInfo = {
@@ -1717,16 +1770,18 @@ export type ConfigurationPlain = {
1717
1770
  hideScrollbars?: boolean;
1718
1771
  hideCaret?: boolean;
1719
1772
  stitchOverlap?: number;
1720
- scrollRootElement?: Element | Selector;
1773
+ scrollRootElement?: Element | EyesSelector<Selector>;
1721
1774
  cut?: CutProviderPlain;
1722
1775
  rotation?: ImageRotationPlain;
1723
1776
  scaleRatio?: number;
1777
+ waitBeforeCapture?: number;
1724
1778
  } & {
1725
1779
  /** @undocumented */ concurrentSessions?: number;
1726
1780
  browsersInfo?: (DesktopBrowserInfo | ChromeEmulationInfo | IOSDeviceInfo)[];
1727
1781
  visualGridOptions?: Record<string, any>;
1728
1782
  layoutBreakpoints?: boolean | number[];
1729
1783
  disableBrowserFetching?: boolean;
1784
+ waitBeforeCapture?: number;
1730
1785
  };
1731
1786
 
1732
1787
  export type ConsoleLogHandlerPlain = {type: 'console'};
@@ -1761,6 +1816,7 @@ export type DeviceNamePlain =
1761
1816
  | 'Galaxy Note 9'
1762
1817
  | 'Galaxy S10'
1763
1818
  | 'Galaxy S10 Plus'
1819
+ | 'Galaxy S20'
1764
1820
  | 'Galaxy S3'
1765
1821
  | 'Galaxy S5'
1766
1822
  | 'Galaxy S8'
@@ -1792,6 +1848,7 @@ export type DeviceNamePlain =
1792
1848
  | 'Pixel 3 XL'
1793
1849
  | 'Pixel 4'
1794
1850
  | 'Pixel 4 XL'
1851
+ | 'Pixel 5'
1795
1852
  | 'iPad'
1796
1853
  | 'iPad 6th Gen'
1797
1854
  | 'iPad 7th Gen'
@@ -1822,6 +1879,11 @@ export type ExactMatchSettingsPlain = {
1822
1879
  minDiffWidth: number;
1823
1880
  };
1824
1881
 
1882
+ export type EyesSelector<TSelector = never> =
1883
+ | TSelector
1884
+ | string
1885
+ | {frame?: EyesSelector<TSelector>; selector: TSelector | string; shadow?: EyesSelector<TSelector>; type?: string};
1886
+
1825
1887
  export type FailureReportPlain = 'IMMEDIATE' | 'ON_CLOSE';
1826
1888
 
1827
1889
  export type FileLogHandlerPlain = {type: 'file'; filename?: string; append?: boolean};
@@ -1869,6 +1931,10 @@ export type IosDeviceNamePlain =
1869
1931
  | 'iPhone 11'
1870
1932
  | 'iPhone 11 Pro'
1871
1933
  | 'iPhone 11 Pro Max'
1934
+ | 'iPhone 12'
1935
+ | 'iPhone 12 Pro'
1936
+ | 'iPhone 12 Pro Max'
1937
+ | 'iPhone 12 mini'
1872
1938
  | 'iPhone 7'
1873
1939
  | 'iPhone 8'
1874
1940
  | 'iPhone X'
@@ -1877,6 +1943,9 @@ export type IosDeviceNamePlain =
1877
1943
 
1878
1944
  export type IosVersionPlain = 'latest' | 'latest-1';
1879
1945
 
1946
+ /** @deprecated */
1947
+ export type LegacyRegionPlain = {height: number; left: number; top: number; width: number};
1948
+
1880
1949
  export type LocationPlain = {x: number; y: number};
1881
1950
 
1882
1951
  export type LogHandlerPlain = CustomLogHandlerPlain | FileLogHandlerPlain | ConsoleLogHandlerPlain;
@@ -1885,7 +1954,12 @@ export type MatchLevelPlain = 'Content' | 'Exact' | 'Layout' | 'Layout2' | 'Layo
1885
1954
 
1886
1955
  export type MatchResultPlain = {readonly asExpected?: boolean; readonly windowId?: number};
1887
1956
 
1888
- export type OCRRegion = {target: RegionPlain | Element | Selector; hint?: string; minMatch?: number; language?: string};
1957
+ export type OCRRegion = {
1958
+ target: RegionPlain | Element | EyesSelector<Selector>;
1959
+ hint?: string;
1960
+ minMatch?: number;
1961
+ language?: string;
1962
+ };
1889
1963
 
1890
1964
  export type OCRSettings<TPattern extends string = string> = {
1891
1965
  firstOnly?: boolean;
@@ -1906,11 +1980,7 @@ export type RunnerOptionsPlain = {testConcurrency?: number};
1906
1980
 
1907
1981
  export type ScreenOrientationPlain = 'landscape' | 'portrait';
1908
1982
 
1909
- export type Selector =
1910
- | import('selenium-webdriver').Locator
1911
- | {using: string; value: string}
1912
- | string
1913
- | {selector: string; type: string};
1983
+ export type Selector = import('selenium-webdriver').Locator | {using: string; value: string};
1914
1984
 
1915
1985
  export type SessionTypePlain = 'PROGRESSION' | 'SEQUENTIAL';
1916
1986
 
@@ -1950,6 +2020,7 @@ export type TestResultsPlain = {
1950
2020
  readonly hostApp?: string;
1951
2021
  readonly hostDisplaySize?: RectangleSizePlain;
1952
2022
  readonly hostOS?: string;
2023
+ readonly id?: string;
1953
2024
  readonly isAborted?: boolean;
1954
2025
  readonly isDifferent?: boolean;
1955
2026
  readonly isNew?: boolean;
@@ -1965,7 +2036,6 @@ export type TestResultsPlain = {
1965
2036
  readonly steps?: number;
1966
2037
  readonly stepsInfo?: StepInfoPlain[];
1967
2038
  readonly strictMatches?: number;
1968
- readonly testId?: string;
1969
2039
  readonly url?: string;
1970
2040
  };
1971
2041
 
@@ -1987,16 +2057,21 @@ export const Target: {
1987
2057
  window(): CheckSettings;
1988
2058
  region(region: RegionPlain): CheckSettings;
1989
2059
  region(region: Element): CheckSettings;
1990
- region(region: Selector): CheckSettings;
1991
- frame(context: {frame: Element | Selector | string | number; scrollRootElement?: Element | Selector}): CheckSettings;
2060
+ region(region: EyesSelector<Selector>): CheckSettings;
2061
+ region(region: LegacyRegionPlain): CheckSettings;
2062
+ frame(context: {
2063
+ frame: Element | EyesSelector<Selector> | string | number;
2064
+ scrollRootElement?: Element | EyesSelector<Selector>;
2065
+ }): CheckSettings;
1992
2066
  frame(frame: Element, scrollRootElement?: Element): CheckSettings;
1993
- frame(frame: Element, scrollRootElement?: Selector): CheckSettings;
1994
- frame(frame: Selector, scrollRootElement?: Element): CheckSettings;
1995
- frame(frame: Selector, scrollRootElement?: Selector): CheckSettings;
2067
+ frame(frame: Element, scrollRootElement?: EyesSelector<Selector>): CheckSettings;
2068
+ frame(frame: EyesSelector<Selector>, scrollRootElement?: Element): CheckSettings;
2069
+ frame(frame: EyesSelector<Selector>, scrollRootElement?: EyesSelector<Selector>): CheckSettings;
1996
2070
  frame(frame: string, scrollRootElement?: Element): CheckSettings;
1997
- frame(frame: string, scrollRootElement?: Selector): CheckSettings;
2071
+ frame(frame: string, scrollRootElement?: EyesSelector<Selector>): CheckSettings;
1998
2072
  frame(frame: number, scrollRootElement?: Element): CheckSettings;
1999
- frame(frame: number, scrollRootElement?: Selector): CheckSettings;
2073
+ frame(frame: number, scrollRootElement?: EyesSelector<Selector>): CheckSettings;
2074
+ shadow(selector: EyesSelector<Selector>): CheckSettings;
2000
2075
  };
2001
2076
 
2002
2077
  /** @deprecated */
package/dist/api.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6DAAiD;AACjD,4CAA2C;AAC3C,sCAAqC;AAGrC,MAAM,GAAG,GAAG,uBAAO,CAAC;IAClB,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE;IAClG,IAAI;IACJ,gBAAgB,EAAE,OAAO,CAAC,gCAAgC,CAAC;CAC5D,CAAC,CAAA;AAEF,uDAAoC;AAIpC,MAAa,IAAK,SAAQ,GAAG,CAAC,IAA+B;;AAA7D,oBAGC;AAF2B,UAAK,GAAG,GAAG,CAAA;AAMvC,MAAa,aAAc,SAAQ,GAAG,CAAC,aAAgC;;AAAvE,sCAEC;AAD2B,mBAAK,GAAG,GAAG,CAAA;AAOvC,MAAa,aAAc,SAAQ,GAAG,CAAC,aAAgC;;AAAvE,sCAEC;AAD2B,mBAAK,GAAG,GAAG,CAAA;AAG1B,QAAA,MAAM,GAAkC,aAAoB,CAAA;AAEzE,MAAa,UAAW,SAAQ,GAAG,CAAC,UAAU;;AAA9C,gCAEC;AAD2B,gBAAK,GAAG,GAAG,CAAA"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE;IAClD,MAAM,EAAC,OAAO,EAAC,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAA;IAC5D,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,GAAG,KAAK,CAAA;CACtD;AAED,wCAAqB"}
package/dist/legacy.js DELETED
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.wrapDriver = void 0;
4
- function wrapDriver(driver) {
5
- const api = {
6
- get remoteWebDriver() {
7
- return driver;
8
- },
9
- getRemoteWebDriver() {
10
- return driver;
11
- },
12
- async findElementById(id) {
13
- return driver.findElement({ id });
14
- },
15
- async findElementsById(id) {
16
- return driver.findElements({ id });
17
- },
18
- async findElementByName(name) {
19
- return driver.findElement({ name });
20
- },
21
- async findElementsByName(name) {
22
- return driver.findElements({ name });
23
- },
24
- async findElementByCssSelector(css) {
25
- return driver.findElement({ css });
26
- },
27
- async findElementsByCssSelector(css) {
28
- return driver.findElements({ css });
29
- },
30
- async findElementByClassName(className) {
31
- throw driver.findElement({ className });
32
- },
33
- async findElementsByClassName(className) {
34
- throw driver.findElements({ className });
35
- },
36
- async findElementByLinkText(linkText) {
37
- throw driver.findElement({ linkText });
38
- },
39
- async findElementsByLinkText(linkText) {
40
- throw driver.findElements({ linkText });
41
- },
42
- async findElementByPartialLinkText(partialLinkText) {
43
- throw driver.findElement({ partialLinkText });
44
- },
45
- async findElementsByPartialLinkText(partialLinkText) {
46
- throw driver.findElements({ partialLinkText });
47
- },
48
- async findElementByTagName(tagName) {
49
- return driver.findElement({ tagName });
50
- },
51
- async findElementsByTagName(tagName) {
52
- return driver.findElements({ tagName });
53
- },
54
- async findElementByXPath(xpath) {
55
- return driver.findElement({ xpath });
56
- },
57
- async findElementsByXPath(xpath) {
58
- return driver.findElements({ xpath });
59
- },
60
- async getBrowserName() {
61
- const capabilities = await driver.getCapabilities();
62
- return capabilities.getBrowserName();
63
- },
64
- async getBrowserVersion() {
65
- const capabilities = await driver.getCapabilities();
66
- return capabilities.getBrowserVersion();
67
- },
68
- };
69
- return new Proxy(driver, {
70
- get(target, key, receiver) {
71
- if (Object.hasOwnProperty.call(api, key)) {
72
- return Reflect.get(api, key, receiver);
73
- }
74
- return Reflect.get(target, key);
75
- },
76
- });
77
- }
78
- exports.wrapDriver = wrapDriver;
79
- //# sourceMappingURL=legacy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../src/legacy.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-driver.js","sourceRoot":"","sources":["../src/spec-driver.ts"],"names":[],"mappings":"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"}