@appium/images-plugin 1.2.0 → 1.2.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/README.md CHANGED
@@ -9,8 +9,6 @@ This is an official Appium plugin designed to facilitate image comparison, visua
9
9
 
10
10
  ## Prerequisites
11
11
 
12
- * [OpenCV](https://opencv.org) 3.x native libraries
13
- * [opencv4nodejs](https://github.com/justadudewhohacks/opencv4nodejs) NPM module: install with `npm i -g opencv4nodejs`. By default the preinstall script of this module also downloads and makes all the required OpenCV libs from source, but this requires developer tools to be available on the host system.
14
12
  * Appium Server 2.0+
15
13
 
16
14
  ## Installation - Server
@@ -30,7 +28,7 @@ No special action is needed to make the features available in the various Appium
30
28
  The plugin will not be active unless turned on when invoking the Appium server:
31
29
 
32
30
  ```
33
- appium --plugins=images
31
+ appium --use-plugins=images
34
32
  ```
35
33
 
36
34
  ## Usage
@@ -1,21 +1,12 @@
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
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
14
5
  Object.defineProperty(exports, "__esModule", { value: true });
15
6
  exports.GET_SIMILARITY_MODE = exports.MATCH_FEATURES_MODE = exports.MATCH_TEMPLATE_MODE = exports.DEFAULT_MATCH_THRESHOLD = exports.compareImages = void 0;
16
7
  const lodash_1 = __importDefault(require("lodash"));
17
- const appium_base_driver_1 = require("appium-base-driver");
18
- const appium_support_1 = require("appium-support");
8
+ const base_driver_1 = require("@appium/base-driver");
9
+ const opencv_1 = require("@appium/opencv");
19
10
  const MATCH_FEATURES_MODE = 'matchFeatures';
20
11
  exports.MATCH_FEATURES_MODE = MATCH_FEATURES_MODE;
21
12
  const GET_SIMILARITY_MODE = 'getSimilarity';
@@ -36,40 +27,44 @@ exports.DEFAULT_MATCH_THRESHOLD = DEFAULT_MATCH_THRESHOLD;
36
27
  * @param {string} secondImage - Base64-encoded image file.
37
28
  * All image formats, that OpenCV library itself accepts, are supported.
38
29
  * @param {?Object} options [{}] - The content of this dictionary depends
39
- * on the actual `mode` value. See the documentation on `appium-support`
30
+ * on the actual `mode` value. See the documentation on `@appium/support`
40
31
  * module for more details.
41
32
  * @returns {Object} The content of the resulting dictionary depends
42
33
  * on the actual `mode` and `options` values. See the documentation on
43
- * `appium-support` module for more details.
34
+ * `@appium/support` module for more details.
44
35
  * @throws {Error} If required OpenCV modules are not installed or
45
36
  * if `mode` value is incorrect or if there was an unexpected issue while
46
37
  * matching the images.
47
38
  */
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 = null;
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
- if (options.multiple) {
64
- return result.multiple.map(convertVisualizationToBase64);
65
- }
66
- break;
67
- default:
68
- throw new appium_base_driver_1.errors.InvalidArgumentError(`'${mode}' images comparison mode is unknown. ` +
69
- `Only ${JSON.stringify([MATCH_FEATURES_MODE, GET_SIMILARITY_MODE, MATCH_TEMPLATE_MODE])} modes are supported.`);
70
- }
71
- return convertVisualizationToBase64(result);
72
- });
39
+ async function compareImages(mode, firstImage, secondImage, options = {}) {
40
+ const img1 = Buffer.from(firstImage, 'base64');
41
+ const img2 = Buffer.from(secondImage, 'base64');
42
+ let result = null;
43
+ switch (lodash_1.default.toLower(mode)) {
44
+ case MATCH_FEATURES_MODE.toLowerCase():
45
+ try {
46
+ result = await (0, opencv_1.getImagesMatches)(img1, img2, options);
47
+ }
48
+ catch (err) {
49
+ // might throw if no matches
50
+ result = { count: 0 };
51
+ }
52
+ break;
53
+ case GET_SIMILARITY_MODE.toLowerCase():
54
+ result = await (0, opencv_1.getImagesSimilarity)(img1, img2, options);
55
+ break;
56
+ case MATCH_TEMPLATE_MODE.toLowerCase():
57
+ // firstImage/img1 is the full image and secondImage/img2 is the partial one
58
+ result = await (0, opencv_1.getImageOccurrence)(img1, img2, options);
59
+ if (options.multiple) {
60
+ return result.multiple.map(convertVisualizationToBase64);
61
+ }
62
+ break;
63
+ default:
64
+ throw new base_driver_1.errors.InvalidArgumentError(`'${mode}' images comparison mode is unknown. ` +
65
+ `Only ${JSON.stringify([MATCH_FEATURES_MODE, GET_SIMILARITY_MODE, MATCH_TEMPLATE_MODE])} modes are supported.`);
66
+ }
67
+ return convertVisualizationToBase64(result);
73
68
  }
