@appium/images-plugin 1.1.4 → 1.1.9

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/LICENSE CHANGED
@@ -178,7 +178,7 @@
178
178
  APPENDIX: How to apply the Apache License to your work.
179
179
 
180
180
  To apply the Apache License to your work, attach the following
181
- boilerplate notice, with the fields enclosed by brackets "[]"
181
+ boilerplate notice, with the fields enclosed by brackets "{}"
182
182
  replaced with your own identifying information. (Don't include
183
183
  the brackets!) The text should be enclosed in the appropriate
184
184
  comment syntax for the file format. We also recommend that a
@@ -186,7 +186,7 @@
186
186
  same "printed page" as the copyright notice for easier
187
187
  identification within third-party archives.
188
188
 
189
- Copyright [yyyy] [name of copyright owner]
189
+ Copyright JS Foundation and other contributors, https://js.foundation
190
190
 
191
191
  Licensed under the Apache License, Version 2.0 (the "License");
192
192
  you may not use this file except in compliance with the License.
package/README.md CHANGED
@@ -30,7 +30,7 @@ No special action is needed to make the features available in the various Appium
30
30
  The plugin will not be active unless turned on when invoking the Appium server:
31
31
 
32
32
  ```
33
- appium --plugins=images
33
+ appium --use-plugins=images
34
34
  ```
35
35
 
36
36
  ## Usage
@@ -0,0 +1,28 @@
1
+ export type OccurrenceResult = import('@appium/opencv').OccurrenceResult;
2
+ /**
3
+ * Performs images comparison using OpenCV framework features.
4
+ * It is expected that both OpenCV framework and opencv4nodejs
5
+ * module are installed on the machine where Appium server is running.
6
+ *
7
+ * @param {string} mode - One of possible comparison modes:
8
+ * matchFeatures, getSimilarity, matchTemplate
9
+ * @param {string} firstImage - Base64-encoded image file.
10
+ * All image formats, that OpenCV library itself accepts, are supported.
11
+ * @param {string} secondImage - Base64-encoded image file.
12
+ * All image formats, that OpenCV library itself accepts, are supported.
13
+ * @param {?Object} options [{}] - The content of this dictionary depends
14
+ * on the actual `mode` value. See the documentation on `@appium/support`
15
+ * module for more details.
16
+ * @returns {Object} The content of the resulting dictionary depends
17
+ * on the actual `mode` and `options` values. See the documentation on
18
+ * `@appium/support` module for more details.
19
+ * @throws {Error} If required OpenCV modules are not installed or
20
+ * if `mode` value is incorrect or if there was an unexpected issue while
21
+ * matching the images.
22
+ */
23
+ export function compareImages(mode: string, firstImage: string, secondImage: string, options?: any | null): any;
24
+ export const DEFAULT_MATCH_THRESHOLD: 0.4;
25
+ export const MATCH_TEMPLATE_MODE: "matchTemplate";
26
+ export const MATCH_FEATURES_MODE: "matchFeatures";
27
+ export const GET_SIMILARITY_MODE: "getSimilarity";
28
+ //# sourceMappingURL=compare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare.d.ts","sourceRoot":"","sources":["../../lib/compare.js"],"names":[],"mappings":"+BAgFa,OAAO,gBAAgB,EAAE,gBAAgB;AAtEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,oCAhBW,MAAM,cAEN,MAAM,eAEN,MAAM,6BAwChB;AAnDD,0CAAoC;AAFpC,kDAA4C;AAF5C,kDAA4C;AAC5C,kDAA4C"}
@@ -1,21 +1,21 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.GET_SIMILARITY_MODE = exports.MATCH_FEATURES_MODE = exports.MATCH_TEMPLATE_MODE = exports.DEFAULT_MATCH_THRESHOLD = exports.compareImages = void 0;
16
- const lodash_1 = __importDefault(require("lodash"));
17
- const appium_base_driver_1 = require("appium-base-driver");
18
- const appium_support_1 = require("appium-support");
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.MATCH_TEMPLATE_MODE = exports.MATCH_FEATURES_MODE = exports.GET_SIMILARITY_MODE = exports.DEFAULT_MATCH_THRESHOLD = void 0;
9
+ exports.compareImages = compareImages;
10
+
11
+ require("source-map-support/register");
12
+
13
+ var _lodash = _interopRequireDefault(require("lodash"));
14
+
15
+ var _baseDriver = require("@appium/base-driver");
16
+
17
+ var _opencv = require("@appium/opencv");
18
+
19
19
  const MATCH_FEATURES_MODE = 'matchFeatures';
