@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 +1 -3
- package/build/lib/compare.js +34 -39
- package/build/lib/finder.js +218 -233
- package/build/lib/image-element.js +103 -116
- package/build/lib/logger.js +3 -3
- package/build/lib/plugin.js +30 -91
- package/build/test/e2e/plugin-e2e-specs.js +29 -44
- package/build/test/unit/finder-specs.js +231 -306
- package/build/test/unit/image-element-specs.js +123 -168
- package/build/test/unit/plugin-specs.js +93 -143
- package/build/tsconfig.tsbuildinfo +1 -0
- package/lib/compare.js +12 -7
- package/lib/finder.js +2 -2
- package/lib/image-element.js +2 -2
- package/lib/logger.js +1 -1
- package/lib/plugin.js +3 -36
- package/package.json +10 -9
- package/build/test/unit/basic-specs.js +0 -16
|
@@ -18,22 +18,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
18
18
|
__setModuleDefault(result, mod);
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
22
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
23
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
25
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
26
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
27
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
21
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
31
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
23
|
};
|
|
33
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
25
|
const lodash_1 = __importDefault(require("lodash"));
|
|
35
|
-
const
|
|
36
|
-
const
|
|
26
|
+
const support_1 = require("@appium/support");
|
|
27
|
+
const base_driver_1 = __importDefault(require("@appium/base-driver"));
|
|
37
28
|
const index_1 = __importStar(require("../../index"));
|
|
38
29
|
const finder_1 = __importDefault(require("../../lib/finder"));
|
|
39
30
|
const image_element_1 = __importDefault(require("../../lib/image-element"));
|
|
@@ -45,13 +36,9 @@ const compareModule = require('../../lib/compare');
|
|
|
45
36
|
chai_1.default.use(chai_as_promised_1.default);
|
|
46
37
|
const should = chai_1.default.should();
|
|
47
38
|
const plugin = new index_1.default();
|
|
48
|
-
class PluginDriver extends
|
|
49
|
-
getWindowSize() {
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
getScreenshot() {
|
|
53
|
-
return __awaiter(this, void 0, void 0, function* () { });
|
|
54
|
-
}
|
|
39
|
+
class PluginDriver extends base_driver_1.default {
|
|
40
|
+
async getWindowSize() { }
|
|
41
|
+
async getScreenshot() { }
|
|
55
42
|
findElement(strategy, selector) {
|
|
56
43
|
return plugin.findElement(lodash_1.default.noop, this, strategy, selector);
|
|
57
44
|
}
|
|
@@ -61,23 +48,19 @@ class PluginDriver extends appium_base_driver_1.default {
|
|
|
61
48
|
}
|
|
62
49
|
describe('finding elements by image', function () {
|
|
63
50
|
describe('findElement', function () {
|
|
64
|
-
it('should use a different special method to find element by image', function () {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
.should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
|
|
78
|
-
yield d.findElementsFromElement(index_1.IMAGE_STRATEGY, 'foo', 'elId')
|
|
79
|
-
.should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
|
|
80
|
-
});
|
|
51
|
+
it('should use a different special method to find element by image', async function () {
|
|
52
|
+
const d = new PluginDriver();
|
|
53
|
+
sinon_1.default.stub(plugin.finder, 'findByImage').returns(true);
|
|
54
|
+
sinon_1.default.stub(d, 'findElOrElsWithProcessing').returns(false);
|
|
55
|
+
await d.findElement(index_1.IMAGE_STRATEGY, 'foo').should.eventually.be.true;
|
|
56
|
+
await d.findElements(index_1.IMAGE_STRATEGY, 'foo').should.eventually.be.true;
|
|
57
|
+
});
|
|
58
|
+
it('should not be able to find image element from any other element', async function () {
|
|
59
|
+
const d = new PluginDriver();
|
|
60
|
+
await d.findElementFromElement(index_1.IMAGE_STRATEGY, 'foo', 'elId')
|
|
61
|
+
.should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
|
|
62
|
+
await d.findElementsFromElement(index_1.IMAGE_STRATEGY, 'foo', 'elId')
|
|
63
|
+
.should.eventually.be.rejectedWith(/Locator Strategy.+is not supported/);
|
|
81
64
|
});
|
|
82
65
|
});
|
|
83
66
|
describe('findByImage', function () {
|
|
@@ -112,199 +95,153 @@ describe('finding elements by image', function () {
|
|
|
112
95
|
afterEach(function () {
|
|
113
96
|
compareStub.restore();
|
|
114
97
|
});
|
|
115
|
-
it('should find an image element happypath', function () {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
})
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
})
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
it('should respect implicit wait', function () {
|
|
181
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
182
|
-
d.setImplicitWait(10);
|
|
183
|
-
compareStub.resetHistory();
|
|
184
|
-
compareStub.onCall(0).throws(new Error('Cannot find any occurrences'));
|
|
185
|
-
compareStub.returns({ rect, score });
|
|
186
|
-
const imgElProto = yield f.findByImage(template, { multiple: false });
|
|
187
|
-
basicImgElVerify(imgElProto, f);
|
|
188
|
-
compareStub.callCount.should.eql(2);
|
|
189
|
-
});
|
|
190
|
-
});
|
|
191
|
-
it('should not add element to cache and return it directly when checking staleness', function () {
|
|
192
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
-
const imgEl = yield f.findByImage(template, { multiple: false, shouldCheckStaleness: true });
|
|
194
|
-
(imgEl instanceof image_element_1.default).should.be.true;
|
|
195
|
-
f.imgElCache.has(imgEl.id).should.be.false;
|
|
196
|
-
imgEl.rect.should.eql(rect);
|
|
197
|
-
});
|
|
98
|
+
it('should find an image element happypath', async function () {
|
|
99
|
+
const imgElProto = await f.findByImage(template, { multiple: false });
|
|
100
|
+
basicImgElVerify(imgElProto, f);
|
|
101
|
+
});
|
|
102
|
+
it('should find image elements happypath', async function () {
|
|
103
|
+
compareStub.restore();
|
|
104
|
+
compareStub = sinon_1.default.stub(compareModule, 'compareImages').returns([{ rect, score }]);
|
|
105
|
+
const els = await f.findByImage(template, { multiple: true });
|
|
106
|
+
els.should.have.length(1);
|
|
107
|
+
basicImgElVerify(els[0], f);
|
|
108
|
+
});
|
|
109
|
+
it('should fail if driver does not support getWindowSize', async function () {
|
|
110
|
+
d.getWindowSize = null;
|
|
111
|
+
await f.findByImage(template, { multiple: false })
|
|
112
|
+
.should.eventually.be.rejectedWith(/driver does not support/);
|
|
113
|
+
});
|
|
114
|
+
it('should fix template size if requested', async function () {
|
|
115
|
+
const newTemplate = 'iVBORbaz';
|
|
116
|
+
await d.settings.update({ fixImageTemplateSize: true });
|
|
117
|
+
sinon_1.default.stub(f, 'ensureTemplateSize').returns(newTemplate);
|
|
118
|
+
const imgElProto = await f.findByImage(template, { multiple: false });
|
|
119
|
+
const imgEl = basicImgElVerify(imgElProto, f);
|
|
120
|
+
imgEl.template.should.eql(newTemplate);
|
|
121
|
+
lodash_1.default.last(compareStub.args)[2].should.eql(newTemplate);
|
|
122
|
+
});
|
|
123
|
+
it('should fix template size scale if requested', async function () {
|
|
124
|
+
const newTemplate = 'iVBORbaz';
|
|
125
|
+
await d.settings.update({ fixImageTemplateScale: true });
|
|
126
|
+
sinon_1.default.stub(f, 'fixImageTemplateScale').returns(newTemplate);
|
|
127
|
+
const imgElProto = await f.findByImage(template, { multiple: false });
|
|
128
|
+
const imgEl = basicImgElVerify(imgElProto, f);
|
|
129
|
+
imgEl.template.should.eql(newTemplate);
|
|
130
|
+
lodash_1.default.last(compareStub.args)[2].should.eql(newTemplate);
|
|
131
|
+
});
|
|
132
|
+
it('should not fix template size scale if it is not requested', async function () {
|
|
133
|
+
const newTemplate = 'iVBORbaz';
|
|
134
|
+
await d.settings.update({});
|
|
135
|
+
sinon_1.default.stub(f, 'fixImageTemplateScale').returns(newTemplate);
|
|
136
|
+
f.fixImageTemplateScale.callCount.should.eql(0);
|
|
137
|
+
});
|
|
138
|
+
it('should throw an error if template match fails', async function () {
|
|
139
|
+
compareStub.throws(new Error('Cannot find any occurrences'));
|
|
140
|
+
await f.findByImage(template, { multiple: false })
|
|
141
|
+
.should.eventually.be.rejectedWith(/element could not be located/);
|
|
142
|
+
});
|
|
143
|
+
it('should return empty array for multiple elements if template match fails', async function () {
|
|
144
|
+
compareStub.throws(new Error('Cannot find any occurrences'));
|
|
145
|
+
await f.findByImage(template, { multiple: true }).should.eventually.eql([]);
|
|
146
|
+
});
|
|
147
|
+
it('should respect implicit wait', async function () {
|
|
148
|
+
d.setImplicitWait(10);
|
|
149
|
+
compareStub.resetHistory();
|
|
150
|
+
compareStub.onCall(0).throws(new Error('Cannot find any occurrences'));
|
|
151
|
+
compareStub.returns({ rect, score });
|
|
152
|
+
const imgElProto = await f.findByImage(template, { multiple: false });
|
|
153
|
+
basicImgElVerify(imgElProto, f);
|
|
154
|
+
compareStub.callCount.should.eql(2);
|
|
155
|
+
});
|
|
156
|
+
it('should not add element to cache and return it directly when checking staleness', async function () {
|
|
157
|
+
const imgEl = await f.findByImage(template, { multiple: false, shouldCheckStaleness: true });
|
|
158
|
+
(imgEl instanceof image_element_1.default).should.be.true;
|
|
159
|
+
f.imgElCache.has(imgEl.id).should.be.false;
|
|
160
|
+
imgEl.rect.should.eql(rect);
|
|
198
161
|
});
|
|
199
162
|
});
|
|
200
163
|
describe('fixImageTemplateScale', function () {
|
|
201
164
|
const d = new PluginDriver();
|
|
202
165
|
const f = new finder_1.default(d);
|
|
203
166
|
const basicTemplate = 'iVBORbaz';
|
|
204
|
-
it('should not fix template size scale if no scale value', function () {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
});
|
|
216
|
-
it('should
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
it('should fix template size scale', function () {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
it('should
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
it('should not fix template size scale because of ignoreDefaultImageTemplateScale', function () {
|
|
266
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
267
|
-
yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
268
|
-
defaultImageTemplateScale: 4.0,
|
|
269
|
-
ignoreDefaultImageTemplateScale: true,
|
|
270
|
-
}).should.eventually.eql(fixtures_1.TINY_PNG);
|
|
271
|
-
});
|
|
272
|
-
});
|
|
273
|
-
it('should ignore defaultImageTemplateScale to fix template size scale because of ignoreDefaultImageTemplateScale', function () {
|
|
274
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
275
|
-
const actual = 'iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAWElEQVR4AU3BQRWAQAhAwa/PGBsEgrC16AFBKEIPXW7OXO+Rmey9iQjMjHFzrLUwM7qbqmLcHKpKRFBVuDvj4agq3B1VRUQYT2bS3QwRQVUZF/CaGRHB3wc1vSZbHO5+BgAAAABJRU5ErkJggg==';
|
|
276
|
-
yield f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
277
|
-
defaultImageTemplateScale: 4.0,
|
|
278
|
-
ignoreDefaultImageTemplateScale: true,
|
|
279
|
-
fixImageTemplateScale: true,
|
|
280
|
-
xScale: 1.5, yScale: 1.5
|
|
281
|
-
}).should.eventually.eql(actual);
|
|
282
|
-
});
|
|
167
|
+
it('should not fix template size scale if no scale value', async function () {
|
|
168
|
+
await f.fixImageTemplateScale(basicTemplate, { fixImageTemplateScale: true })
|
|
169
|
+
.should.eventually.eql(basicTemplate);
|
|
170
|
+
});
|
|
171
|
+
it('should not fix template size scale if it is null', async function () {
|
|
172
|
+
await f.fixImageTemplateScale(basicTemplate, null)
|
|
173
|
+
.should.eventually.eql(basicTemplate);
|
|
174
|
+
});
|
|
175
|
+
it('should not fix template size scale if it is not number', async function () {
|
|
176
|
+
await f.fixImageTemplateScale(basicTemplate, 'wrong-scale')
|
|
177
|
+
.should.eventually.eql(basicTemplate);
|
|
178
|
+
});
|
|
179
|
+
it('should fix template size scale', async function () {
|
|
180
|
+
const actual = 'iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAWElEQVR4AU3BQRWAQAhAwa/PGBsEgrC16AFBKEIPXW7OXO+Rmey9iQjMjHFzrLUwM7qbqmLcHKpKRFBVuDvj4agq3B1VRUQYT2bS3QwRQVUZF/CaGRHB3wc1vSZbHO5+BgAAAABJRU5ErkJggg==';
|
|
181
|
+
await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
182
|
+
fixImageTemplateScale: true, xScale: 1.5, yScale: 1.5
|
|
183
|
+
}).should.eventually.eql(actual);
|
|
184
|
+
});
|
|
185
|
+
it('should not fix template size scale because of fixImageTemplateScale being false', async function () {
|
|
186
|
+
await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
187
|
+
fixImageTemplateScale: false, xScale: 1.5, yScale: 1.5
|
|
188
|
+
}).should.eventually.eql(fixtures_1.TINY_PNG);
|
|
189
|
+
});
|
|
190
|
+
it('should fix template size scale with default scale', async function () {
|
|
191
|
+
const actual = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABwUlEQVR4AaXBPUsrQQCG0SeX+cBdkTjwTpG1NPgLpjY/fW1stt4UYmm2cJqwMCsaw70uJJ3CBc9Z/P3Cl+12S9u2tG1L27bEGLm/v2ez2bDZbJDEd/7wS4YT7z3X19fc3Nxwd3dHXdd47xnHkefnZ8ZxpKoq6rqmqiqMMcwMJ1VV0TQN0zThnOPj44O6rsk503UdkmiahqZpWK1WGGOYGU7quqZpGqy1SCLnTM6Z19dXcs5IYpomrLVI4uLigpnhpKoqVqsVkjgcDjw9PdF1HTlnuq5DEs45JHE4HDgznByPR97e3pimiVIK4zhyPB7x3hNCIITA5eUl3nsWiwVnhpNSCsMwsNvtGIaB/X5PKQVJpJSQxHq9RhLOOc4MJ9M0sdvt2G639H3PTBIxRiQhCUnEGLHWcmY4KaUwDAN93/P4+MhyuSSlhCRSSkjCOYe1FmstZ6bve2YvLy/s93tmy+USSUhCEpIIIfAd8/DwwOz9/Z1SCpJIKSGJ9XqNJJxz/MS0bcvs6uoKScQYkYQkJBFjxFrLT0zbtsxub29JKSGJlBKScM5hrcVay09MzplZjJHPz0+894QQCCHwP/7wS/8A4e6nAg+R8LwAAAAASUVORK5CYII=';
|
|
192
|
+
await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
193
|
+
defaultImageTemplateScale: 4.0
|
|
194
|
+
}).should.eventually.eql(actual);
|
|
195
|
+
});
|
|
196
|
+
it('should fix template size scale with default scale and image scale', async function () {
|
|
197
|
+
const actual = 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACaUlEQVR4AbXBMWvrWBSF0c9BsFPtW91UR1U6+///FKlKKt8qqnyqnMozggkI8xgMj6x1uv+L/6zryrIsrOvKsiys68qyLFwuF87nM5fLhfP5zOVy4Xw+84wXftkLv2ziQBK26b0TEVQVu4jANrvM5Hq9spOEJCQhCUlI4mjiQBK26b1TVewkYRvb7DKTMQaZiW1s01rDNraRxNHEgSRaa1QVO0m01jjKTDKTXe+d3jtVxU4SjyYOJGGbnSRs03snM8lMMpPb7UZmkplEBFXFThK2eTRxIAnbSMI2VcX39zdjDMYYZCaZyRiDMQZVxU4StqkqHk0cSEISf5KZ7DKTMQbLsrCTRGuN3jtVxaOJg6qiqqgqqoqqoqoYY5CZ7GwTEdzvd97f34kIeu/YRhKPJg6qiswkM7ndbmQmmUlmkpnsbBMR2CYimOeZ3ju2kcSjiYOqIjP5+vpi2za2bWPbNo5aa7TW2PXe6b3Te6e1hiQeTRxUFbfbjW3bGGNwvV4ZY2Ab27TWsI1tbGMb27TWsI0kHk0cVBWZybZtXK9XPj8/+fj4YJ5nIoLWGraJCOZ5RhKSkIQkJPFo4qCqyEy2bWOMwefnJ+u6cjqdsM3ONvM8cz6feca0ris/rtcrmcnONhHB/X7n/f2diKD3jm0k8axpWRZ+ZCaZyc42EYFtIoJ5num9YxtJPGta15U/sY1tdm9vb/Te6b1jG0k8a1qWhR+2sU1rjdYatrGNbWxjm9YaknjWtK4rPyKCiKC1hm0igojg9fUVSUhCEpJ41rQsC0e22dkmIrhcLvyNF/7H6XTib73wy174Zf8AJEsePtlPj10AAAAASUVORK5CYII=';
|
|
198
|
+
await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
199
|
+
defaultImageTemplateScale: 4.0,
|
|
200
|
+
fixImageTemplateScale: true,
|
|
201
|
+
xScale: 1.5, yScale: 1.5
|
|
202
|
+
}).should.eventually.eql(actual);
|
|
203
|
+
});
|
|
204
|
+
it('should not fix template size scale with default scale and image scale', async function () {
|
|
205
|
+
const actual = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABwUlEQVR4AaXBPUsrQQCG0SeX+cBdkTjwTpG1NPgLpjY/fW1stt4UYmm2cJqwMCsaw70uJJ3CBc9Z/P3Cl+12S9u2tG1L27bEGLm/v2ez2bDZbJDEd/7wS4YT7z3X19fc3Nxwd3dHXdd47xnHkefnZ8ZxpKoq6rqmqiqMMcwMJ1VV0TQN0zThnOPj44O6rsk503UdkmiahqZpWK1WGGOYGU7quqZpGqy1SCLnTM6Z19dXcs5IYpomrLVI4uLigpnhpKoqVqsVkjgcDjw9PdF1HTlnuq5DEs45JHE4HDgznByPR97e3pimiVIK4zhyPB7x3hNCIITA5eUl3nsWiwVnhpNSCsMwsNvtGIaB/X5PKQVJpJSQxHq9RhLOOc4MJ9M0sdvt2G639H3PTBIxRiQhCUnEGLHWcmY4KaUwDAN93/P4+MhyuSSlhCRSSkjCOYe1FmstZ6bve2YvLy/s93tmy+USSUhCEpIIIfAd8/DwwOz9/Z1SCpJIKSGJ9XqNJJxz/MS0bcvs6uoKScQYkYQkJBFjxFrLT0zbtsxub29JKSGJlBKScM5hrcVay09MzplZjJHPz0+894QQCCHwP/7wS/8A4e6nAg+R8LwAAAAASUVORK5CYII=';
|
|
206
|
+
await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
207
|
+
defaultImageTemplateScale: 4.0,
|
|
208
|
+
fixImageTemplateScale: false,
|
|
209
|
+
xScale: 1.5, yScale: 1.5
|
|
210
|
+
}).should.eventually.eql(actual);
|
|
211
|
+
});
|
|
212
|
+
it('should not fix template size scale because of ignoreDefaultImageTemplateScale', async function () {
|
|
213
|
+
await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
214
|
+
defaultImageTemplateScale: 4.0,
|
|
215
|
+
ignoreDefaultImageTemplateScale: true,
|
|
216
|
+
}).should.eventually.eql(fixtures_1.TINY_PNG);
|
|
217
|
+
});
|
|
218
|
+
it('should ignore defaultImageTemplateScale to fix template size scale because of ignoreDefaultImageTemplateScale', async function () {
|
|
219
|
+
const actual = 'iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAWElEQVR4AU3BQRWAQAhAwa/PGBsEgrC16AFBKEIPXW7OXO+Rmey9iQjMjHFzrLUwM7qbqmLcHKpKRFBVuDvj4agq3B1VRUQYT2bS3QwRQVUZF/CaGRHB3wc1vSZbHO5+BgAAAABJRU5ErkJggg==';
|
|
220
|
+
await f.fixImageTemplateScale(fixtures_1.TINY_PNG, {
|
|
221
|
+
defaultImageTemplateScale: 4.0,
|
|
222
|
+
ignoreDefaultImageTemplateScale: true,
|
|
223
|
+
fixImageTemplateScale: true,
|
|
224
|
+
xScale: 1.5, yScale: 1.5
|
|
225
|
+
}).should.eventually.eql(actual);
|
|
283
226
|
});
|
|
284
227
|
});
|
|
285
228
|
describe('ensureTemplateSize', function () {
|
|
286
229
|
const d = new PluginDriver();
|
|
287
230
|
const f = new finder_1.default(d);
|
|
288
|
-
it('should not resize the template if it is smaller than the screen', function () {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
303
|
-
const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n / 2);
|
|
304
|
-
const newTemplate = yield f.ensureTemplateSize(fixtures_1.TINY_PNG, ...screen);
|
|
305
|
-
newTemplate.should.not.eql(fixtures_1.TINY_PNG);
|
|
306
|
-
newTemplate.length.should.be.below(fixtures_1.TINY_PNG.length);
|
|
307
|
-
});
|
|
231
|
+
it('should not resize the template if it is smaller than the screen', async function () {
|
|
232
|
+
const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n * 2);
|
|
233
|
+
await f.ensureTemplateSize(fixtures_1.TINY_PNG, ...screen)
|
|
234
|
+
.should.eventually.eql(fixtures_1.TINY_PNG);
|
|
235
|
+
});
|
|
236
|
+
it('should not resize the template if it is the same size as the screen', async function () {
|
|
237
|
+
await f.ensureTemplateSize(fixtures_1.TINY_PNG, ...fixtures_1.TINY_PNG_DIMS)
|
|
238
|
+
.should.eventually.eql(fixtures_1.TINY_PNG);
|
|
239
|
+
});
|
|
240
|
+
it('should resize the template if it is bigger than the screen', async function () {
|
|
241
|
+
const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n / 2);
|
|
242
|
+
const newTemplate = await f.ensureTemplateSize(fixtures_1.TINY_PNG, ...screen);
|
|
243
|
+
newTemplate.should.not.eql(fixtures_1.TINY_PNG);
|
|
244
|
+
newTemplate.length.should.be.below(fixtures_1.TINY_PNG.length);
|
|
308
245
|
});
|
|
309
246
|
});
|
|
310
247
|
describe('getScreenshotForImageFind', function () {
|
|
@@ -315,95 +252,83 @@ describe('finding elements by image', function () {
|
|
|
315
252
|
f = new finder_1.default(d);
|
|
316
253
|
sinon_1.default.stub(d, 'getScreenshot').returns(fixtures_1.TINY_PNG);
|
|
317
254
|
});
|
|
318
|
-
it('should fail if driver does not support getScreenshot', function () {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
expectedScale = { xScale: 4, yScale: 2.67 };
|
|
395
|
-
const { b64Screenshot: newScreen, scale: newScale } = yield f.getScreenshotForImageFind(...screen);
|
|
396
|
-
newScreen.should.not.eql(fixtures_1.TINY_PNG);
|
|
397
|
-
screenshotObj = yield appium_support_1.imageUtil.getJimpImage(newScreen);
|
|
398
|
-
screenshotObj.bitmap.width.should.eql(screen[0]);
|
|
399
|
-
screenshotObj.bitmap.height.should.eql(screen[1]);
|
|
400
|
-
newScale.xScale.should.eql(expectedScale.xScale);
|
|
401
|
-
newScale.yScale.toFixed(2).should.eql(expectedScale.yScale.toString());
|
|
402
|
-
// 12 x 8 stretched TINY_PNG
|
|
403
|
-
yield f.fixImageTemplateScale(newScreen, { fixImageTemplateScale: true, scale })
|
|
404
|
-
.should.eventually.eql('iVBORw0KGgoAAAANSUhEUgAAAAwAAAAICAYAAADN5B7xAAAAI0lEQVR4AZXBAQEAMAyDMI5/T5W2ayB5245AIokkkkgiiST6+W4DTLyo5PUAAAAASUVORK5CYII=');
|
|
405
|
-
});
|
|
255
|
+
it('should fail if driver does not support getScreenshot', async function () {
|
|
256
|
+
const d = new base_driver_1.default();
|
|
257
|
+
const f = new finder_1.default(d);
|
|
258
|
+
await f.getScreenshotForImageFind()
|
|
259
|
+
.should.eventually.be.rejectedWith(/driver does not support/);
|
|
260
|
+
});
|
|
261
|
+
it('should not adjust or verify screenshot if asked not to by settings', async function () {
|
|
262
|
+
await d.settings.update({ fixImageFindScreenshotDims: false });
|
|
263
|
+
const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n + 1);
|
|
264
|
+
const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
|
|
265
|
+
b64Screenshot.should.eql(fixtures_1.TINY_PNG);
|
|
266
|
+
should.equal(scale, undefined);
|
|
267
|
+
});
|
|
268
|
+
it('should return screenshot without adjustment if it matches screen size', async function () {
|
|
269
|
+
const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...fixtures_1.TINY_PNG_DIMS);
|
|
270
|
+
b64Screenshot.should.eql(fixtures_1.TINY_PNG);
|
|
271
|
+
should.equal(scale, undefined);
|
|
272
|
+
});
|
|
273
|
+
it('should return scaled screenshot with same aspect ratio if matching screen aspect ratio', async function () {
|
|
274
|
+
const screen = fixtures_1.TINY_PNG_DIMS.map((n) => n * 1.5);
|
|
275
|
+
const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
|
|
276
|
+
b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
|
|
277
|
+
const screenshotObj = await support_1.imageUtil.getJimpImage(b64Screenshot);
|
|
278
|
+
screenshotObj.bitmap.width.should.eql(screen[0]);
|
|
279
|
+
screenshotObj.bitmap.height.should.eql(screen[1]);
|
|
280
|
+
scale.should.eql({ xScale: 1.5, yScale: 1.5 });
|
|
281
|
+
});
|
|
282
|
+
it('should return scaled screenshot with different aspect ratio if not matching screen aspect ratio', async function () {
|
|
283
|
+
// try first with portrait screen, screen = 8 x 12
|
|
284
|
+
let screen = [fixtures_1.TINY_PNG_DIMS[0] * 2, fixtures_1.TINY_PNG_DIMS[1] * 3];
|
|
285
|
+
let expectedScale = { xScale: 2.67, yScale: 4 };
|
|
286
|
+
const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
|
|
287
|
+
b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
|
|
288
|
+
let screenshotObj = await support_1.imageUtil.getJimpImage(b64Screenshot);
|
|
289
|
+
screenshotObj.bitmap.width.should.eql(screen[0]);
|
|
290
|
+
screenshotObj.bitmap.height.should.eql(screen[1]);
|
|
291
|
+
scale.xScale.toFixed(2).should.eql(expectedScale.xScale.toString());
|
|
292
|
+
scale.yScale.should.eql(expectedScale.yScale);
|
|
293
|
+
// then with landscape screen, screen = 12 x 8
|
|
294
|
+
screen = [fixtures_1.TINY_PNG_DIMS[0] * 3, fixtures_1.TINY_PNG_DIMS[1] * 2];
|
|
295
|
+
expectedScale = { xScale: 4, yScale: 2.67 };
|
|
296
|
+
const { b64Screenshot: newScreen, scale: newScale } = await f.getScreenshotForImageFind(...screen);
|
|
297
|
+
newScreen.should.not.eql(fixtures_1.TINY_PNG);
|
|
298
|
+
screenshotObj = await support_1.imageUtil.getJimpImage(newScreen);
|
|
299
|
+
screenshotObj.bitmap.width.should.eql(screen[0]);
|
|
300
|
+
screenshotObj.bitmap.height.should.eql(screen[1]);
|
|
301
|
+
newScale.xScale.should.eql(expectedScale.xScale);
|
|
302
|
+
newScale.yScale.toFixed(2).should.eql(expectedScale.yScale.toString());
|
|
303
|
+
});
|
|
304
|
+
it('should return scaled screenshot with different aspect ratio if not matching screen aspect ratio with fixImageTemplateScale', async function () {
|
|
305
|
+
// try first with portrait screen, screen = 8 x 12
|
|
306
|
+
let screen = [fixtures_1.TINY_PNG_DIMS[0] * 2, fixtures_1.TINY_PNG_DIMS[1] * 3];
|
|
307
|
+
let expectedScale = { xScale: 2.67, yScale: 4 };
|
|
308
|
+
const { b64Screenshot, scale } = await f.getScreenshotForImageFind(...screen);
|
|
309
|
+
b64Screenshot.should.not.eql(fixtures_1.TINY_PNG);
|
|
310
|
+
let screenshotObj = await support_1.imageUtil.getJimpImage(b64Screenshot);
|
|
311
|
+
screenshotObj.bitmap.width.should.eql(screen[0]);
|
|
312
|
+
screenshotObj.bitmap.height.should.eql(screen[1]);
|
|
313
|
+
scale.xScale.toFixed(2).should.eql(expectedScale.xScale.toString());
|
|
314
|
+
scale.yScale.should.eql(expectedScale.yScale);
|
|
315
|
+
// 8 x 12 stretched TINY_PNG
|
|
316
|
+
await f.fixImageTemplateScale(b64Screenshot, { fixImageTemplateScale: true, scale })
|
|
317
|
+
.should.eventually.eql('iVBORw0KGgoAAAANSUhEUgAAAAgAAAAMCAYAAABfnvydAAAAJ0lEQVR4AYXBAQEAIACDMKR/p0fTBrKdbZcPCRIkSJAgQYIECRIkPAzBA1TpeNwZAAAAAElFTkSuQmCC');
|
|
318
|
+
// then with landscape screen, screen = 12 x 8
|
|
319
|
+
screen = [fixtures_1.TINY_PNG_DIMS[0] * 3, fixtures_1.TINY_PNG_DIMS[1] * 2];
|
|
320
|
+
expectedScale = { xScale: 4, yScale: 2.67 };
|
|
321
|
+
const { b64Screenshot: newScreen, scale: newScale } = await f.getScreenshotForImageFind(...screen);
|
|
322
|
+
newScreen.should.not.eql(fixtures_1.TINY_PNG);
|
|
323
|
+
screenshotObj = await support_1.imageUtil.getJimpImage(newScreen);
|
|
324
|
+
screenshotObj.bitmap.width.should.eql(screen[0]);
|
|
325
|
+
screenshotObj.bitmap.height.should.eql(screen[1]);
|
|
326
|
+
newScale.xScale.should.eql(expectedScale.xScale);
|
|
327
|
+
newScale.yScale.toFixed(2).should.eql(expectedScale.yScale.toString());
|
|
328
|
+
// 12 x 8 stretched TINY_PNG
|
|
329
|
+
await f.fixImageTemplateScale(newScreen, { fixImageTemplateScale: true, scale })
|
|
330
|
+
.should.eventually.eql('iVBORw0KGgoAAAANSUhEUgAAAAwAAAAICAYAAADN5B7xAAAAI0lEQVR4AZXBAQEAMAyDMI5/T5W2ayB5245AIokkkkgiiST6+W4DTLyo5PUAAAAASUVORK5CYII=');
|
|
406
331
|
});
|
|
407
332
|
});
|
|
408
333
|
});
|
|
409
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZGVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ZpbmRlci1zcGVjcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBdUI7QUFDdkIsbURBQTJDO0FBQzNDLDRFQUE0QztBQUM1QyxxREFBaUU7QUFDakUsOERBQWtEO0FBQ2xELDRFQUFtRDtBQUNuRCxrREFBMEI7QUFDMUIsMENBQXNEO0FBQ3RELGdEQUF3QjtBQUN4Qix3RUFBOEM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbkQsY0FBSSxDQUFDLEdBQUcsQ0FBQywwQkFBYyxDQUFDLENBQUM7QUFDekIsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBa0IsRUFBRSxDQUFDO0FBRXhDLE1BQU0sWUFBYSxTQUFRLDRCQUFVO0lBQzdCLGFBQWE7OERBQUssQ0FBQztLQUFBO0lBQ25CLGFBQWE7OERBQUssQ0FBQztLQUFBO0lBQ3pCLFdBQVcsQ0FBRSxRQUFRLEVBQUUsUUFBUTtRQUM3QixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsZ0JBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsWUFBWSxDQUFFLFFBQVEsRUFBRSxRQUFRO1FBQzlCLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxnQkFBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FFRjtBQUVELFFBQVEsQ0FBQywyQkFBMkIsRUFBRTtJQUNwQyxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxnRUFBZ0UsRUFBRTs7Z0JBQ25FLE1B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
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZGVyLXNwZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2ZpbmRlci1zcGVjcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBdUI7QUFDdkIsNkNBQTRDO0FBQzVDLHNFQUE2QztBQUM3QyxxREFBaUU7QUFDakUsOERBQWtEO0FBQ2xELDRFQUFtRDtBQUNuRCxrREFBMEI7QUFDMUIsMENBQXNEO0FBQ3RELGdEQUF3QjtBQUN4Qix3RUFBOEM7QUFFOUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDbkQsY0FBSSxDQUFDLEdBQUcsQ0FBQywwQkFBYyxDQUFDLENBQUM7QUFDekIsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRTdCLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBa0IsRUFBRSxDQUFDO0FBRXhDLE1BQU0sWUFBYSxTQUFRLHFCQUFVO0lBQ25DLEtBQUssQ0FBQyxhQUFhLEtBQUssQ0FBQztJQUN6QixLQUFLLENBQUMsYUFBYSxLQUFLLENBQUM7SUFDekIsV0FBVyxDQUFFLFFBQVEsRUFBRSxRQUFRO1FBQzdCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxnQkFBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFDRCxZQUFZLENBQUUsUUFBUSxFQUFFLFFBQVE7UUFDOUIsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUVGO0FBRUQsUUFBUSxDQUFDLDJCQUEyQixFQUFFO0lBQ3BDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEtBQUs7WUFDeEUs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
|