@appium/execute-driver-plugin 1.0.1 → 1.0.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/LICENSE +2 -2
- package/build/lib/execute-child.d.ts +3 -0
- package/build/lib/execute-child.d.ts.map +1 -0
- package/build/lib/execute-child.js +124 -114
- package/build/lib/plugin.d.ts +31 -0
- package/build/lib/plugin.d.ts.map +1 -0
- package/build/lib/plugin.js +125 -123
- package/build/tsconfig.tsbuildinfo +1 -1
- package/index.js +1 -3
- package/package.json +17 -13
- package/README.md +0 -65
- package/build/index.js +0 -10
- package/build/test/e2e/plugin-e2e-specs.js +0 -137
- package/build/test/unit/plugin-specs.js +0 -16
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
|
|
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.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute-child.d.ts","sourceRoot":"","sources":["../../lib/execute-child.js"],"names":[],"mappings":"AAWA,oEAA+D;AAC/D,4CAA6C"}
|
|
@@ -1,129 +1,139 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.W3C_ELEMENT_KEY = exports.MJSONWP_ELEMENT_KEY = void 0;
|
|
9
|
+
|
|
10
|
+
require("source-map-support/register");
|
|
11
|
+
|
|
12
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
+
|
|
14
|
+
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
15
|
+
|
|
16
|
+
var _vm = require("vm2");
|
|
17
|
+
|
|
18
|
+
var _support = require("@appium/support");
|
|
19
|
+
|
|
20
|
+
var _webdriverio = require("webdriverio");
|
|
21
|
+
|
|
22
|
+
const log = _support.logger.getLogger('ExecuteDriver Child');
|
|
23
|
+
|
|
13
24
|
let send;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
exports.MJSONWP_ELEMENT_KEY =
|
|
25
|
+
const W3C_ELEMENT_KEY = _support.util.W3C_WEB_ELEMENT_IDENTIFIER;
|
|
26
|
+
exports.W3C_ELEMENT_KEY = W3C_ELEMENT_KEY;
|
|
27
|
+
const MJSONWP_ELEMENT_KEY = 'ELEMENT';
|
|
28
|
+
exports.MJSONWP_ELEMENT_KEY = MJSONWP_ELEMENT_KEY;
|
|
29
|
+
|
|
18
30
|
async function runScript(driverOpts, script, timeoutMs) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
if (!_lodash.default.isNumber(timeoutMs)) {
|
|
32
|
+
throw new TypeError('Timeout parameter must be a number');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const logLevels = ['error', 'warn', 'log'];
|
|
36
|
+
const logs = {};
|
|
37
|
+
const consoleFns = {};
|
|
38
|
+
|
|
39
|
+
for (const level of logLevels) {
|
|
40
|
+
logs[level] = [];
|
|
41
|
+
|
|
42
|
+
consoleFns[level] = (...logMsgs) => logs[level].push(...logMsgs);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const driver = await (0, _webdriverio.attach)(driverOpts);
|
|
46
|
+
const fullScript = buildScript(script);
|
|
47
|
+
log.info('Running driver script in Node vm');
|
|
48
|
+
const vmCtx = new _vm.NodeVM({
|
|
49
|
+
timeout: timeoutMs
|
|
50
|
+
});
|
|
51
|
+
const vmFn = vmCtx.run(fullScript);
|
|
52
|
+
let result = await vmFn(driver, consoleFns, _bluebird.default);
|
|
53
|
+
result = coerceScriptResult(result);
|
|
54
|
+
log.info('Successfully ensured driver script result is appropriate type for return');
|
|
55
|
+
return {
|
|
56
|
+
result,
|
|
57
|
+
logs
|
|
58
|
+
};
|
|
41
59
|
}
|
|
42
|
-
|
|
43
|
-
* Embed a user-generated script inside a method which takes only the
|
|
44
|
-
* predetermined objects we specify
|
|
45
|
-
*
|
|
46
|
-
* @param {string} script - the javascript to execute
|
|
47
|
-
*
|
|
48
|
-
* @return {string} - the full script to execute
|
|
49
|
-
*/
|
|
60
|
+
|
|
50
61
|
function buildScript(script) {
|
|
51
|
-
|
|
62
|
+
return `module.exports = async function execute (driver, console, Promise) {
|
|
52
63
|
${script}
|
|
53
64
|
}`;
|
|
54
65
|
}
|
|
55
|
-
|
|
56
|
-
* We can get any manner of crazy thing back from a vm executing untrusted
|
|
57
|
-
* code. We might also get WebdriverIO objects that aren't suitable for JSON
|
|
58
|
-
* response. So make sure we convert the things we know about to their
|
|
59
|
-
* appropriate response format, and squash other weird things.
|
|
60
|
-
*
|
|
61
|
-
* @param {Object} obj - object to convert and sanitize
|
|
62
|
-
*
|
|
63
|
-
* @return {Object} - safely converted object
|
|
64
|
-
*/
|
|
66
|
+
|
|
65
67
|
function coerceScriptResult(obj) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
68
|
+
try {
|
|
69
|
+
obj = JSON.parse(JSON.stringify(obj));
|
|
70
|
+
} catch (e) {
|
|
71
|
+
log.warn('Could not convert executeDriverScript to safe response!' + `Result was: ${JSON.stringify(obj)}. Will make it null`);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let res;
|
|
76
|
+
|
|
77
|
+
if (_lodash.default.isPlainObject(obj)) {
|
|
78
|
+
res = {};
|
|
79
|
+
|
|
80
|
+
if (obj[MJSONWP_ELEMENT_KEY] || obj[W3C_ELEMENT_KEY]) {
|
|
81
|
+
if (obj[MJSONWP_ELEMENT_KEY]) {
|
|
82
|
+
res[MJSONWP_ELEMENT_KEY] = obj[MJSONWP_ELEMENT_KEY];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (obj[W3C_ELEMENT_KEY]) {
|
|
86
|
+
res[W3C_ELEMENT_KEY] = obj[W3C_ELEMENT_KEY];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return res;
|
|
75
90
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// if we have an object, it's either an element object or something else
|
|
80
|
-
// webdriverio has no monadic object types other than element and driver,
|
|
81
|
-
// and we don't want to allow special casing return of driver
|
|
82
|
-
res = {};
|
|
83
|
-
if (obj[exports.MJSONWP_ELEMENT_KEY] || obj[exports.W3C_ELEMENT_KEY]) {
|
|
84
|
-
// if it's an element object, clear out anything that's not the key, and then return the
|
|
85
|
-
// object. Note that if the element object contains only one element key type (MJSONWP or
|
|
86
|
-
// W3C), keep it that way in our response. But if the element contains both key types
|
|
87
|
-
// (because the client is being backwards compatible) then keep both keys in our response as
|
|
88
|
-
// well.
|
|
89
|
-
if (obj[exports.MJSONWP_ELEMENT_KEY]) {
|
|
90
|
-
res[exports.MJSONWP_ELEMENT_KEY] = obj[exports.MJSONWP_ELEMENT_KEY];
|
|
91
|
-
}
|
|
92
|
-
if (obj[exports.W3C_ELEMENT_KEY]) {
|
|
93
|
-
res[exports.W3C_ELEMENT_KEY] = obj[exports.W3C_ELEMENT_KEY];
|
|
94
|
-
}
|
|
95
|
-
return res;
|
|
96
|
-
}
|
|
97
|
-
// otherwise, recurse into the object
|
|
98
|
-
for (const key of Object.keys(obj)) {
|
|
99
|
-
res[key] = coerceScriptResult(obj[key]);
|
|
100
|
-
}
|
|
101
|
-
return res;
|
|
91
|
+
|
|
92
|
+
for (const key of Object.keys(obj)) {
|
|
93
|
+
res[key] = coerceScriptResult(obj[key]);
|
|
102
94
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return obj;
|
|
95
|
+
|
|
96
|
+
return res;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (_lodash.default.isArray(obj)) {
|
|
100
|
+
return obj.map(coerceScriptResult);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return obj;
|
|
109
104
|
}
|
|
105
|
+
|
|
110
106
|
async function main(driverOpts, script, timeoutMs) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
107
|
+
let res;
|
|
108
|
+
|
|
109
|
+
try {
|
|
110
|
+
res = {
|
|
111
|
+
success: await runScript(driverOpts, script, timeoutMs)
|
|
112
|
+
};
|
|
113
|
+
} catch (error) {
|
|
114
|
+
res = {
|
|
115
|
+
error: {
|
|
116
|
+
message: error.message,
|
|
117
|
+
stack: error.stack
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
await send(res);
|
|
119
123
|
}
|
|
120
|
-
|
|
121
|
-
if (require.main === module &&
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
|
|
125
|
+
if (require.main === module && _lodash.default.isFunction(process.send)) {
|
|
126
|
+
send = _bluebird.default.promisify(process.send, {
|
|
127
|
+
context: process
|
|
128
|
+
});
|
|
129
|
+
log.info('Running driver execution in child process');
|
|
130
|
+
process.on('message', ({
|
|
131
|
+
driverOpts,
|
|
132
|
+
script,
|
|
133
|
+
timeoutMs
|
|
134
|
+
}) => {
|
|
135
|
+
log.info('Parameters received from parent process');
|
|
136
|
+
main(driverOpts, script, timeoutMs);
|
|
137
|
+
});
|
|
128
138
|
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1jaGlsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9leGVjdXRlLWNoaWxkLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUF1QjtBQUN2Qix3REFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLDZDQUErQztBQUMvQyw2Q0FBcUM7QUFFckMsTUFBTSxHQUFHLEdBQUcsZ0JBQU0sQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNwRCxJQUFJLElBQUksQ0FBQztBQUVULCtFQUErRTtBQUMvRSx3REFBd0Q7QUFDM0MsUUFBQSxlQUFlLEdBQUcsY0FBSSxDQUFDLDBCQUEwQixDQUFDO0FBQ2xELFFBQUEsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO0FBRTdDLEtBQUssVUFBVSxTQUFTLENBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTO0lBQ3JELElBQUksQ0FBQyxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMxQixNQUFNLElBQUksU0FBUyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7S0FDM0Q7SUFFRCxxQkFBcUI7SUFDckIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLEVBQUU7UUFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQixVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0tBQ2xFO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLG9CQUFNLEVBQUMsVUFB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
|
|
139
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9leGVjdXRlLWNoaWxkLmpzIl0sIm5hbWVzIjpbImxvZyIsImxvZ2dlciIsImdldExvZ2dlciIsInNlbmQiLCJXM0NfRUxFTUVOVF9LRVkiLCJ1dGlsIiwiVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVIiLCJNSlNPTldQX0VMRU1FTlRfS0VZIiwicnVuU2NyaXB0IiwiZHJpdmVyT3B0cyIsInNjcmlwdCIsInRpbWVvdXRNcyIsIl8iLCJpc051bWJlciIsIlR5cGVFcnJvciIsImxvZ0xldmVscyIsImxvZ3MiLCJjb25zb2xlRm5zIiwibGV2ZWwiLCJsb2dNc2dzIiwicHVzaCIsImRyaXZlciIsImZ1bGxTY3JpcHQiLCJidWlsZFNjcmlwdCIsImluZm8iLCJ2bUN0eCIsIk5vZGVWTSIsInRpbWVvdXQiLCJ2bUZuIiwicnVuIiwicmVzdWx0IiwiQiIsImNvZXJjZVNjcmlwdFJlc3VsdCIsIm9iaiIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImUiLCJ3YXJuIiwicmVzIiwiaXNQbGFpbk9iamVjdCIsImtleSIsIk9iamVjdCIsImtleXMiLCJpc0FycmF5IiwibWFwIiwibWFpbiIsInN1Y2Nlc3MiLCJlcnJvciIsIm1lc3NhZ2UiLCJzdGFjayIsInJlcXVpcmUiLCJtb2R1bGUiLCJpc0Z1bmN0aW9uIiwicHJvY2VzcyIsInByb21pc2lmeSIsImNvbnRleHQiLCJvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxHQUFHLEdBQUdDLGdCQUFPQyxTQUFQLENBQWlCLHFCQUFqQixDQUFaOztBQUNBLElBQUlDLElBQUo7QUFJTyxNQUFNQyxlQUFlLEdBQUdDLGNBQUtDLDBCQUE3Qjs7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxTQUE1Qjs7O0FBRVAsZUFBZUMsU0FBZixDQUEwQkMsVUFBMUIsRUFBc0NDLE1BQXRDLEVBQThDQyxTQUE5QyxFQUF5RDtBQUN2RCxNQUFJLENB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RCxLQUFxQztBQUN6RFgsSUFBQUEsR0FBRyxDQUFDd0IsSUFBSixDQUFTLHlDQUFUO0FBQ0FzQixJQUFBQSxJQUFJLENBQUNyQyxVQUFELEVBQWFDLE1BQWIsRUFBcUJDLFNBQXJCLENBQUo7QUFDRCxHQUhEO0FBSUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuaW1wb3J0IHsgTm9kZVZNIH0gZnJvbSAndm0yJztcbmltcG9ydCB7IGxvZ2dlciwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBhdHRhY2ggfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0V4ZWN1dGVEcml2ZXIgQ2hpbGQnKTtcbmxldCBzZW5kO1xuXG4vLyBkdXBsaWNhdGUgZGVmaW5pbmcgdGhlc2Uga2V5cyBoZXJlIHNvIHdlIGRvbid0IG5lZWQgdG8gcmUtbG9hZCBhIGh1Z2UgYXBwaXVtXG4vLyBkZXBlbmRlbmN5IHRyZWUgaW50byBtZW1vcnkganVzdCB0byBydW4gYSB3ZGlvIHNjcmlwdFxuZXhwb3J0IGNvbnN0IFczQ19FTEVNRU5UX0tFWSA9IHV0aWwuVzNDX1dFQl9FTEVNRU5UX0lERU5USUZJRVI7XG5leHBvcnQgY29uc3QgTUpTT05XUF9FTEVNRU5UX0tFWSA9ICdFTEVNRU5UJztcblxuYXN5bmMgZnVuY3Rpb24gcnVuU2NyaXB0IChkcml2ZXJPcHRzLCBzY3JpcHQsIHRpbWVvdXRNcykge1xuICBpZiAoIV8uaXNOdW1iZXIodGltZW91dE1zKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RpbWVvdXQgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXInKTtcbiAgfVxuXG4gIC8vIHNldCB1cCBmYWtlIGxvZ2dlclxuICBjb25zdCBsb2dMZXZlbHMgPSBbJ2Vycm9yJywgJ3dhcm4nLCAnbG9nJ107XG4gIGNvbnN0IGxvZ3MgPSB7fTtcbiAgY29uc3QgY29uc29sZUZucyA9IHt9O1xuICBmb3IgKGNvbnN0IGxldmVsIG9mIGxvZ0xldmVscykge1xuICAgIGxvZ3NbbGV2ZWxdID0gW107XG4gICAgY29uc29sZUZuc1tsZXZlbF0gPSAoLi4ubG9nTXNncykgPT4gbG9nc1tsZXZlbF0ucHVzaCguLi5sb2dNc2dzKTtcbiAgfVxuXG4gIGNvbnN0IGRyaXZlciA9IGF3YWl0IGF0dGFjaChkcml2ZXJPcHRzKTtcblxuICBjb25zdCBmdWxsU2NyaXB0ID0gYnVpbGRTY3JpcHQoc2NyaXB0KTtcblxuICBsb2cuaW5mbygnUnVubmluZyBkcml2ZXIgc2NyaXB0IGluIE5vZGUgdm0nKTtcblxuICBjb25zdCB2bUN0eCA9IG5ldyBOb2RlVk0oe3RpbWVvdXQ6IHRpbWVvdXRNc30pO1xuICBjb25zdCB2bUZuID0gdm1DdHgucnVuKGZ1bGxTY3JpcHQpO1xuXG4gIC8vIHJ1biB0aGUgZHJpdmVyIHNjcmlwdCwgZ2l2aW5nIHVzZXIgYWNjZXNzIHRvIHRoZSBkcml2ZXIgb2JqZWN0LCBhIGZha2VcbiAgLy8gY29uc29sZSBsb2dnZXIsIGFuZCBhIHByb21pc2UgbGlicmFyeVxuICBsZXQgcmVzdWx0ID0gYXdhaXQgdm1Gbihkcml2ZXIsIGNvbnNvbGVGbnMsIEIpO1xuXG4gIHJlc3VsdCA9IGNvZXJjZVNjcmlwdFJlc3VsdChyZXN1bHQpO1xuICBsb2cuaW5mbygnU3VjY2Vzc2Z1bGx5IGVuc3VyZWQgZHJpdmVyIHNjcmlwdCByZXN1bHQgaXMgYXBwcm9wcmlhdGUgdHlwZSBmb3IgcmV0dXJuJyk7XG4gIHJldHVybiB7cmVzdWx0LCBsb2dzfTtcbn1cblxuLyoqXG4gKiBFbWJlZCBhIHVzZXItZ2VuZXJhdGVkIHNjcmlwdCBpbnNpZGUgYSBtZXRob2Qgd2hpY2ggdGFrZXMgb25seSB0aGVcbiAqIHByZWRldGVybWluZWQgb2JqZWN0cyB3ZSBzcGVjaWZ5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdCAtIHRoZSBqYXZhc2NyaXB0IHRvIGV4ZWN1dGVcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IC0gdGhlIGZ1bGwgc2NyaXB0IHRvIGV4ZWN1dGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRTY3JpcHQgKHNjcmlwdCkge1xuICByZXR1cm4gYG1vZHVsZS5leHBvcnRzID0gYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZSAoZHJpdmVyLCBjb25zb2xlLCBQcm9taXNlKSB7XG4gICAgJHtzY3JpcHR9XG4gIH1gO1xufVxuXG4vKipcbiAqIFdlIGNhbiBnZXQgYW55IG1hbm5lciBvZiBjcmF6eSB0aGluZyBiYWNrIGZyb20gYSB2bSBleGVjdXRpbmcgdW50cnVzdGVkXG4gKiBjb2RlLiBXZSBtaWdodCBhbHNvIGdldCBXZWJkcml2ZXJJTyBvYmplY3RzIHRoYXQgYXJlbid0IHN1aXRhYmxlIGZvciBKU09OXG4gKiByZXNwb25zZS4gU28gbWFrZSBzdXJlIHdlIGNvbnZlcnQgdGhlIHRoaW5ncyB3ZSBrbm93IGFib3V0IHRvIHRoZWlyXG4gKiBhcHByb3ByaWF0ZSByZXNwb25zZSBmb3JtYXQsIGFuZCBzcXVhc2ggb3RoZXIgd2VpcmQgdGhpbmdzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBvYmplY3QgdG8gY29udmVydCBhbmQgc2FuaXRpemVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gc2FmZWx5IGNvbnZlcnRlZCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29lcmNlU2NyaXB0UmVzdWx0IChvYmopIHtcbiAgLy8gZmlyc3QgZW5zdXJlIG9iaiBpcyBvZiBhIHR5cGUgdGhhdCBjYW4gYmUgSlNPTiBlbmNvZGVkIHNhZmVseS4gVGhpcyB3aWxsXG4gIC8vIGdldCByaWQgb2YgY3VzdG9tIG9iamVjdHMsIGZ1bmN0aW9ucywgZXRjLi4uIGFuZCB0dXJuIHRoZW0gaW50byBQT0pPc1xuICB0cnkge1xuICAgIG9iaiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cud2FybignQ291bGQgbm90IGNvbnZlcnQgZXhlY3V0ZURyaXZlclNjcmlwdCB0byBzYWZlIHJlc3BvbnNlIScgK1xuICAgICAgICAgICAgIGBSZXN1bHQgd2FzOiAke0pTT04uc3RyaW5naWZ5KG9iail9LiBXaWxsIG1ha2UgaXQgbnVsbGApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbGV0IHJlcztcblxuICAvLyBub3cgd2UgYmVnaW4gb3VyIHJlY3Vyc2l2ZSBjYXNlIG9wdGlvbnNcbiAgaWYgKF8uaXNQbGFpbk9iamVjdChvYmopKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhbiBvYmplY3QsIGl0J3MgZWl0aGVyIGFuIGVsZW1lbnQgb2JqZWN0IG9yIHNvbWV0aGluZyBlbHNlXG4gICAgLy8gd2ViZHJpdmVyaW8gaGFzIG5vIG1vbmFkaWMgb2JqZWN0IHR5cGVzIG90aGVyIHRoYW4gZWxlbWVudCBhbmQgZHJpdmVyLFxuICAgIC8vIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFsbG93IHNwZWNpYWwgY2FzaW5nIHJldHVybiBvZiBkcml2ZXJcbiAgICByZXMgPSB7fTtcblxuICAgIGlmIChvYmpbTUpTT05XUF9FTEVNRU5UX0tFWV0gfHwgb2JqW1czQ19FTEVNRU5UX0tFWV0pIHtcbiAgICAgIC8vIGlmIGl0J3MgYW4gZWxlbWVudCBvYmplY3QsIGNsZWFyIG91dCBhbnl0aGluZyB0aGF0J3Mgbm90IHRoZSBrZXksIGFuZCB0aGVuIHJldHVybiB0aGVcbiAgICAgIC8vIG9iamVjdC4gTm90ZSB0aGF0IGlmIHRoZSBlbGVtZW50IG9iamVjdCBjb250YWlucyBvbmx5IG9uZSBlbGVtZW50IGtleSB0eXBlIChNSlNPTldQIG9yXG4gICAgICAvLyBXM0MpLCBrZWVwIGl0IHRoYXQgd2F5IGluIG91ciByZXNwb25zZS4gQnV0IGlmIHRoZSBlbGVtZW50IGNvbnRhaW5zIGJvdGgga2V5IHR5cGVzXG4gICAgICAvLyAoYmVjYXVzZSB0aGUgY2xpZW50IGlzIGJlaW5nIGJhY2t3YXJkcyBjb21wYXRpYmxlKSB0aGVuIGtlZXAgYm90aCBrZXlzIGluIG91ciByZXNwb25zZSBhc1xuICAgICAgLy8gd2VsbC5cbiAgICAgIGlmIChvYmpbTUpTT05XUF9FTEVNRU5UX0tFWV0pIHtcbiAgICAgICAgcmVzW01KU09OV1BfRUxFTUVOVF9LRVldID0gb2JqW01KU09OV1BfRUxFTUVOVF9LRVldO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqW1czQ19FTEVNRU5UX0tFWV0pIHtcbiAgICAgICAgcmVzW1czQ19FTEVNRU5UX0tFWV0gPSBvYmpbVzNDX0VMRU1FTlRfS0VZXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gb3RoZXJ3aXNlLCByZWN1cnNlIGludG8gdGhlIG9iamVjdFxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgIHJlc1trZXldID0gY29lcmNlU2NyaXB0UmVzdWx0KG9ialtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8vIGFsc28gaGFuZGxlIGFycmF5c1xuICBpZiAoXy5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcChjb2VyY2VTY3JpcHRSZXN1bHQpO1xuICB9XG5cbiAgLy8gYmFzZSBjYXNlLCBpZiBpdCdzIG5vdCBhbiBvYmplY3Qgb3IgYXJyYXksIHJldHVybiBzdHJhaWdodGF3YXlcbiAgcmV0dXJuIG9iajtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbiAoZHJpdmVyT3B0cywgc2NyaXB0LCB0aW1lb3V0TXMpIHtcbiAgbGV0IHJlcztcbiAgdHJ5IHtcbiAgICByZXMgPSB7c3VjY2VzczogYXdhaXQgcnVuU2NyaXB0KGRyaXZlck9wdHMsIHNjcmlwdCwgdGltZW91dE1zKX07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzID0ge2Vycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07XG4gIH1cbiAgYXdhaXQgc2VuZChyZXMpO1xufVxuXG4vLyBlbnN1cmUgd2UncmUgcnVubmluZyB0aGlzIHNjcmlwdCBpbiBJUEMgbW9kZVxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlICYmIF8uaXNGdW5jdGlvbihwcm9jZXNzLnNlbmQpKSB7XG4gIHNlbmQgPSBCLnByb21pc2lmeShwcm9jZXNzLnNlbmQsIHtjb250ZXh0OiBwcm9jZXNzfSk7XG4gIGxvZy5pbmZvKCdSdW5uaW5nIGRyaXZlciBleGVjdXRpb24gaW4gY2hpbGQgcHJvY2VzcycpO1xuICBwcm9jZXNzLm9uKCdtZXNzYWdlJywgKHtkcml2ZXJPcHRzLCBzY3JpcHQsIHRpbWVvdXRNc30pID0+IHtcbiAgICBsb2cuaW5mbygnUGFyYW1ldGVycyByZWNlaXZlZCBmcm9tIHBhcmVudCBwcm9jZXNzJyk7XG4gICAgbWFpbihkcml2ZXJPcHRzLCBzY3JpcHQsIHRpbWVvdXRNcyk7XG4gIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export default class ExecuteDriverPlugin extends BasePlugin {
|
|
2
|
+
static newMethodMap: {
|
|
3
|
+
'/session/:sessionId/appium/execute_driver': {
|
|
4
|
+
POST: {
|
|
5
|
+
command: string;
|
|
6
|
+
payloadParams: {
|
|
7
|
+
required: string[];
|
|
8
|
+
optional: string[];
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* This method takes a string which is executed as javascript in the context of
|
|
15
|
+
* a new nodejs VM, and which has available a webdriverio driver object, having
|
|
16
|
+
* already been attached to the currently running session.
|
|
17
|
+
*
|
|
18
|
+
* @param {function} next - standard behaviour for executeDriverScript
|
|
19
|
+
* @param {BaseDriver} driver - Appium driver handling this command
|
|
20
|
+
* @param {string} script - the string representing the driver script to run
|
|
21
|
+
* @param {string} [scriptType='webdriverio'] - the name of the driver script
|
|
22
|
+
* library (currently only webdriverio is supported)
|
|
23
|
+
* @param {number} [timeoutMs=3600000] - timeout for the script process
|
|
24
|
+
*
|
|
25
|
+
* @returns {Object} - a JSONifiable object representing the return value of
|
|
26
|
+
* the script
|
|
27
|
+
*/
|
|
28
|
+
executeDriverScript(next: Function, driver: BaseDriver, script: string, scriptType?: string | undefined, timeoutMs?: number | undefined): any;
|
|
29
|
+
}
|
|
30
|
+
import BasePlugin from "@appium/base-plugin";
|
|
31
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../lib/plugin.js"],"names":[],"mappings":"AAUA;IAEE;;;;;;;;;;MAOE;IAEF;;;;;;;;;;;;;;OAcG;IACH,gEARW,MAAM,wEAmHhB;CACF"}
|