20
20
  exports.MATCH_FEATURES_MODE = MATCH_FEATURES_MODE;
21
21
  const GET_SIMILARITY_MODE = 'getSimilarity';
@@ -24,52 +24,49 @@ const MATCH_TEMPLATE_MODE = 'matchTemplate';
24
24
  exports.MATCH_TEMPLATE_MODE = MATCH_TEMPLATE_MODE;
25
25
  const DEFAULT_MATCH_THRESHOLD = 0.4;
26
26
  exports.DEFAULT_MATCH_THRESHOLD = DEFAULT_MATCH_THRESHOLD;
27
- /**
28
- * Performs images comparison using OpenCV framework features.
29
- * It is expected that both OpenCV framework and opencv4nodejs
30
- * module are installed on the machine where Appium server is running.
31
- *
32
- * @param {string} mode - One of possible comparison modes:
33
- * matchFeatures, getSimilarity, matchTemplate
34
- * @param {string} firstImage - Base64-encoded image file.
35
- * All image formats, that OpenCV library itself accepts, are supported.
36
- * @param {string} secondImage - Base64-encoded image file.
37
- * All image formats, that OpenCV library itself accepts, are supported.
38
- * @param {?Object} options [{}] - The content of this dictionary depends
39
- * on the actual `mode` value. See the documentation on `appium-support`
40
- * module for more details.
41
- * @returns {Object} The content of the resulting dictionary depends
42
- * on the actual `mode` and `options` values. See the documentation on
43
- * `appium-support` module for more details.
44
- * @throws {Error} If required OpenCV modules are not installed or
45
- * if `mode` value is incorrect or if there was an unexpected issue while
46
- * matching the images.
47
- */
48
- function compareImages(mode, firstImage, secondImage, options = {}) {
49
- return __awaiter(this, void 0, void 0, function* () {
50
- const img1 = Buffer.from(firstImage, 'base64');
51
- const img2 = Buffer.from(secondImage, 'base64');
52
- let result = {};
53
- switch (lodash_1.default.toLower(mode)) {
54
- case MATCH_FEATURES_MODE.toLowerCase():
55
- result = yield appium_support_1.imageUtil.getImagesMatches(img1, img2, options);
56
- break;
57
- case GET_SIMILARITY_MODE.toLowerCase():
58
- result = yield appium_support_1.imageUtil.getImagesSimilarity(img1, img2, options);
59
- break;
60
- case MATCH_TEMPLATE_MODE.toLowerCase():
61
- // firstImage/img1 is the full image and secondImage/img2 is the partial one
62
- result = yield appium_support_1.imageUtil.getImageOccurrence(img1, img2, options);
63
- break;
64
- default:
65
- throw new appium_base_driver_1.errors.InvalidArgumentError(`'${mode}' images comparison mode is unknown. ` +
66
- `Only ${JSON.stringify([MATCH_FEATURES_MODE, GET_SIMILARITY_MODE, MATCH_TEMPLATE_MODE])} modes are supported.`);
67
- }
68
- if (!lodash_1.default.isEmpty(result.visualization)) {
69
- result.visualization = result.visualization.toString('base64');
70
- }
71
- return result;
72
- });
27
+
28
+ async function compareImages(mode, firstImage, secondImage, options = {}) {
29
+ const img1 = Buffer.from(firstImage, 'base64');
30
+ const img2 = Buffer.from(secondImage, 'base64');
31
+ let result = null;
32
+
33
+ switch (_lodash.default.toLower(mode)) {
34
+ case MATCH_FEATURES_MODE.toLowerCase():
35
+ try {
36
+ result = await (0, _opencv.getImagesMatches)(img1, img2, options);
37
+ } catch (err) {
38
+ result = {
39
+ count: 0
40
+ };
41
+ }
42
+
43
+ break;
44
+
45
+ case GET_SIMILARITY_MODE.toLowerCase():
46
+ result = await (0, _opencv.getImagesSimilarity)(img1, img2, options);
47
+ break;
48
+
49
+ case MATCH_TEMPLATE_MODE.toLowerCase():
50
+ result = await (0, _opencv.getImageOccurrence)(img1, img2, options);
51
+
52
+ if (options.multiple) {
53
+ return result.multiple.map(convertVisualizationToBase64);
54
+ }
55
+
56
+ break;
57
+
58
+ default:
59
+ throw new _baseDriver.errors.InvalidArgumentError(`'${mode}' images comparison mode is unknown. ` + `Only ${JSON.stringify([MATCH_FEATURES_MODE, GET_SIMILARITY_MODE, MATCH_TEMPLATE_MODE])} modes are supported.`);
60
+ }
61
+
62
+ return convertVisualizationToBase64(result);
73
63
  }
74
- exports.compareImages = compareImages;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb21wYXJlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUF1QjtBQUN2QiwyREFBNEM7QUFDNUMsbURBQTJDO0FBRTNDLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBb0QwQixrREFBbUI7QUFuRHpGLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBb0QxQyxrREFBbUI7QUFuRHJCLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBa0RLLGtEQUFtQjtBQWhEcEUsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFnRFosMERBQXVCO0FBOUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxTQUFlLGFBQWEsQ0FBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEdBQUcsRUFBRTs7UUFDdkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFFBQVEsZ0JBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BDLE1BQU0sR0FBRyxNQUFNLDBCQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsV0FBVyxFQUFFO2dCQUNwQyxNQUFNLEdBQUcsTUFBTSwwQkFBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFdBQVcsRUFBRTtnQkFDcEMsNEVBQTRFO2dCQUM1RSxNQUFNLEdBQUcsTUFBTSwwQkFBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2pFLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksMkJBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLElBQUksdUNBQXVDO29CQUNuRixRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDckg7UUFDRCxJQUFJLENBQUMsZ0JBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3BDLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDaEU7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQUE7QUFFUSxzQ0FBYSJ9
64
+
65
+ function convertVisualizationToBase64(element) {
66
+ if (!_lodash.default.isEmpty(element.visualization)) {
67
+ element.visualization = element.visualization.toString('base64');
68
+ }
69
+
70
+ return element;
71
+ }
72
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb21wYXJlLmpzIl0sIm5hbWVzIjpbIk1BVENIX0ZFQVRVUkVTX01PREUiLCJHRVRfU0lNSUxBUklUWV9NT0RFIiwiTUFUQ0hfVEVNUExBVEVfTU9ERSIsIkRFRkFVTFRfTUFUQ0hfVEhSRVNIT0xEIiwiY29tcGFyZUltYWdlcyIsIm1vZGUiLCJmaXJzdEltYWdlIiwic2Vjb25kSW1hZ2UiLCJvcHRpb25zIiwiaW1nMSIsIkJ1ZmZlciIsImZyb20iLCJpbWcyIiwicmVzdWx0IiwiXyIsInRvTG93ZXIiLCJ0b0xvd2VyQ2FzZSIsImVyciIsImNvdW50IiwibXVsdGlwbGUiLCJtYXAiLCJjb252ZXJ0VmlzdWFsaXphdGlvblRvQmFzZTY0IiwiZXJyb3JzIiwiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZWxlbWVudCIsImlzRW1wdHkiLCJ2aXN1YWxpemF0aW9uIiwidG9TdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLG1CQUFtQixHQUFHLGVBQTVCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLGVBQTVCOztBQUNBLE1BQU1DLG1CQUFtQixHQUFHLGVBQTVCOztBQUVBLE1BQU1DLHVCQUF1QixHQUFHLEdBQWhDOzs7QUF1QkEsZUFBZUMsYUFBZixDQUE4QkMsSUFBOUIsRUFBb0NDLFVBQXBDLEVBQWdEQyxXQUFoRCxFQUE2REMsT0FBTyxHQUFHLEVBQXZFLEVBQTJFO0FBQ3pFLFFBQU1DLElBQUksR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlMLFVBQVosRUFBd0IsUUFBeEIsQ0FBYjtBQUNBLFFBQU1NLElBQUksR0FBR0YsTUFBTSxDQUFDQyxJQUFQLENBQVlKLFdBQVosRUFBeUIsUUFBekIsQ0FBYjtBQUNBLE1BQUlNLE1BQU0sR0FBRyxJQUFiOztBQUNBLFVBQVFDLGdCQUFFQyxPQUFGLENBQVVWLElBQVYsQ0FBUjtBQUNFLFNBQUtMLG1CQUFtQixDQUFDZ0IsV0FBcEIsRUFBTDtBQUNFLFVBQUk7QUFDRkgsUUFBQUEsTUFBTSxHQUFHLE1BQU0sOEJBQWlCSixJQUFqQixFQUF1QkcsSUFBdkIsRUFBNkJKLE9BQTdCLENBQWY7QUFDRCxPQUZELENBRUUsT0FBT1MsR0FBUCxFQUFZO0FBRVpKLFFBQUFBLE1BQU0sR0FBRztBQUFDSyxVQUFBQSxLQUFLLEVBQUU7QUFBUixTQUFUO0FBQ0Q7O0FBQ0Q7O0FBQ0YsU0FBS2pCLG1CQUFtQixDQUFDZSxXQUFwQixFQUFMO0FBQ0VILE1BQUFBLE1BQU0sR0FBRyxNQUFNLGlDQUFvQkosSUFBcEIsRUFBMEJHLElBQTFCLEVBQWdDSixPQUFoQyxDQUFmO0FBQ0E7O0FBQ0YsU0FBS04sbUJBQW1CLENBQUNjLFdBQXBCLEVBQUw7QUFFRUgsTUFBQUEsTUFBTSxHQUFHLE1BQU0sZ0NBQW1CSixJQUFuQixFQUF5QkcsSUFBekIsRUFBK0JKLE9BQS9CLENBQWY7O0FBQ0EsVUFBSUEsT0FBTyxDQUFDVyxRQUFaLEVBQXNCO0FBQ3BCLGVBQU9OLE1BQU0sQ0FBQ00sUUFBUCxDQUFnQkMsR0FBaEIsQ0FBb0JDLDRCQUFwQixDQUFQO0FBQ0Q7O0FBQ0Q7O0FBQ0Y7QUFDRSxZQUFNLElBQUlDLG1CQUFPQyxvQkFBWCxDQUFpQyxJQUFHbEIsSUFBSyx1Q0FBVCxHQUNuQyxRQUFPbUIsSUFBSSxDQUFDQyxTQUFMLENBQWUsQ0FBQ3pCLG1CQUFELEVBQXNCQyxtQkFBdEIsRUFBMkNDLG1CQUEzQyxDQUFmLENBQWdGLHVCQURwRixDQUFOO0FBcEJKOztBQXVCQSxTQUFPbUIsNEJBQTRCLENBQUNSLE1BQUQsQ0FBbkM7QUFDRDs7QUFTRCxTQUFTUSw0QkFBVCxDQUF1Q0ssT0FBdkMsRUFBZ0Q7QUFDOUMsTUFBSSxDQUFDWixnQkFBRWEsT0FBRixDQUFVRCxPQUFPLENBQUNFLGFBQWxCLENBQUwsRUFBdUM7QUFDckNGLElBQUFBLE9BQU8sQ0FBQ0UsYUFBUixHQUF3QkYsT0FBTyxDQUFDRSxhQUFSLENBQXNCQyxRQUF0QixDQUErQixRQUEvQixDQUF4QjtBQUNEOztBQUVELFNBQU9ILE9BQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBlcnJvcnMgfSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCB7IGdldEltYWdlc01hdGNoZXMsIGdldEltYWdlc1NpbWlsYXJpdHksIGdldEltYWdlT2NjdXJyZW5jZSB9IGZyb20gJ0BhcHBpdW0vb3BlbmN2JztcblxuY29uc3QgTUFUQ0hfRkVBVFVSRVNfTU9ERSA9ICdtYXRjaEZlYXR1cmVzJztcbmNvbnN0IEdFVF9TSU1JTEFSSVRZX01PREUgPSAnZ2V0U2ltaWxhcml0eSc7XG5jb25zdCBNQVRDSF9URU1QTEFURV9NT0RFID0gJ21hdGNoVGVtcGxhdGUnO1xuXG5jb25zdCBERUZBVUxUX01BVENIX1RIUkVTSE9MRCA9IDAuNDtcblxuLyoqXG4gKiBQZXJmb3JtcyBpbWFnZXMgY29tcGFyaXNvbiB1c2luZyBPcGVuQ1YgZnJhbWV3b3JrIGZlYXR1cmVzLlxuICogSXQgaXMgZXhwZWN0ZWQgdGhhdCBib3RoIE9wZW5DViBmcmFtZXdvcmsgYW5kIG9wZW5jdjRub2RlanNcbiAqIG1vZHVsZSBhcmUgaW5zdGFsbGVkIG9uIHRoZSBtYWNoaW5lIHdoZXJlIEFwcGl1bSBzZXJ2ZXIgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kZSAtIE9uZSBvZiBwb3NzaWJsZSBjb21wYXJpc29uIG1vZGVzOlxuICogbWF0Y2hGZWF0dXJlcywgZ2V0U2ltaWxhcml0eSwgbWF0Y2hUZW1wbGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGZpcnN0SW1hZ2UgLSBCYXNlNjQtZW5jb2RlZCBpbWFnZSBmaWxlLlxuICogQWxsIGltYWdlIGZvcm1hdHMsIHRoYXQgT3BlbkNWIGxpYnJhcnkgaXRzZWxmIGFjY2VwdHMsIGFyZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2Vjb25kSW1hZ2UgLSBCYXNlNjQtZW5jb2RlZCBpbWFnZSBmaWxlLlxuICogQWxsIGltYWdlIGZvcm1hdHMsIHRoYXQgT3BlbkNWIGxpYnJhcnkgaXRzZWxmIGFjY2VwdHMsIGFyZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnMgW3t9XSAtIFRoZSBjb250ZW50IG9mIHRoaXMgZGljdGlvbmFyeSBkZXBlbmRzXG4gKiBvbiB0aGUgYWN0dWFsIGBtb2RlYCB2YWx1ZS4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uIGBAYXBwaXVtL3N1cHBvcnRgXG4gKiBtb2R1bGUgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBjb250ZW50IG9mIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSBkZXBlbmRzXG4gKiBvbiB0aGUgYWN0dWFsIGBtb2RlYCBhbmQgYG9wdGlvbnNgIHZhbHVlcy4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9uXG4gKiBgQGFwcGl1bS9zdXBwb3J0YCBtb2R1bGUgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiByZXF1aXJlZCBPcGVuQ1YgbW9kdWxlcyBhcmUgbm90IGluc3RhbGxlZCBvclxuICogaWYgYG1vZGVgIHZhbHVlIGlzIGluY29ycmVjdCBvciBpZiB0aGVyZSB3YXMgYW4gdW5leHBlY3RlZCBpc3N1ZSB3aGlsZVxuICogbWF0Y2hpbmcgdGhlIGltYWdlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcGFyZUltYWdlcyAobW9kZSwgZmlyc3RJbWFnZSwgc2Vjb25kSW1hZ2UsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBpbWcxID0gQnVmZmVyLmZyb20oZmlyc3RJbWFnZSwgJ2Jhc2U2NCcpO1xuICBjb25zdCBpbWcyID0gQnVmZmVyLmZyb20oc2Vjb25kSW1hZ2UsICdiYXNlNjQnKTtcbiAgbGV0IHJlc3VsdCA9IG51bGw7XG4gIHN3aXRjaCAoXy50b0xvd2VyKG1vZGUpKSB7XG4gICAgY2FzZSBNQVRDSF9GRUFUVVJFU19NT0RFLnRvTG93ZXJDYXNlKCk6XG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBnZXRJbWFnZXNNYXRjaGVzKGltZzEsIGltZzIsIG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIG1pZ2h0IHRocm93IGlmIG5vIG1hdGNoZXNcbiAgICAgICAgcmVzdWx0ID0ge2NvdW50OiAwfTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgR0VUX1NJTUlMQVJJVFlfTU9ERS50b0xvd2VyQ2FzZSgpOlxuICAgICAgcmVzdWx0ID0gYXdhaXQgZ2V0SW1hZ2VzU2ltaWxhcml0eShpbWcxLCBpbWcyLCBvcHRpb25zKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTUFUQ0hfVEVNUExBVEVfTU9ERS50b0xvd2VyQ2FzZSgpOlxuICAgICAgLy8gZmlyc3RJbWFnZS9pbWcxIGlzIHRoZSBmdWxsIGltYWdlIGFuZCBzZWNvbmRJbWFnZS9pbWcyIGlzIHRoZSBwYXJ0aWFsIG9uZVxuICAgICAgcmVzdWx0ID0gYXdhaXQgZ2V0SW1hZ2VPY2N1cnJlbmNlKGltZzEsIGltZzIsIG9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5tdWx0aXBsZS5tYXAoY29udmVydFZpc3VhbGl6YXRpb25Ub0Jhc2U2NCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IGVycm9ycy5JbnZhbGlkQXJndW1lbnRFcnJvcihgJyR7bW9kZX0nIGltYWdlcyBjb21wYXJpc29uIG1vZGUgaXMgdW5rbm93bi4gYCArXG4gICAgICAgIGBPbmx5ICR7SlNPTi5zdHJpbmdpZnkoW01BVENIX0ZFQVRVUkVTX01PREUsIEdFVF9TSU1JTEFSSVRZX01PREUsIE1BVENIX1RFTVBMQVRFX01PREVdKX0gbW9kZXMgYXJlIHN1cHBvcnRlZC5gKTtcbiAgfVxuICByZXR1cm4gY29udmVydFZpc3VhbGl6YXRpb25Ub0Jhc2U2NChyZXN1bHQpO1xufVxuXG4vKipcbiAqIGJhc2U2NCBlbmNvZGVzIHRoZSB2aXN1YWxpemF0aW9uIHBhcnQgb2YgdGhlIHJlc3VsdFxuICogKGlmIG5lY2Vzc2FyeSlcbiAqXG4gKiBAcGFyYW0ge09jY3VycmVuY2VSZXN1bHR9IGVsZW1lbnQgLSBvY2N1cnJlbmNlIHJlc3VsdFxuICpcbioqL1xuZnVuY3Rpb24gY29udmVydFZpc3VhbGl6YXRpb25Ub0Jhc2U2NCAoZWxlbWVudCkge1xuICBpZiAoIV8uaXNFbXB0eShlbGVtZW50LnZpc3VhbGl6YXRpb24pKSB7XG4gICAgZWxlbWVudC52aXN1YWxpemF0aW9uID0gZWxlbWVudC52aXN1YWxpemF0aW9uLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5leHBvcnQgeyBjb21wYXJlSW1hZ2VzLCBERUZBVUxUX01BVENIX1RIUkVTSE9MRCwgTUFUQ0hfVEVNUExBVEVfTU9ERSwgTUFUQ0hfRkVBVFVSRVNfTU9ERSxcbiAgR0VUX1NJTUlMQVJJVFlfTU9ERSB9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vb3BlbmN2JykuT2NjdXJyZW5jZVJlc3VsdH0gT2NjdXJyZW5jZVJlc3VsdFxuICovXG4iXX0=
@@ -0,0 +1,156 @@
1
+ export default class ImageElementFinder {
2
+ constructor(driver: any, max?: number);
3
+ driver: any;
4
+ imgElCache: any;
5
+ setDriver(driver: any): void;
6
+ registerImageElement(imgEl: any): any;
7
+ /**
8
+ * @typedef FindByImageOptions
9
+ * @property {boolean} [shouldCheckStaleness=false] - whether this call to find an
10
+ * image is merely to check staleness. If so we can bypass a lot of logic
11
+ * @property {boolean} [multiple=false] - Whether we are finding one element or
12
+ * multiple
13
+ * @property {boolean} [ignoreDefaultImageTemplateScale=false] - Whether we
14
+ * ignore defaultImageTemplateScale. It can be used when you would like to
15
+ * scale b64Template with defaultImageTemplateScale setting.
16
+ */
17
+ /**
18
+ * Find a screen rect represented by an ImageElement corresponding to an image
19
+ * template sent in by the client
20
+ *
21
+ * @param {string} b64Template - base64-encoded image used as a template to be
22
+ * matched in the screenshot
23
+ * @param {FindByImageOptions} - additional options
24
+ *
25
+ * @returns {WebElement} - WebDriver element with a special id prefix
26
+ */
27
+ findByImage(b64Template: string, { shouldCheckStaleness, multiple, ignoreDefaultImageTemplateScale, }: {
28
+ /**
29
+ * - whether this call to find an
30
+ * image is merely to check staleness. If so we can bypass a lot of logic
31
+ */
32
+ shouldCheckStaleness?: boolean | undefined;
33
+ /**
34
+ * - Whether we are finding one element or
35
+ * multiple
36
+ */
37
+ multiple?: boolean | undefined;
38
+ /**
39
+ * - Whether we
40
+ * ignore defaultImageTemplateScale. It can be used when you would like to
41
+ * scale b64Template with defaultImageTemplateScale setting.
42
+ */
43
+ ignoreDefaultImageTemplateScale?: boolean | undefined;
44
+ }): WebElement;
45
+ /**
46
+ * Ensure that the image template sent in for a find is of a suitable size
47
+ *
48
+ * @param {string} b64Template - base64-encoded image
49
+ * @param {int} screenWidth - width of screen
50
+ * @param {int} screenHeight - height of screen
51
+ *
52
+ * @returns {string} base64-encoded image, potentially resized
53
+ */
54
+ ensureTemplateSize(b64Template: string, screenWidth: int, screenHeight: int): string;
55
+ /**
56
+ * @typedef Screenshot
57
+ * @property {string} b64Screenshot - base64 based screenshot string
58
+ */
59
+ /**
60
+ * @typedef ScreenshotScale
61
+ * @property {float} xScale - Scale ratio for width
62
+ * @property {float} yScale - Scale ratio for height
63
+ */
64
+ /**
65
+ * Get the screenshot image that will be used for find by element, potentially
66
+ * altering it in various ways based on user-requested settings
67
+ *
68
+ * @param {int} screenWidth - width of screen
69
+ * @param {int} screenHeight - height of screen
70
+ *
71
+ * @returns { {b64Screenshot: Screenshot, scale: ScreenshotScale? } } base64-encoded screenshot and ScreenshotScale
72
+ */
73
+ getScreenshotForImageFind(screenWidth: int, screenHeight: int): {
74
+ b64Screenshot: {
75
+ /**
76
+ * - base64 based screenshot string
77
+ */
78
+ b64Screenshot: string;
79
+ };
80
+ scale: {
81
+ /**
82
+ * - Scale ratio for width
83
+ */
84
+ xScale: float;
85
+ /**
86
+ * - Scale ratio for height
87
+ */
88
+ yScale: float;
89
+ } | null;
90
+ };
91
+ /**
92
+ * @typedef ImageTemplateSettings
93
+ * @property {boolean} fixImageTemplateScale - fixImageTemplateScale in device-settings
94
+ * @property {float} defaultImageTemplateScale - defaultImageTemplateScale in device-settings
95
+ * @property {boolean} ignoreDefaultImageTemplateScale - Ignore defaultImageTemplateScale if it has true.
96
+ * If b64Template has been scaled to defaultImageTemplateScale or should ignore the scale,
97
+ * this parameter should be true. e.g. click in image-element module
98
+ * @property {float} xScale - Scale ratio for width
99
+ * @property {float} yScale - Scale ratio for height
100
+
101
+ */
102
+ /**
103
+ * Get a image that will be used for template maching.
104
+ * Returns scaled image if scale ratio is provided.
105
+ *
106
+ *
107
+ * @param {string} b64Template - base64-encoded image used as a template to be
108
+ * matched in the screenshot
109
+ * @param {ImageTemplateSettings} opts - Image template scale related options
110
+ *
111
+ * @returns {string} base64-encoded scaled template screenshot
112
+ */
113
+ fixImageTemplateScale(b64Template: string, opts?: {
114
+ /**
115
+ * - fixImageTemplateScale in device-settings
116
+ */
117
+ fixImageTemplateScale: boolean;
118
+ /**
119
+ * - defaultImageTemplateScale in device-settings
120
+ */
121
+ defaultImageTemplateScale: float;
122
+ /**
123
+ * - Ignore defaultImageTemplateScale if it has true.
124
+ * If b64Template has been scaled to defaultImageTemplateScale or should ignore the scale,
125
+ * this parameter should be true. e.g. click in image-element module
126
+ */
127
+ ignoreDefaultImageTemplateScale: boolean;
128
+ /**
129
+ * - Scale ratio for width
130
+ */
131
+ xScale: float;
132
+ /**
133
+ * - Scale ratio for height
134
+ */
135
+ yScale: float;
136
+ }): string;
137
+ }
138
+ export const W3C_ELEMENT_KEY: "element-6066-11e4-a52e-4f735466cecf";
139
+ export const MJSONWP_ELEMENT_KEY: "ELEMENT";
140
+ export namespace DEFAULT_SETTINGS {
141
+ export { DEFAULT_MATCH_THRESHOLD as imageMatchThreshold };
142
+ export const imageMatchMethod: string;
143
+ export const fixImageFindScreenshotDims: boolean;
144
+ export const fixImageTemplateSize: boolean;
145
+ export const fixImageTemplateScale: boolean;
146
+ export { DEFAULT_TEMPLATE_IMAGE_SCALE as defaultImageTemplateScale };
147
+ export const checkForImageElementStaleness: boolean;
148
+ export const autoUpdateImageElementPosition: boolean;
149
+ export { IMAGE_EL_TAP_STRATEGY_W3C as imageElementTapStrategy };
150
+ export const getMatchedImageResult: boolean;
151
+ }
152
+ export const DEFAULT_FIX_IMAGE_TEMPLATE_SCALE: 1;
153
+ import { DEFAULT_MATCH_THRESHOLD } from "./compare";
154
+ import { DEFAULT_TEMPLATE_IMAGE_SCALE } from "./image-element";
155
+ import { IMAGE_EL_TAP_STRATEGY_W3C } from "./image-element";
156
+ //# sourceMappingURL=finder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finder.d.ts","sourceRoot":"","sources":["../../lib/finder.js"],"names":[],"mappings":"AAsEA;IACE,uCAMC;IALC,YAAoB;IACpB,gBAGE;IAGJ,6BAEC;IAED,sCAIC;IAED;;;;;;;;;OASG;IAEH;;;;;;;;;OASG;IACH,yBANW,MAAM;;;;;;;;;;;;;;;;;mBAsHhB;IAED;;;;;;;;OAQG;IACH,gCANW,MAAM,wCAIJ,MAAM,CAiBlB;IAED;;;OAGG;IACH;;;;OAIG;IACH;;;;;;;;OAQG;IACH;;;;;2BAhBc,MAAM;;;;;;;;;;;;MAuHnB;IAED;;;;;;;;;;OAUG;IACH;;;;;;;;;;OAUG;IACH,mCANW,MAAM;;;;+BAdH,OAAO;;;;;;;;;;yCAEP,OAAO;;;;;;;;;QAgBR,MAAM,CAqDlB;CACF;AArbD,oEAAwD;AADxD,4CAAsC;;;;;;;;;;;;;AAEtC,iDAA2C"}