74
69
  exports.compareImages = compareImages;
75
70
  /**
@@ -85,4 +80,4 @@ function convertVisualizationToBase64(element) {
85
80
  }
86
81
  return element;
87
82
  }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb21wYXJlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUF1QjtBQUN2QiwyREFBNEM7QUFDNUMsbURBQTJDO0FBRTNDLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBbUUwQixrREFBbUI7QUFsRXpGLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBbUUxQyxrREFBbUI7QUFsRXJCLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBaUVLLGtEQUFtQjtBQS9EcEUsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUErRFosMERBQXVCO0FBN0QvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxTQUFlLGFBQWEsQ0FBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEdBQUcsRUFBRTs7UUFDdkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLFFBQVEsZ0JBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BDLE1BQU0sR0FBRyxNQUFNLDBCQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNSLEtBQUssbUJBQW1CLENBQUMsV0FBVyxFQUFFO2dCQUNwQyxNQUFNLEdBQUcsTUFBTSwwQkFBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2xFLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDLFdBQVcsRUFBRTtnQkFDcEMsNEVBQTRFO2dCQUM1RSxNQUFNLEdBQUcsTUFBTSwwQkFBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2pFLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtvQkFDcEIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2lCQUMxRDtnQkFDRCxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLDJCQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxJQUFJLHVDQUF1QztvQkFDbkYsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3JIO1FBQ0QsT0FBTyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQUE7QUFpQlEsc0NBQWE7QUFmdEI7Ozs7OztHQU1HO0FBQ0gsU0FBUyw0QkFBNEIsQ0FBRSxPQUFPO0lBQzVDLElBQUksQ0FBQyxnQkFBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDckMsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNsRTtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMifQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9jb21wYXJlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUF1QjtBQUN2QixxREFBNkM7QUFDN0MsMkNBQTJGO0FBRTNGLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBd0UwQixrREFBbUI7QUF2RXpGLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBd0UxQyxrREFBbUI7QUF2RXJCLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDO0FBc0VLLGtEQUFtQjtBQXBFcEUsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFvRVosMERBQXVCO0FBbEUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxLQUFLLFVBQVUsYUFBYSxDQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE9BQU8sR0FBRyxFQUFFO0lBQ3ZFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztJQUNsQixRQUFRLGdCQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZCLEtBQUssbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQ3BDLElBQUk7Z0JBQ0YsTUFBTSxHQUFHLE1BQU0sSUFBQSx5QkFBZ0IsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3REO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1osNEJBQTRCO2dCQUM1QixNQUFNLEdBQUcsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUM7YUFDckI7WUFDRCxNQUFNO1FBQ1IsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7WUFDcEMsTUFBTSxHQUFHLE1BQU0sSUFBQSw0QkFBbUIsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELE1BQU07UUFDUixLQUFLLG1CQUFtQixDQUFDLFdBQVcsRUFBRTtZQUNwQyw0RUFBNEU7WUFDNUUsTUFBTSxHQUFHLE1BQU0sSUFBQSwyQkFBa0IsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDcEIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsTUFBTTtRQUNSO1lBQ0UsTUFBTSxJQUFJLG9CQUFNLENBQUMsb0JBQW9CLENBQUMsSUFBSSxJQUFJLHVDQUF1QztnQkFDbkYsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQ3JIO0lBQ0QsT0FBTyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBaUJRLHNDQUFhO0FBZnRCOzs7Ozs7R0FNRztBQUNILFNBQVMsNEJBQTRCLENBQUUsT0FBTztJQUM1QyxJQUFJLENBQUMsZ0JBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ3JDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbEU7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIn0=