appium-android-driver 6.0.0 → 6.0.1

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.
@@ -1,299 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.commonCapConstraints = void 0;
4
- let commonCapConstraints = {
5
- platformName: {
6
- isString: true,
7
- inclusionCaseInsensitive: ['Android'],
8
- presence: true
9
- },
10
- app: {
11
- isString: true
12
- },
13
- appActivity: {
14
- isString: true
15
- },
16
- appPackage: {
17
- isString: true
18
- },
19
- appWaitActivity: {
20
- isString: true
21
- },
22
- appWaitPackage: {
23
- isString: true
24
- },
25
- appWaitDuration: {
26
- isNumber: true
27
- },
28
- deviceReadyTimeout: {
29
- isNumber: true
30
- },
31
- androidCoverage: {
32
- isString: true
33
- },
34
- androidDeviceReadyTimeout: {
35
- isNumber: true
36
- },
37
- androidDeviceSocket: {
38
- isString: true
39
- },
40
- androidInstallTimeout: {
41
- isNumber: true
42
- },
43
- adbPort: {
44
- isNumber: true
45
- },
46
- remoteAdbHost: {
47
- isString: true
48
- },
49
- adbExecTimeout: {
50
- isNumber: true
51
- },
52
- avd: {
53
- isString: true
54
- },
55
- avdLaunchTimeout: {
56
- isNumber: true
57
- },
58
- avdReadyTimeout: {
59
- isNumber: true
60
- },
61
- avdArgs: {
62
- // could be a string or an array
63
- },
64
- avdEnv: {
65
- isObject: true
66
- },
67
- useKeystore: {
68
- isBoolean: true
69
- },
70
- keystorePath: {
71
- isString: true
72
- },
73
- keystorePassword: {
74
- isString: true
75
- },
76
- keyAlias: {
77
- isString: true
78
- },
79
- keyPassword: {
80
- isString: true
81
- },
82
- webviewDevtoolsPort: {
83
- isNumber: true
84
- },
85
- ensureWebviewsHavePages: {
86
- isBoolean: true
87
- },
88
- enableWebviewDetailsCollection: {
89
- isBoolean: true
90
- },
91
- // this one is deprecated
92
- chromeDriverPort: {
93
- isNumber: true
94
- },
95
- // duplicate of above with better spelling
96
- chromedriverPort: {
97
- isNumber: true
98
- },
99
- chromedriverPorts: {
100
- isArray: true
101
- },
102
- chromedriverArgs: {
103
- isObject: true,
104
- },
105
- chromedriverExecutable: {
106
- isString: true
107
- },
108
- chromedriverExecutableDir: {
109
- isString: true
110
- },
111
- chromedriverChromeMappingFile: {
112
- isString: true
113
- },
114
- chromedriverUseSystemExecutable: {
115
- isBoolean: true
116
- },
117
- chromedriverDisableBuildCheck: {
118
- isBoolean: true
119
- },
120
- chromeLoggingPrefs: {
121
- isObject: true
122
- },
123
- autoWebviewTimeout: {
124
- isNumber: true
125
- },
126
- autoWebviewName: {
127
- isString: true
128
- },
129
- intentAction: {
130
- isString: true
131
- },
132
- intentCategory: {
133
- isString: true
134
- },
135
- intentFlags: {
136
- isString: true
137
- },
138
- optionalIntentArguments: {
139
- isString: true
140
- },
141
- dontStopAppOnReset: {
142
- isBoolean: true
143
- },
144
- unicodeKeyboard: {
145
- isBoolean: true
146
- },
147
- resetKeyboard: {
148
- isBoolean: true
149
- },
150
- noSign: {
151
- isBoolean: true
152
- },
153
- recreateChromeDriverSessions: {
154
- isBoolean: false
155
- },
156
- autoLaunch: {
157
- isBoolean: true
158
- },
159
- nativeWebScreenshot: {
160
- isBoolean: true
161
- },
162
- androidScreenshotPath: {
163
- isString: true
164
- },
165
- androidInstallPath: {
166
- isString: true
167
- },
168
- clearSystemFiles: {
169
- isBoolean: true
170
- },
171
- extractChromeAndroidPackageFromContextName: {
172
- isBoolean: true
173
- },
174
- autoGrantPermissions: {
175
- isBoolean: true
176
- },
177
- sharedPreferences: {
178
- isObject: true
179
- },
180
- networkSpeed: {
181
- isString: true
182
- },
183
- gpsEnabled: {
184
- isBoolean: true
185
- },
186
- isHeadless: {
187
- isBoolean: true
188
- },
189
- showChromedriverLog: {
190
- isBoolean: true
191
- },
192
- skipUnlock: {
193
- isBoolean: true
194
- },
195
- clearDeviceLogsOnStart: {
196
- isBoolean: true
197
- },
198
- unlockType: {
199
- isString: true
200
- },
201
- unlockKey: {
202
- isString: true
203
- },
204
- unlockStrategy: {
205
- isString: true,
206
- inclusionCaseInsensitive: ['locksettings', 'uiautomator'],
207
- },
208
- otherApps: {
209
- isString: true
210
- },
211
- uninstallOtherPackages: {
212
- isString: true
213
- },
214
- allowTestPackages: {
215
- isBoolean: true
216
- },
217
- pageLoadStrategy: {
218
- isString: true
219
- },
220
- localeScript: {
221
- isString: true
222
- },
223
- skipDeviceInitialization: {
224
- isBoolean: true
225
- },
226
- remoteAppsCacheLimit: {
227
- isNumber: true
228
- },
229
- buildToolsVersion: {
230
- isString: true
231
- },
232
- skipLogcatCapture: {
233
- isBoolean: true
234
- },
235
- chromeOptions: {
236
- isObject: true
237
- },
238
- enablePerformanceLogging: {
239
- isBoolean: true
240
- },
241
- userProfile: {
242
- isNumber: true
243
- },
244
- browserName: {
245
- isString: true
246
- },
247
- enforceAppInstall: {
248
- isBoolean: true
249
- },
250
- suppressKillServer: {
251
- isBoolean: true
252
- },
253
- allowOfflineDevices: {
254
- isBoolean: true
255
- },
256
- ignoreHiddenApiPolicyError: {
257
- isBoolean: true
258
- },
259
- unlockSuccessTimeout: {
260
- isNumber: true
261
- },
262
- mockLocationApp: {
263
- isString: true
264
- },
265
- logcatFormat: {
266
- isString: true
267
- },
268
- logcatFilterSpecs: {
269
- isArray: true
270
- },
271
- allowDelayAdb: {
272
- isBoolean: true
273
- }
274
- };
275
- exports.commonCapConstraints = commonCapConstraints;
276
- let uiautomatorCapConstraints = {
277
- ignoreUnimportantViews: {
278
- isBoolean: true
279
- },
280
- disableAndroidWatchers: {
281
- isBoolean: true
282
- },
283
- acceptSslCerts: {
284
- isBoolean: true
285
- },
286
- androidNaturalOrientation: {
287
- isBoolean: true
288
- },
289
- disableWindowAnimation: {
290
- isBoolean: true
291
- },
292
- bootstrapPort: {
293
- isNumber: true
294
- },
295
- };
296
- let desiredCapConstraints = {};
297
- Object.assign(desiredCapConstraints, commonCapConstraints, uiautomatorCapConstraints);
298
- exports.default = desiredCapConstraints;
299
- //# sourceMappingURL=desired-caps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"desired-caps.js","sourceRoot":"","sources":["../../lib/desired-caps.js"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- export namespace helpers {
2
- export function validateUnlockCapabilities(caps?: {}): {};
3
- export function fastUnlock(adb: any, opts?: {}): Promise<void>;
4
- export function encodePassword(key: any): string;
5
- export function stringKeyToArr(key: any): string[];
6
- export function fingerprintUnlock(adb: any, driver: any, capabilities: any): Promise<void>;
7
- export function pinUnlock(adb: any, driver: any, capabilities: any): Promise<void>;
8
- export function pinUnlockWithKeyEvent(adb: any, driver: any, capabilities: any): Promise<void>;
9
- export function passwordUnlock(adb: any, driver: any, capabilities: any): Promise<void>;
10
- export function getPatternKeyPosition(key: any, initPos: any, piece: any): {
11
- x: number;
12
- y: number;
13
- };
14
- export function getPatternActions(keys: any, initPos: any, piece: any): ({
15
- action: string;
16
- options: {
17
- element: null;
18
- x: number;
19
- y: number;
20
- };
21
- } | {
22
- action: string;
23
- options?: undefined;
24
- })[];
25
- export function patternUnlock(adb: any, driver: any, capabilities: any): Promise<void>;
26
- export { PIN_UNLOCK };
27
- export { PIN_UNLOCK_KEY_EVENT };
28
- export { PASSWORD_UNLOCK };
29
- export { PATTERN_UNLOCK };
30
- export { FINGERPRINT_UNLOCK };
31
- }
32
- export default helpers;
33
- export const PIN_UNLOCK: "pin";
34
- export const PIN_UNLOCK_KEY_EVENT: "pinWithKeyEvent";
35
- export const PASSWORD_UNLOCK: "password";
36
- export const PATTERN_UNLOCK: "pattern";
37
- export const FINGERPRINT_UNLOCK: "fingerprint";
38
- //# sourceMappingURL=unlock-helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unlock-helpers.d.ts","sourceRoot":"","sources":["../../lib/unlock-helpers.js"],"names":[],"mappings":";IAqBA,0DA+BC;IAED,+DAsBC;IAED,iDAEC;IAED,mDAEC;IAED,2FAMC;IAED,mFA8BC;IAsBD,+FAaC;IAED,wFAaC;IAED;;;MAeC;IAED;;;;;;;;;;SA2CC;IAED,uFA2BC;;;;;;;;AApQD,+BAAyB;AACzB,qDAA+C;AAC/C,yCAAmC;AACnC,uCAAiC;AACjC,+CAAyC"}
@@ -1,266 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FINGERPRINT_UNLOCK = exports.PATTERN_UNLOCK = exports.PASSWORD_UNLOCK = exports.PIN_UNLOCK_KEY_EVENT = exports.PIN_UNLOCK = exports.helpers = void 0;
7
- const logger_1 = __importDefault(require("./logger"));
8
- const asyncbox_1 = require("asyncbox");
9
- const lodash_1 = __importDefault(require("lodash"));
10
- const support_1 = require("@appium/support");
11
- const PIN_UNLOCK = 'pin';
12
- exports.PIN_UNLOCK = PIN_UNLOCK;
13
- const PIN_UNLOCK_KEY_EVENT = 'pinWithKeyEvent';
14
- exports.PIN_UNLOCK_KEY_EVENT = PIN_UNLOCK_KEY_EVENT;
15
- const PASSWORD_UNLOCK = 'password';
16
- exports.PASSWORD_UNLOCK = PASSWORD_UNLOCK;
17
- const PATTERN_UNLOCK = 'pattern';
18
- exports.PATTERN_UNLOCK = PATTERN_UNLOCK;
19
- const FINGERPRINT_UNLOCK = 'fingerprint';
20
- exports.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;
21
- const UNLOCK_TYPES = [
22
- PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, PASSWORD_UNLOCK,
23
- PATTERN_UNLOCK, FINGERPRINT_UNLOCK
24
- ];
25
- const KEYCODE_NUMPAD_ENTER = 66;
26
- const UNLOCK_WAIT_TIME = 100;
27
- const INPUT_KEYS_WAIT_TIME = 100;
28
- const NUMBER_ZERO_KEYCODE = 7;
29
- exports.helpers = {};
30
- exports.helpers.validateUnlockCapabilities = function validateUnlockCapabilities(caps = {}) {
31
- const { unlockKey, unlockType, } = caps;
32
- if (lodash_1.default.isNil(unlockKey) || unlockKey === '') {
33
- throw new Error('A non-empty unlock key value must be provided');
34
- }
35
- if ([PIN_UNLOCK, PIN_UNLOCK_KEY_EVENT, FINGERPRINT_UNLOCK].includes(unlockType)) {
36
- if (!/^[0-9]+$/.test(lodash_1.default.trim(unlockKey))) {
37
- throw new Error(`Unlock key value '${unlockKey}' must only consist of digits`);
38
- }
39
- }
40
- else if (unlockType === PATTERN_UNLOCK) {
41
- if (!/^[1-9]{2,9}$/.test(lodash_1.default.trim(unlockKey))) {
42
- throw new Error(`Unlock key value '${unlockKey}' must only include from two to nine digits in range 1..9`);
43
- }
44
- if (/([1-9]).*?\1/.test(lodash_1.default.trim(unlockKey))) {
45
- throw new Error(`Unlock key value '${unlockKey}' must define a valid pattern where repeats are not allowed`);
46
- }
47
- }
48
- else if (unlockType === PASSWORD_UNLOCK) {
49
- // Dont trim password key, you can use blank spaces in your android password
50
- // ¯\_(ツ)_/¯
51
- if (!/.{4,}/g.test(unlockKey)) {
52
- throw new Error(`The minimum allowed length of unlock key value '${unlockKey}' is 4 characters`);
53
- }
54
- }
55
- else {
56
- throw new Error(`Invalid unlock type '${unlockType}'. ` +
57
- `Only the following unlock types are supported: ${UNLOCK_TYPES}`);
58
- }
59
- return caps;
60
- };
61
- exports.helpers.fastUnlock = async function fastUnlock(adb, opts = {}) {
62
- const { credential, credentialType, } = opts;
63
- logger_1.default.info(`Unlocking the device via ADB using ${credentialType} credential '${credential}'`);
64
- const wasLockEnabled = await adb.isLockEnabled();
65
- if (wasLockEnabled) {
66
- await adb.clearLockCredential(credential);
67
- // not sure why, but the device's screen still remains locked
68
- // if a preliminary wake up cycle has not been performed
69
- await adb.cycleWakeUp();
70
- }
71
- else {
72
- logger_1.default.info('No active lock has been detected. Proceeding to the keyguard dismissal');
73
- }
74
- try {
75
- await adb.dismissKeyguard();
76
- }
77
- finally {
78
- if (wasLockEnabled) {
79
- await adb.setLockCredential(credentialType, credential);
80
- }
81
- }
82
- };
83
- exports.helpers.encodePassword = function encodePassword(key) {
84
- return `${key}`.replace(/\s/ig, '%s');
85
- };
86
- exports.helpers.stringKeyToArr = function stringKeyToArr(key) {
87
- return `${key}`.trim().replace(/\s+/g, '').split(/\s*/);
88
- };
89
- exports.helpers.fingerprintUnlock = async function fingerprintUnlock(adb, driver, capabilities) {
90
- if (await adb.getApiLevel() < 23) {
91
- throw new Error('Fingerprint unlock only works for Android 6+ emulators');
92
- }
93
- await adb.fingerprint(capabilities.unlockKey);
94
- await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
95
- };
96
- exports.helpers.pinUnlock = async function pinUnlock(adb, driver, capabilities) {
97
- logger_1.default.info(`Trying to unlock device using pin ${capabilities.unlockKey}`);
98
- await adb.dismissKeyguard();
99
- const keys = exports.helpers.stringKeyToArr(capabilities.unlockKey);
100
- if (await adb.getApiLevel() >= 21) {
101
- const els = await driver.findElOrEls('id', 'com.android.systemui:id/digit_text', true);
102
- if (lodash_1.default.isEmpty(els)) {
103
- // fallback to pin with key event
104
- return await exports.helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);
105
- }
106
- const pins = {};
107
- for (const el of els) {
108
- const text = await driver.getAttribute('text', support_1.util.unwrapElement(el));
109
- pins[text] = el;
110
- }
111
- for (const pin of keys) {
112
- const el = pins[pin];
113
- await driver.click(support_1.util.unwrapElement(el));
114
- }
115
- }
116
- else {
117
- for (const pin of keys) {
118
- const el = await driver.findElOrEls('id', `com.android.keyguard:id/key${pin}`, false);
119
- if (el === null) {
120
- // fallback to pin with key event
121
- return await exports.helpers.pinUnlockWithKeyEvent(adb, driver, capabilities);
122
- }
123
- await driver.click(support_1.util.unwrapElement(el));
124
- }
125
- }
126
- await waitForUnlock(adb);
127
- };
128
- /**
129
- * Wait for the display to be unlocked.
130
- * Some devices automatically accept typed 'pin' and 'password' code
131
- * without pressing the Enter key. But some devices need it.
132
- * This method waits a few seconds first for such automatic acceptance case.
133
- * If the device is still locked, then this method will try to send
134
- * the enter key code.
135
- *
136
- * @param {ADB} adb The instance of ADB
137
- */
138
- async function waitForUnlock(adb) {
139
- await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
140
- if (!await adb.isScreenLocked()) {
141
- return;
142
- }
143
- await adb.keyevent(KEYCODE_NUMPAD_ENTER);
144
- await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
145
- }
146
- exports.helpers.pinUnlockWithKeyEvent = async function pinUnlockWithKeyEvent(adb, driver, capabilities) {
147
- logger_1.default.info(`Trying to unlock device using pin with keycode ${capabilities.unlockKey}`);
148
- await adb.dismissKeyguard();
149
- const keys = exports.helpers.stringKeyToArr(capabilities.unlockKey);
150
- // Some device does not have system key ids like 'com.android.keyguard:id/key'
151
- // Then, sending keyevents are more reliable to unlock the screen.
152
- for (const pin of keys) {
153
- // 'pin' is number (0-9) in string.
154
- // Number '0' is keycode '7'. number '9' is keycode '16'.
155
- await adb.shell(['input', 'keyevent', parseInt(pin, 10) + NUMBER_ZERO_KEYCODE]);
156
- }
157
- await waitForUnlock(adb, driver);
158
- };
159
- exports.helpers.passwordUnlock = async function passwordUnlock(adb, driver, capabilities) {
160
- const { unlockKey } = capabilities;
161
- logger_1.default.info(`Trying to unlock device using password ${unlockKey}`);
162
- await adb.dismissKeyguard();
163
- // Replace blank spaces with %s
164
- const key = exports.helpers.encodePassword(unlockKey);
165
- // Why adb ? It was less flaky
166
- await adb.shell(['input', 'text', key]);
167
- // Why sleeps ? Avoid some flakyness waiting for the input to receive the keys
168
- await (0, asyncbox_1.sleep)(INPUT_KEYS_WAIT_TIME);
169
- await adb.shell(['input', 'keyevent', KEYCODE_NUMPAD_ENTER]);
170
- // Waits a bit for the device to be unlocked
171
- await waitForUnlock(adb, driver);
172
- };
173
- exports.helpers.getPatternKeyPosition = function getPatternKeyPosition(key, initPos, piece) {
174
- /*
175
- How the math works:
176
- We have 9 buttons divided in 3 columns and 3 rows inside the lockPatternView,
177
- every button has a position on the screen corresponding to the lockPatternView since
178
- it is the parent view right at the middle of each column or row.
179
- */
180
- const cols = 3;
181
- const pins = 9;
182
- const xPos = (key, x, piece) => Math.round(x + ((key % cols) || cols) * piece - piece / 2);
183
- const yPos = (key, y, piece) => Math.round(y + (Math.ceil(((key % pins) || pins) / cols) * piece - piece / 2));
184
- return {
185
- x: xPos(key, initPos.x, piece),
186
- y: yPos(key, initPos.y, piece)
187
- };
188
- };
189
- exports.helpers.getPatternActions = function getPatternActions(keys, initPos, piece) {
190
- const actions = [];
191
- let lastPos;
192
- for (let key of keys) {
193
- const keyPos = exports.helpers.getPatternKeyPosition(key, initPos, piece);
194
- if (key === keys[0]) {
195
- actions.push({ action: 'press', options: { element: null, x: keyPos.x, y: keyPos.y } });
196
- lastPos = keyPos;
197
- continue;
198
- }
199
- const moveTo = { x: 0, y: 0 };
200
- const diffX = keyPos.x - lastPos.x;
201
- if (diffX > 0) {
202
- moveTo.x = piece;
203
- if (Math.abs(diffX) > piece) {
204
- moveTo.x += piece;
205
- }
206
- }
207
- else if (diffX < 0) {
208
- moveTo.x = -1 * piece;
209
- if (Math.abs(diffX) > piece) {
210
- moveTo.x -= piece;
211
- }
212
- }
213
- const diffY = keyPos.y - lastPos.y;
214
- if (diffY > 0) {
215
- moveTo.y = piece;
216
- if (Math.abs(diffY) > piece) {
217
- moveTo.y += piece;
218
- }
219
- }
220
- else if (diffY < 0) {
221
- moveTo.y = -1 * piece;
222
- if (Math.abs(diffY) > piece) {
223
- moveTo.y -= piece;
224
- }
225
- }
226
- actions.push({
227
- action: 'moveTo',
228
- options: { element: null, x: moveTo.x + lastPos.x, y: moveTo.y + lastPos.y }
229
- });
230
- lastPos = keyPos;
231
- }
232
- actions.push({ action: 'release' });
233
- return actions;
234
- };
235
- exports.helpers.patternUnlock = async function patternUnlock(adb, driver, capabilities) {
236
- const { unlockKey } = capabilities;
237
- logger_1.default.info(`Trying to unlock device using pattern ${unlockKey}`);
238
- await adb.dismissKeyguard();
239
- const keys = exports.helpers.stringKeyToArr(unlockKey);
240
- /* We set the device pattern buttons as number of a regular phone
241
- * | • • • | | 1 2 3 |
242
- * | • • • | --> | 4 5 6 |
243
- * | • • • | | 7 8 9 |
244
-
245
- The pattern view buttons are not seeing by the uiautomator since they are
246
- included inside a FrameLayout, so we are going to try clicking on the buttons
247
- using the parent view bounds and math.
248
- */
249
- const apiLevel = await adb.getApiLevel();
250
- const el = await driver.findElOrEls('id', `com.android.${apiLevel >= 21 ? 'systemui' : 'keyguard'}:id/lockPatternView`, false);
251
- const initPos = await driver.getLocation(support_1.util.unwrapElement(el));
252
- const size = await driver.getSize(support_1.util.unwrapElement(el));
253
- // Get actions to perform
254
- const actions = exports.helpers.getPatternActions(keys, initPos, size.width / 3);
255
- // Perform gesture
256
- await driver.performTouch(actions);
257
- // Waits a bit for the device to be unlocked
258
- await (0, asyncbox_1.sleep)(UNLOCK_WAIT_TIME);
259
- };
260
- exports.helpers.PIN_UNLOCK = PIN_UNLOCK;
261
- exports.helpers.PIN_UNLOCK_KEY_EVENT = PIN_UNLOCK_KEY_EVENT;
262
- exports.helpers.PASSWORD_UNLOCK = PASSWORD_UNLOCK;
263
- exports.helpers.PATTERN_UNLOCK = PATTERN_UNLOCK;
264
- exports.helpers.FINGERPRINT_UNLOCK = FINGERPRINT_UNLOCK;
265
- exports.default = exports.helpers;
266
- //# sourceMappingURL=unlock-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"unlock-helpers.js","sourceRoot":"","sources":["../../lib/unlock-helpers.js"],"names":[],"mappings":"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"}