@appium/base-driver 8.1.1 → 8.2.2
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/build/lib/basedriver/capabilities.js +6 -6
- package/build/lib/basedriver/commands/find.js +1 -1
- package/build/lib/basedriver/commands/index.js +2 -4
- package/build/lib/basedriver/commands/log.js +1 -1
- package/build/lib/basedriver/commands/session.js +1 -1
- package/build/lib/basedriver/commands/timeout.js +1 -1
- package/build/lib/basedriver/desired-caps.js +1 -1
- package/build/lib/basedriver/device-settings.js +1 -1
- package/build/lib/basedriver/driver.js +5 -7
- package/build/lib/basedriver/helpers.js +5 -3
- package/build/lib/constants.js +1 -1
- package/build/lib/express/crash.js +1 -1
- package/build/lib/express/middleware.js +3 -3
- package/build/lib/express/server.js +1 -1
- package/build/lib/express/static.js +2 -2
- package/build/lib/express/websocket.js +3 -3
- package/build/lib/index.js +124 -0
- package/build/lib/jsonwp-status/status.js +1 -1
- package/build/lib/protocol/errors.js +6 -5
- package/build/lib/protocol/helpers.js +3 -3
- package/build/lib/protocol/index.js +31 -19
- package/build/lib/protocol/protocol.js +22 -11
- package/build/lib/protocol/routes.js +6 -12
- package/build/test/basedriver/capability-specs.js +10 -10
- package/build/test/basedriver/commands/event-specs.js +10 -10
- package/build/test/basedriver/driver-e2e-specs.js +3 -3
- package/build/test/basedriver/driver-e2e-tests.js +53 -256
- package/build/test/basedriver/driver-specs.js +3 -3
- package/build/test/basedriver/driver-tests.js +6 -6
- package/build/test/basedriver/helpers-e2e-specs.js +10 -4
- package/build/test/basedriver/index.js +4 -4
- package/build/test/basedriver/timeout-specs.js +7 -7
- package/build/test/basedriver/websockets-e2e-specs.js +11 -11
- package/build/test/express/server-e2e-specs.js +156 -0
- package/build/test/express/server-specs.js +151 -0
- package/build/test/express/static-specs.js +23 -0
- package/build/test/helpers.js +57 -0
- package/build/test/jsonwp-proxy/mock-request.js +93 -0
- package/build/test/jsonwp-proxy/protocol-converter-specs.js +173 -0
- package/build/test/jsonwp-proxy/proxy-e2e-specs.js +62 -0
- package/build/test/jsonwp-proxy/proxy-specs.js +299 -0
- package/build/test/jsonwp-proxy/url-specs.js +167 -0
- package/build/test/jsonwp-status/status-specs.js +36 -0
- package/build/test/protocol/errors-specs.js +388 -0
- package/build/test/protocol/fake-driver.js +168 -0
- package/build/test/protocol/helpers.js +27 -0
- package/build/test/protocol/protocol-e2e-specs.js +1242 -0
- package/build/test/protocol/routes-specs.js +82 -0
- package/build/test/protocol/validator-specs.js +151 -0
- package/index.d.ts +309 -44
- package/index.js +1 -62
- package/lib/basedriver/commands/index.js +0 -2
- package/lib/basedriver/driver.js +2 -22
- package/lib/basedriver/helpers.js +5 -4
- package/lib/index.js +62 -0
- package/lib/protocol/index.js +3 -1
- package/lib/protocol/protocol.js +18 -7
- package/lib/protocol/routes.js +1 -4
- package/package.json +8 -16
- package/test/basedriver/capability-specs.js +1 -1
- package/test/basedriver/commands/event-specs.js +1 -1
- package/test/basedriver/driver-e2e-specs.js +1 -1
- package/test/basedriver/driver-e2e-tests.js +66 -213
- package/test/basedriver/driver-specs.js +1 -1
- package/test/basedriver/driver-tests.js +3 -3
- package/test/basedriver/helpers-e2e-specs.js +9 -4
- package/test/basedriver/timeout-specs.js +1 -1
- package/test/basedriver/websockets-e2e-specs.js +7 -7
- package/build/index.js +0 -118
- package/build/lib/basedriver/commands/execute-child.js +0 -137
- package/build/lib/basedriver/commands/execute.js +0 -119
- package/build/test/basedriver/fixtures/custom-element-finder-bad.js +0 -12
- package/build/test/basedriver/fixtures/custom-element-finder.js +0 -36
- package/lib/basedriver/commands/execute-child.js +0 -132
- package/lib/basedriver/commands/execute.js +0 -126
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import { server, routeConfiguringFunction,
|
|
3
|
-
DEFAULT_WS_PATHNAME_PREFIX } from '
|
|
3
|
+
DEFAULT_WS_PATHNAME_PREFIX } from '../../lib';
|
|
4
4
|
import { FakeDriver } from '../protocol/fake-driver';
|
|
5
5
|
import WebSocket from 'ws';
|
|
6
6
|
import B from 'bluebird';
|
|
7
|
-
import
|
|
7
|
+
import {TEST_HOST, getTestPort} from '../helpers';
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
describe('Websockets (e2e)', function () {
|
|
11
11
|
let baseServer;
|
|
12
12
|
let driver;
|
|
13
|
+
let port;
|
|
13
14
|
const SESSION_ID = 'foo';
|
|
14
15
|
const WS_DATA = 'Hello';
|
|
15
|
-
let PORT;
|
|
16
16
|
|
|
17
17
|
before(async function () {
|
|
18
18
|
driver = new FakeDriver();
|
|
19
19
|
driver.sessionId = SESSION_ID;
|
|
20
|
-
|
|
20
|
+
port = await getTestPort();
|
|
21
21
|
baseServer = await server({
|
|
22
22
|
routeConfiguringFunction: routeConfiguringFunction(driver),
|
|
23
|
-
port
|
|
23
|
+
port,
|
|
24
24
|
});
|
|
25
25
|
});
|
|
26
26
|
after(async function () {
|
|
@@ -44,7 +44,7 @@ describe('Websockets (e2e)', function () {
|
|
|
44
44
|
baseServer.listenerCount('upgrade').should.be.above(previousListenerCount);
|
|
45
45
|
_.keys(await baseServer.getWebSocketHandlers()).length.should.eql(1);
|
|
46
46
|
await new B((resolve, reject) => {
|
|
47
|
-
const client = new WebSocket(`ws
|
|
47
|
+
const client = new WebSocket(`ws://${TEST_HOST}:${port}${endpoint}`);
|
|
48
48
|
client.on('connection', (ws, req) => {
|
|
49
49
|
ws.should.not.be.empty;
|
|
50
50
|
req.connection.remoteAddress.should.not.be.empty;
|
|
@@ -61,7 +61,7 @@ describe('Websockets (e2e)', function () {
|
|
|
61
61
|
(await baseServer.removeWebSocketHandler(endpoint)).should.be.true;
|
|
62
62
|
_.keys(await baseServer.getWebSocketHandlers()).length.should.eql(0);
|
|
63
63
|
await new B((resolve, reject) => {
|
|
64
|
-
const client = new WebSocket(`ws
|
|
64
|
+
const client = new WebSocket(`ws://${TEST_HOST}:${port}${endpoint}`);
|
|
65
65
|
client.on('message', (data) =>
|
|
66
66
|
reject(new Error(`No websocket messages are expected after the handler ` +
|
|
67
67
|
`has been removed. '${data}' is received instead. `))
|
package/build/index.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "DEFAULT_BASE_PATH", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _constants.DEFAULT_BASE_PATH;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
Object.defineProperty(exports, "PROTOCOLS", {
|
|
13
|
-
enumerable: true,
|
|
14
|
-
get: function () {
|
|
15
|
-
return _constants.PROTOCOLS;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
exports.DEFAULT_WS_PATHNAME_PREFIX = exports.validateCaps = exports.isStandardCap = exports.processCapabilities = exports.getSummaryByCode = exports.statusCodes = exports.JWProxy = exports.server = exports.STATIC_DIR = exports.normalizeBasePath = exports.isSessionCommand = exports.NO_SESSION_ID_COMMANDS = exports.routeToCommandName = exports.METHOD_MAP = exports.ALL_COMMANDS = exports.determineProtocol = exports.errorFromW3CJsonCode = exports.errorFromCode = exports.errorFromMJSONWPStatusCode = exports.isErrorType = exports.errors = exports.routeConfiguringFunction = exports.Protocol = exports.default = exports.BASEDRIVER_HANDLED_SETTINGS = exports.DeviceSettings = exports.BaseDriver = void 0;
|
|
19
|
-
|
|
20
|
-
require("source-map-support/register");
|
|
21
|
-
|
|
22
|
-
var driver = _interopRequireWildcard(require("./lib/basedriver/driver"));
|
|
23
|
-
|
|
24
|
-
var deviceSettings = _interopRequireWildcard(require("./lib/basedriver/device-settings"));
|
|
25
|
-
|
|
26
|
-
var protocol = _interopRequireWildcard(require("./lib/protocol"));
|
|
27
|
-
|
|
28
|
-
var _constants = require("./lib/constants");
|
|
29
|
-
|
|
30
|
-
var staticIndex = _interopRequireWildcard(require("./lib/express/static"));
|
|
31
|
-
|
|
32
|
-
var serverIndex = _interopRequireWildcard(require("./lib/express/server"));
|
|
33
|
-
|
|
34
|
-
var proxyIndex = _interopRequireWildcard(require("./lib/jsonwp-proxy/proxy"));
|
|
35
|
-
|
|
36
|
-
var statusIndex = _interopRequireWildcard(require("./lib/jsonwp-status/status"));
|
|
37
|
-
|
|
38
|
-
var caps = _interopRequireWildcard(require("./lib/basedriver/capabilities"));
|
|
39
|
-
|
|
40
|
-
var ws = _interopRequireWildcard(require("./lib/express/websocket"));
|
|
41
|
-
|
|
42
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
43
|
-
|
|
44
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
45
|
-
|
|
46
|
-
const {
|
|
47
|
-
BaseDriver
|
|
48
|
-
} = driver;
|
|
49
|
-
exports.BaseDriver = BaseDriver;
|
|
50
|
-
const {
|
|
51
|
-
DeviceSettings,
|
|
52
|
-
BASEDRIVER_HANDLED_SETTINGS
|
|
53
|
-
} = deviceSettings;
|
|
54
|
-
exports.BASEDRIVER_HANDLED_SETTINGS = BASEDRIVER_HANDLED_SETTINGS;
|
|
55
|
-
exports.DeviceSettings = DeviceSettings;
|
|
56
|
-
var _default = BaseDriver;
|
|
57
|
-
exports.default = _default;
|
|
58
|
-
const {
|
|
59
|
-
Protocol,
|
|
60
|
-
routeConfiguringFunction,
|
|
61
|
-
errors,
|
|
62
|
-
isErrorType,
|
|
63
|
-
errorFromMJSONWPStatusCode,
|
|
64
|
-
errorFromW3CJsonCode,
|
|
65
|
-
ALL_COMMANDS,
|
|
66
|
-
METHOD_MAP,
|
|
67
|
-
routeToCommandName,
|
|
68
|
-
NO_SESSION_ID_COMMANDS,
|
|
69
|
-
isSessionCommand,
|
|
70
|
-
normalizeBasePath,
|
|
71
|
-
determineProtocol
|
|
72
|
-
} = protocol;
|
|
73
|
-
exports.determineProtocol = determineProtocol;
|
|
74
|
-
exports.normalizeBasePath = normalizeBasePath;
|
|
75
|
-
exports.isSessionCommand = isSessionCommand;
|
|
76
|
-
exports.NO_SESSION_ID_COMMANDS = NO_SESSION_ID_COMMANDS;
|
|
77
|
-
exports.routeToCommandName = routeToCommandName;
|
|
78
|
-
exports.METHOD_MAP = METHOD_MAP;
|
|
79
|
-
exports.ALL_COMMANDS = ALL_COMMANDS;
|
|
80
|
-
exports.errorFromW3CJsonCode = errorFromW3CJsonCode;
|
|
81
|
-
exports.errorFromCode = exports.errorFromMJSONWPStatusCode = errorFromMJSONWPStatusCode;
|
|
82
|
-
exports.isErrorType = isErrorType;
|
|
83
|
-
exports.errors = errors;
|
|
84
|
-
exports.routeConfiguringFunction = routeConfiguringFunction;
|
|
85
|
-
exports.Protocol = Protocol;
|
|
86
|
-
const {
|
|
87
|
-
STATIC_DIR
|
|
88
|
-
} = staticIndex;
|
|
89
|
-
exports.STATIC_DIR = STATIC_DIR;
|
|
90
|
-
const {
|
|
91
|
-
server
|
|
92
|
-
} = serverIndex;
|
|
93
|
-
exports.server = server;
|
|
94
|
-
const {
|
|
95
|
-
JWProxy
|
|
96
|
-
} = proxyIndex;
|
|
97
|
-
exports.JWProxy = JWProxy;
|
|
98
|
-
const {
|
|
99
|
-
codes: statusCodes,
|
|
100
|
-
getSummaryByCode
|
|
101
|
-
} = statusIndex;
|
|
102
|
-
exports.getSummaryByCode = getSummaryByCode;
|
|
103
|
-
exports.statusCodes = statusCodes;
|
|
104
|
-
const {
|
|
105
|
-
processCapabilities,
|
|
106
|
-
isStandardCap,
|
|
107
|
-
validateCaps
|
|
108
|
-
} = caps;
|
|
109
|
-
exports.validateCaps = validateCaps;
|
|
110
|
-
exports.isStandardCap = isStandardCap;
|
|
111
|
-
exports.processCapabilities = processCapabilities;
|
|
112
|
-
const {
|
|
113
|
-
DEFAULT_WS_PATHNAME_PREFIX
|
|
114
|
-
} = ws;
|
|
115
|
-
exports.DEFAULT_WS_PATHNAME_PREFIX = DEFAULT_WS_PATHNAME_PREFIX;require('source-map-support').install();
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbIkJhc2VEcml2ZXIiLCJkcml2ZXIiLCJEZXZpY2VTZXR0aW5ncyIsIkJBU0VEUklWRVJfSEFORExFRF9TRVRUSU5HUyIsImRldmljZVNldHRpbmdzIiwiUHJvdG9jb2wiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJlcnJvcnMiLCJpc0Vycm9yVHlwZSIsImVycm9yRnJvbU1KU09OV1BTdGF0dXNDb2RlIiwiZXJyb3JGcm9tVzNDSnNvbkNvZGUiLCJBTExfQ09NTUFORFMiLCJNRVRIT0RfTUFQIiwicm91dGVUb0NvbW1hbmROYW1lIiwiTk9fU0VTU0lPTl9JRF9DT01NQU5EUyIsImlzU2Vzc2lvbkNvbW1hbmQiLCJub3JtYWxpemVCYXNlUGF0aCIsImRldGVybWluZVByb3RvY29sIiwicHJvdG9jb2wiLCJTVEFUSUNfRElSIiwic3RhdGljSW5kZXgiLCJzZXJ2ZXIiLCJzZXJ2ZXJJbmRleCIsIkpXUHJveHkiLCJwcm94eUluZGV4IiwiY29kZXMiLCJzdGF0dXNDb2RlcyIsImdldFN1bW1hcnlCeUNvZGUiLCJzdGF0dXNJbmRleCIsInByb2Nlc3NDYXBhYmlsaXRpZXMiLCJpc1N0YW5kYXJkQ2FwIiwidmFsaWRhdGVDYXBzIiwiY2FwcyIsIkRFRkFVTFRfV1NfUEFUSE5BTUVfUFJFRklYIiwid3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQVVBOztBQUNBOztBQW9CQTs7QUFJQTs7QUFLQTs7QUFLQTs7QUFLQTs7QUFLQTs7Ozs7O0FBckRBLE1BQU07QUFBRUEsRUFBQUE7QUFBRixJQUFpQkMsTUFBdkI7O0FBQ0EsTUFBTTtBQUFFQyxFQUFBQSxjQUFGO0FBQWtCQyxFQUFBQTtBQUFsQixJQUFrREMsY0FBeEQ7OztlQUdlSixVOztBQVNmLE1BQU07QUFDSkssRUFBQUEsUUFESTtBQUNNQyxFQUFBQSx3QkFETjtBQUNnQ0MsRUFBQUEsTUFEaEM7QUFDd0NDLEVBQUFBLFdBRHhDO0FBRUpDLEVBQUFBLDBCQUZJO0FBRXdCQyxFQUFBQSxvQkFGeEI7QUFFOENDLEVBQUFBLFlBRjlDO0FBRTREQyxFQUFBQSxVQUY1RDtBQUdKQyxFQUFBQSxrQkFISTtBQUdnQkMsRUFBQUEsc0JBSGhCO0FBR3dDQyxFQUFBQSxnQkFIeEM7QUFJSkMsRUFBQUEsaUJBSkk7QUFJZUMsRUFBQUE7QUFKZixJQUtGQyxRQUxKOzs7Ozs7Ozs7Ozs7OztBQWlCQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBaUJDLFdBQXZCOztBQUlBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFhQyxXQUFuQjs7QUFLQSxNQUFNO0FBQUVDLEVBQUFBO0FBQUYsSUFBY0MsVUFBcEI7O0FBS0EsTUFBTTtBQUFFQyxFQUFBQSxLQUFLLEVBQUVDLFdBQVQ7QUFBc0JDLEVBQUFBO0FBQXRCLElBQTJDQyxXQUFqRDs7O0FBS0EsTUFBTTtBQUFFQyxFQUFBQSxtQkFBRjtBQUF1QkMsRUFBQUEsYUFBdkI7QUFBc0NDLEVBQUFBO0FBQXRDLElBQXVEQyxJQUE3RDs7OztBQUtBLE1BQU07QUFBRUMsRUFBQUE7QUFBRixJQUFpQ0MsRUFBdkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0cmFuc3BpbGU6bWFpblxuXG4vLyBCYXNlRHJpdmVyIGV4cG9ydHNcbmltcG9ydCAqIGFzIGRyaXZlciBmcm9tICcuL2xpYi9iYXNlZHJpdmVyL2RyaXZlcic7XG5pbXBvcnQgKiBhcyBkZXZpY2VTZXR0aW5ncyBmcm9tICcuL2xpYi9iYXNlZHJpdmVyL2RldmljZS1zZXR0aW5ncyc7XG5cbmNvbnN0IHsgQmFzZURyaXZlciB9ID0gZHJpdmVyO1xuY29uc3QgeyBEZXZpY2VTZXR0aW5ncywgQkFTRURSSVZFUl9IQU5ETEVEX1NFVFRJTkdTIH0gPSBkZXZpY2VTZXR0aW5ncztcblxuZXhwb3J0IHsgQmFzZURyaXZlciwgRGV2aWNlU2V0dGluZ3MsIEJBU0VEUklWRVJfSEFORExFRF9TRVRUSU5HUyB9O1xuZXhwb3J0IGRlZmF1bHQgQmFzZURyaXZlcjtcblxuXG4vLyBNSlNPTldQIGV4cG9ydHNcbmltcG9ydCAqIGFzIHByb3RvY29sIGZyb20gJy4vbGliL3Byb3RvY29sJztcbmltcG9ydCB7XG4gIERFRkFVTFRfQkFTRV9QQVRILCBQUk9UT0NPTFNcbn0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcblxuY29uc3Qge1xuICBQcm90b2NvbCwgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLCBlcnJvcnMsIGlzRXJyb3JUeXBlLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsIEFMTF9DT01NQU5EUywgTUVUSE9EX01BUCxcbiAgcm91dGVUb0NvbW1hbmROYW1lLCBOT19TRVNTSU9OX0lEX0NPTU1BTkRTLCBpc1Nlc3Npb25Db21tYW5kLFxuICBub3JtYWxpemVCYXNlUGF0aCwgZGV0ZXJtaW5lUHJvdG9jb2xcbn0gPSBwcm90b2NvbDtcblxuZXhwb3J0IHtcbiAgUHJvdG9jb2wsIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbiwgZXJyb3JzLCBpc0Vycm9yVHlwZSwgUFJPVE9DT0xTLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSwgZXJyb3JGcm9tVzNDSnNvbkNvZGUsIGRldGVybWluZVByb3RvY29sLFxuICBlcnJvckZyb21NSlNPTldQU3RhdHVzQ29kZSBhcyBlcnJvckZyb21Db2RlLCBBTExfQ09NTUFORFMsIE1FVEhPRF9NQVAsXG4gIHJvdXRlVG9Db21tYW5kTmFtZSwgTk9fU0VTU0lPTl9JRF9DT01NQU5EUywgaXNTZXNzaW9uQ29tbWFuZCxcbiAgREVGQVVMVF9CQVNFX1BBVEgsIG5vcm1hbGl6ZUJhc2VQYXRoXG59O1xuXG4vLyBFeHByZXNzIGV4cG9ydHNcbmltcG9ydCAqIGFzIHN0YXRpY0luZGV4IGZyb20gJy4vbGliL2V4cHJlc3Mvc3RhdGljJztcbmNvbnN0IHsgU1RBVElDX0RJUiB9ID0gc3RhdGljSW5kZXg7XG5leHBvcnQgeyBTVEFUSUNfRElSIH07XG5cbmltcG9ydCAqIGFzIHNlcnZlckluZGV4IGZyb20gJy4vbGliL2V4cHJlc3Mvc2VydmVyJztcbmNvbnN0IHsgc2VydmVyIH0gPSBzZXJ2ZXJJbmRleDtcbmV4cG9ydCB7IHNlcnZlciB9O1xuXG4vLyBqc29ud3AtcHJveHkgZXhwb3J0c1xuaW1wb3J0ICogYXMgcHJveHlJbmRleCBmcm9tICcuL2xpYi9qc29ud3AtcHJveHkvcHJveHknO1xuY29uc3QgeyBKV1Byb3h5IH0gPSBwcm94eUluZGV4O1xuZXhwb3J0IHsgSldQcm94eSB9O1xuXG4vLyBqc29ud3Atc3RhdHVzIGV4cG9ydHNcbmltcG9ydCAqIGFzIHN0YXR1c0luZGV4IGZyb20gJy4vbGliL2pzb253cC1zdGF0dXMvc3RhdHVzJztcbmNvbnN0IHsgY29kZXM6IHN0YXR1c0NvZGVzLCBnZXRTdW1tYXJ5QnlDb2RlIH0gPSBzdGF0dXNJbmRleDtcbmV4cG9ydCB7IHN0YXR1c0NvZGVzLCBnZXRTdW1tYXJ5QnlDb2RlIH07XG5cbi8vIFczQyBjYXBhYmlsaXRpZXMgcGFyc2VyXG5pbXBvcnQgKiBhcyBjYXBzIGZyb20gJy4vbGliL2Jhc2Vkcml2ZXIvY2FwYWJpbGl0aWVzJztcbmNvbnN0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgaXNTdGFuZGFyZENhcCwgdmFsaWRhdGVDYXBzIH0gPSBjYXBzO1xuZXhwb3J0IHsgcHJvY2Vzc0NhcGFiaWxpdGllcywgaXNTdGFuZGFyZENhcCwgdmFsaWRhdGVDYXBzIH07XG5cbi8vIFdlYiBzb2NrZXQgaGVscGVyc1xuaW1wb3J0ICogYXMgd3MgZnJvbSAnLi9saWIvZXhwcmVzcy93ZWJzb2NrZXQnO1xuY29uc3QgeyBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCB9ID0gd3M7XG5leHBvcnQgeyBERUZBVUxUX1dTX1BBVEhOQU1FX1BSRUZJWCB9OyJdLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiLi4ifQ==
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
require("source-map-support/register");
|
|
6
|
-
|
|
7
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
|
-
|
|
9
|
-
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
10
|
-
|
|
11
|
-
var _vm = _interopRequireDefault(require("vm"));
|
|
12
|
-
|
|
13
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
14
|
-
|
|
15
|
-
var _webdriverio = require("webdriverio");
|
|
16
|
-
|
|
17
|
-
const W3C_ELEMENT_KEY = 'element-6066-11e4-a52e-4f735466cecf';
|
|
18
|
-
const MJSONWP_ELEMENT_KEY = 'ELEMENT';
|
|
19
|
-
|
|
20
|
-
async function runScript(driverOpts, script, timeout) {
|
|
21
|
-
if (!_lodash.default.isNumber(timeout)) {
|
|
22
|
-
throw new Error('Timeout parameter must be a number');
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const logLevels = ['error', 'warn', 'log'];
|
|
26
|
-
const logs = {};
|
|
27
|
-
const consoleFns = {};
|
|
28
|
-
|
|
29
|
-
for (const level of logLevels) {
|
|
30
|
-
logs[level] = [];
|
|
31
|
-
|
|
32
|
-
consoleFns[level] = (...logMsgs) => logs[level].push(...logMsgs);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const driver = (0, _webdriverio.attach)(driverOpts);
|
|
36
|
-
const fullScript = buildScript(script);
|
|
37
|
-
|
|
38
|
-
const vmCtx = _vm.default.runInNewContext(fullScript, {}, {
|
|
39
|
-
timeout
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
_logger.default.info('Running driver script in Node vm');
|
|
43
|
-
|
|
44
|
-
let result = await vmCtx(driver, consoleFns, _bluebird.default);
|
|
45
|
-
|
|
46
|
-
_logger.default.info('Ensuring driver script result is appropriate type for return');
|
|
47
|
-
|
|
48
|
-
result = coerceScriptResult(result);
|
|
49
|
-
return {
|
|
50
|
-
result,
|
|
51
|
-
logs
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function buildScript(script) {
|
|
56
|
-
return `(async function execute (driver, console, Promise) {
|
|
57
|
-
${script}
|
|
58
|
-
})`;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function coerceScriptResult(obj) {
|
|
62
|
-
try {
|
|
63
|
-
obj = JSON.parse(JSON.stringify(obj));
|
|
64
|
-
} catch (e) {
|
|
65
|
-
_logger.default.warn('Could not convert executeDriverScript to safe response!' + `Result was: ${obj}. Will make it null`);
|
|
66
|
-
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
let res;
|
|
71
|
-
|
|
72
|
-
if (_lodash.default.isPlainObject(obj)) {
|
|
73
|
-
res = {};
|
|
74
|
-
|
|
75
|
-
if (obj[MJSONWP_ELEMENT_KEY] || obj[W3C_ELEMENT_KEY]) {
|
|
76
|
-
if (obj[MJSONWP_ELEMENT_KEY]) {
|
|
77
|
-
res[MJSONWP_ELEMENT_KEY] = obj[MJSONWP_ELEMENT_KEY];
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
if (obj[W3C_ELEMENT_KEY]) {
|
|
81
|
-
res[W3C_ELEMENT_KEY] = obj[W3C_ELEMENT_KEY];
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
return res;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
for (const key of Object.keys(obj)) {
|
|
88
|
-
res[key] = coerceScriptResult(obj[key]);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return res;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (_lodash.default.isArray(obj)) {
|
|
95
|
-
return obj.map(coerceScriptResult);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return obj;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
async function main(driverOpts, script, timeout) {
|
|
102
|
-
let res;
|
|
103
|
-
|
|
104
|
-
try {
|
|
105
|
-
res = {
|
|
106
|
-
success: await runScript(driverOpts, script, timeout)
|
|
107
|
-
};
|
|
108
|
-
} catch (error) {
|
|
109
|
-
res = {
|
|
110
|
-
error: {
|
|
111
|
-
message: error.message,
|
|
112
|
-
stack: error.stack
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
await _bluebird.default.promisify(process.send, {
|
|
118
|
-
context: process
|
|
119
|
-
})(res);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (require.main === module) {
|
|
123
|
-
_logger.default.info('Running driver execution in child process');
|
|
124
|
-
|
|
125
|
-
process.on('message', ({
|
|
126
|
-
driverOpts,
|
|
127
|
-
script,
|
|
128
|
-
timeout
|
|
129
|
-
}) => {
|
|
130
|
-
_logger.default.info('Parameters received from parent process');
|
|
131
|
-
|
|
132
|
-
main(driverOpts, script, timeout);
|
|
133
|
-
});
|
|
134
|
-
}require('source-map-support').install();
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2V4ZWN1dGUtY2hpbGQuanMiXSwibmFtZXMiOlsiVzNDX0VMRU1FTlRfS0VZIiwiTUpTT05XUF9FTEVNRU5UX0tFWSIsInJ1blNjcmlwdCIsImRyaXZlck9wdHMiLCJzY3JpcHQiLCJ0aW1lb3V0IiwiXyIsImlzTnVtYmVyIiwiRXJyb3IiLCJsb2dMZXZlbHMiLCJsb2dzIiwiY29uc29sZUZucyIsImxldmVsIiwibG9nTXNncyIsInB1c2giLCJkcml2ZXIiLCJmdWxsU2NyaXB0IiwiYnVpbGRTY3JpcHQiLCJ2bUN0eCIsInZtIiwicnVuSW5OZXdDb250ZXh0IiwibG9nIiwiaW5mbyIsInJlc3VsdCIsIkIiLCJjb2VyY2VTY3JpcHRSZXN1bHQiLCJvYmoiLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJlIiwid2FybiIsInJlcyIsImlzUGxhaW5PYmplY3QiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwiaXNBcnJheSIsIm1hcCIsIm1haW4iLCJzdWNjZXNzIiwiZXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJwcm9taXNpZnkiLCJwcm9jZXNzIiwic2VuZCIsImNvbnRleHQiLCJyZXF1aXJlIiwibW9kdWxlIiwib24iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBLE1BQU1BLGVBQWUsR0FBRyxxQ0FBeEI7QUFDQSxNQUFNQyxtQkFBbUIsR0FBRyxTQUE1Qjs7QUFFQSxlQUFlQyxTQUFmLENBQTBCQyxVQUExQixFQUFzQ0MsTUFBdEMsRUFBOENDLE9BQTlDLEVBQXVEO0FBQ3JELE1BQUksQ0FBQ0MsZ0JBQUVDLFFBQUYsQ0FBV0YsT0FBWCxDQUFMLEVBQTBCO0FBQ3hCLFVBQU0sSUFBSUcsS0FBSixDQUFVLG9DQUFWLENBQU47QUFDRDs7QUFHRCxRQUFNQyxTQUFTLEdBQUcsQ0FBQyxPQUFELEVBQVUsTUFBVixFQUFrQixLQUFsQixDQUFsQjtBQUNBLFFBQU1DLElB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QUFDUSxNQUFBQSxPQUFPLEVBQUUsTUFBTXRDLFNBQVMsQ0FBQ0MsVUFBRCxFQUFhQyxNQUFiLEVBQXFCQyxPQUFyQjtBQUF6QixLQUFOO0FBQ0QsR0FGRCxDQUVFLE9BQU9vQyxLQUFQLEVBQWM7QUFDZFQsSUFBQUEsR0FBRyxHQUFHO0FBQUNTLE1BQUFBLEtBQUssRUFBRTtBQUFDQyxRQUFBQSxPQUFPLEVBQUVELEtBQUssQ0FBQ0MsT0FBaEI7QUFBeUJDLFFBQUFBLEtBQUssRUFBRUYsS0FBSyxDQUFDRTtBQUF0QztBQUFSLEtBQU47QUFDRDs7QUFDRCxRQUFNbkIsa0JBQUVvQixTQUFGLENBQVlDLE9BQU8sQ0FBQ0MsSUFBcEIsRUFBMEI7QUFBQ0MsSUFBQUEsT0FBTyxFQUFFRjtBQUFWLEdBQTFCLEVBQThDYixHQUE5QyxDQUFOO0FBQ0Q7O0FBRUQsSUFBSWdCLE9BQU8sQ0FBQ1QsSUFBUixLQUFpQlUsTUFBckIsRUFBNkI7QUFDM0I1QixrQkFBSUMsSUFBSixDQUFTLDJDQUFUOztBQUNBdUIsRUFBQUEsT0FBTyxDQUFDSyxFQUFSLENBQVcsU0FBWCxFQUFzQixDQUFDO0FBQUMvQyxJQUFBQSxVQUFEO0FBQWFDLElBQUFBLE1BQWI7QUFBcUJDLElBQUFBO0FBQXJCLEdBQUQsS0FBbUM7QUFDdkRnQixvQkFBSUMsSUFBSixDQUFTLHlDQUFUOztBQUNBaUIsSUFBQUEsSUFBSSxDQUFDcEMsVUFBRCxFQUFhQyxNQUFiLEVBQXFCQyxPQUFyQixDQUFKO0FBQ0QsR0FIRDtBQUlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB2bSBmcm9tICd2bSc7XG5pbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBhdHRhY2ggfSBmcm9tICd3ZWJkcml2ZXJpbyc7XG5cbi8vIGR1cGxpY2F0ZSBkZWZpbmluZyB0aGVzZSBrZXlzIGhlcmUgc28gd2UgZG9uJ3QgbmVlZCB0byByZS1sb2FkIGEgaHVnZSBhcHBpdW1cbi8vIGRlcGVuZGVuY3kgdHJlZSBpbnRvIG1lbW9yeSBqdXN0IHRvIHJ1biBhIHdkaW8gc2NyaXB0XG5jb25zdCBXM0NfRUxFTUVOVF9LRVkgPSAnZWxlbWVudC02MDY2LTExZTQtYTUyZS00ZjczNTQ2NmNlY2YnO1xuY29uc3QgTUpTT05XUF9FTEVNRU5UX0tFWSA9ICdFTEVNRU5UJztcblxuYXN5bmMgZnVuY3Rpb24gcnVuU2NyaXB0IChkcml2ZXJPcHRzLCBzY3JpcHQsIHRpbWVvdXQpIHtcbiAgaWYgKCFfLmlzTnVtYmVyKHRpbWVvdXQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaW1lb3V0IHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gIH1cblxuICAvLyBzZXQgdXAgZmFrZSBsb2dnZXJcbiAgY29uc3QgbG9nTGV2ZWxzID0gWydlcnJvcicsICd3YXJuJywgJ2xvZyddO1xuICBjb25zdCBsb2dzID0ge307XG4gIGNvbnN0IGNvbnNvbGVGbnMgPSB7fTtcbiAgZm9yIChjb25zdCBsZXZlbCBvZiBsb2dMZXZlbHMpIHtcbiAgICBsb2dzW2xldmVsXSA9IFtdO1xuICAgIGNvbnNvbGVGbnNbbGV2ZWxdID0gKC4uLmxvZ01zZ3MpID0+IGxvZ3NbbGV2ZWxdLnB1c2goLi4ubG9nTXNncyk7XG4gIH1cblxuICBjb25zdCBkcml2ZXIgPSBhdHRhY2goZHJpdmVyT3B0cyk7XG5cbiAgY29uc3QgZnVsbFNjcmlwdCA9IGJ1aWxkU2NyaXB0KHNjcmlwdCk7XG4gIC8vIHRoZSB0aW1lb3V0IGhlcmUgd2lsbCBub3QgbWF0dGVyIHJlYWxseSwgYnV0IHNldCBpdCBhbnl3YXkgdG8gYmUgb24gdGhlXG4gIC8vIHNhZmUgc2lkZVxuICBjb25zdCB2bUN0eCA9IHZtLnJ1bkluTmV3Q29udGV4dChmdWxsU2NyaXB0LCB7fSwge3RpbWVvdXR9KTtcblxuICAvLyBydW4gdGhlIGRyaXZlciBzY3JpcHQsIGdpdmluZyB1c2VyIGFjY2VzcyB0byB0aGUgZHJpdmVyIG9iamVjdCwgYSBmYWtlXG4gIC8vIGNvbnNvbGUgbG9nZ2VyLCBhbmQgYSBwcm9taXNlIGxpYnJhcnlcbiAgbG9nLmluZm8oJ1J1bm5pbmcgZHJpdmVyIHNjcmlwdCBpbiBOb2RlIHZtJyk7XG4gIGxldCByZXN1bHQgPSBhd2FpdCB2bUN0eChkcml2ZXIsIGNvbnNvbGVGbnMsIEIpO1xuXG4gIGxvZy5pbmZvKCdFbnN1cmluZyBkcml2ZXIgc2NyaXB0IHJlc3VsdCBpcyBhcHByb3ByaWF0ZSB0eXBlIGZvciByZXR1cm4nKTtcbiAgcmVzdWx0ID0gY29lcmNlU2NyaXB0UmVzdWx0KHJlc3VsdCk7XG4gIHJldHVybiB7cmVzdWx0LCBsb2dzfTtcbn1cblxuLyoqXG4gKiBFbWJlZCBhIHVzZXItZ2VuZXJhdGVkIHNjcmlwdCBpbnNpZGUgYSBtZXRob2Qgd2hpY2ggdGFrZXMgb25seSB0aGVcbiAqIHByZWRldGVybWluZWQgb2JqZWN0cyB3ZSBzcGVjaWZ5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNjcmlwdCAtIHRoZSBqYXZhc2NyaXB0IHRvIGV4ZWN1dGVcbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmd9IC0gdGhlIGZ1bGwgc2NyaXB0IHRvIGV4ZWN1dGVcbiAqL1xuZnVuY3Rpb24gYnVpbGRTY3JpcHQgKHNjcmlwdCkge1xuICByZXR1cm4gYChhc3luYyBmdW5jdGlvbiBleGVjdXRlIChkcml2ZXIsIGNvbnNvbGUsIFByb21pc2UpIHtcbiAgICAke3NjcmlwdH1cbiAgfSlgO1xufVxuXG4vKipcbiAqIFdlIGNhbiBnZXQgYW55IG1hbm5lciBvZiBjcmF6eSB0aGluZyBiYWNrIGZyb20gYSB2bSBleGVjdXRpbmcgdW50cnVzdGVkXG4gKiBjb2RlLiBXZSBtaWdodCBhbHNvIGdldCBXZWJkcml2ZXJJTyBvYmplY3RzIHRoYXQgYXJlbid0IHN1aXRhYmxlIGZvciBKU09OXG4gKiByZXNwb25zZS4gU28gbWFrZSBzdXJlIHdlIGNvbnZlcnQgdGhlIHRoaW5ncyB3ZSBrbm93IGFib3V0IHRvIHRoZWlyXG4gKiBhcHByb3ByaWF0ZSByZXNwb25zZSBmb3JtYXQsIGFuZCBzcXVhc2ggb3RoZXIgd2VpcmQgdGhpbmdzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSBvYmplY3QgdG8gY29udmVydCBhbmQgc2FuaXRpemVcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gc2FmZWx5IGNvbnZlcnRlZCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29lcmNlU2NyaXB0UmVzdWx0IChvYmopIHtcbiAgLy8gZmlyc3QgZW5zdXJlIG9iaiBpcyBvZiBhIHR5cGUgdGhhdCBjYW4gYmUgSlNPTiBlbmNvZGVkIHNhZmVseS4gVGhpcyB3aWxsXG4gIC8vIGdldCByaWQgb2YgY3VzdG9tIG9iamVjdHMsIGZ1bmN0aW9ucywgZXRjLi4uIGFuZCB0dXJuIHRoZW0gaW50byBQT0pPc1xuICB0cnkge1xuICAgIG9iaiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2cud2FybignQ291bGQgbm90IGNvbnZlcnQgZXhlY3V0ZURyaXZlclNjcmlwdCB0byBzYWZlIHJlc3BvbnNlIScgK1xuICAgICAgICAgICAgIGBSZXN1bHQgd2FzOiAke29ian0uIFdpbGwgbWFrZSBpdCBudWxsYCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgcmVzO1xuXG4gIC8vIG5vdyB3ZSBiZWdpbiBvdXIgcmVjdXJzaXZlIGNhc2Ugb3B0aW9uc1xuICBpZiAoXy5pc1BsYWluT2JqZWN0KG9iaikpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGFuIG9iamVjdCwgaXQncyBlaXRoZXIgYW4gZWxlbWVudCBvYmplY3Qgb3Igc29tZXRoaW5nIGVsc2VcbiAgICAvLyB3ZWJkcml2ZXJpbyBoYXMgbm8gbW9uYWRpYyBvYmplY3QgdHlwZXMgb3RoZXIgdGhhbiBlbGVtZW50IGFuZCBkcml2ZXIsXG4gICAgLy8gYW5kIHdlIGRvbid0IHdhbnQgdG8gYWxsb3cgc3BlY2lhbCBjYXNpbmcgcmV0dXJuIG9mIGRyaXZlclxuICAgIHJlcyA9IHt9O1xuXG4gICAgaWYgKG9ialtNSlNPTldQX0VMRU1FTlRfS0VZXSB8fCBvYmpbVzNDX0VMRU1FTlRfS0VZXSkge1xuICAgICAgLy8gaWYgaXQncyBhbiBlbGVtZW50IG9iamVjdCwgY2xlYXIgb3V0IGFueXRoaW5nIHRoYXQncyBub3QgdGhlIGtleSwgYW5kXG4gICAgICAvLyB0aGVuIHJldHVybiB0aGUgb2JqZWN0XG4gICAgICBpZiAob2JqW01KU09OV1BfRUxFTUVOVF9LRVldKSB7XG4gICAgICAgIHJlc1tNSlNPTldQX0VMRU1FTlRfS0VZXSA9IG9ialtNSlNPTldQX0VMRU1FTlRfS0VZXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9ialtXM0NfRUxFTUVOVF9LRVldKSB7XG4gICAgICAgIHJlc1tXM0NfRUxFTUVOVF9LRVldID0gb2JqW1czQ19FTEVNRU5UX0tFWV07XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIG90aGVyd2lzZSwgcmVjdXJzZSBpbnRvIHRoZSBvYmplY3RcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICByZXNba2V5XSA9IGNvZXJjZVNjcmlwdFJlc3VsdChvYmpba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvLyBpbiB0aGUgY2FlIG9mIGFuIGFycmF5LCBqdXN0IHJlY3Vyc2UgaW50byB0aGUgaXRlbXNcbiAgaWYgKF8uaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoY29lcmNlU2NyaXB0UmVzdWx0KTtcbiAgfVxuXG4gIC8vIGJhc2UgY2FzZSwgaWYgaXQncyBub3QgYW4gb2JqZWN0IG9yIGFycmF5LCByZXR1cm4gc3RyYWlnaHRhd2F5XG4gIHJldHVybiBvYmo7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4gKGRyaXZlck9wdHMsIHNjcmlwdCwgdGltZW91dCkge1xuICBsZXQgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IHtzdWNjZXNzOiBhd2FpdCBydW5TY3JpcHQoZHJpdmVyT3B0cywgc2NyaXB0LCB0aW1lb3V0KX07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzID0ge2Vycm9yOiB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfX07XG4gIH1cbiAgYXdhaXQgQi5wcm9taXNpZnkocHJvY2Vzcy5zZW5kLCB7Y29udGV4dDogcHJvY2Vzc30pKHJlcyk7XG59XG5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBsb2cuaW5mbygnUnVubmluZyBkcml2ZXIgZXhlY3V0aW9uIGluIGNoaWxkIHByb2Nlc3MnKTtcbiAgcHJvY2Vzcy5vbignbWVzc2FnZScsICh7ZHJpdmVyT3B0cywgc2NyaXB0LCB0aW1lb3V0fSkgPT4ge1xuICAgIGxvZy5pbmZvKCdQYXJhbWV0ZXJzIHJlY2VpdmVkIGZyb20gcGFyZW50IHByb2Nlc3MnKTtcbiAgICBtYWluKGRyaXZlck9wdHMsIHNjcmlwdCwgdGltZW91dCk7XG4gIH0pO1xufVxuIl0sImZpbGUiOiJsaWIvYmFzZWRyaXZlci9jb21tYW5kcy9leGVjdXRlLWNoaWxkLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uIn0=
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.default = void 0;
|
|
9
|
-
|
|
10
|
-
require("source-map-support/register");
|
|
11
|
-
|
|
12
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
13
|
-
|
|
14
|
-
var _path = _interopRequireDefault(require("path"));
|
|
15
|
-
|
|
16
|
-
var _child_process = _interopRequireDefault(require("child_process"));
|
|
17
|
-
|
|
18
|
-
var _logger = _interopRequireDefault(require("../logger"));
|
|
19
|
-
|
|
20
|
-
var _bluebird = _interopRequireDefault(require("bluebird"));
|
|
21
|
-
|
|
22
|
-
const FEAT_FLAG = 'execute_driver_script';
|
|
23
|
-
const DEFAULT_SCRIPT_TIMEOUT = 1000 * 60 * 60;
|
|
24
|
-
const SCRIPT_TYPE_WDIO = 'webdriverio';
|
|
25
|
-
let commands = {};
|
|
26
|
-
|
|
27
|
-
commands.executeDriverScript = async function (script, scriptType = 'webdriverio', timeout = DEFAULT_SCRIPT_TIMEOUT) {
|
|
28
|
-
if (!this.isFeatureEnabled(FEAT_FLAG)) {
|
|
29
|
-
throw new Error(`Execute driver script functionality is not available ` + `unless server is started with --allow-insecure including ` + `the '${FEAT_FLAG}' flag, e.g., --allow-insecure=${FEAT_FLAG}`);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (scriptType !== SCRIPT_TYPE_WDIO) {
|
|
33
|
-
throw new Error(`Only the '${SCRIPT_TYPE_WDIO}' script type is currently supported`);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (!this.opts.address || !this.opts.port) {
|
|
37
|
-
throw new Error('Address or port of running server were not defined; this ' + 'is required. This is probably a programming error in the driver');
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
if (!_lodash.default.isNumber(timeout)) {
|
|
41
|
-
throw new Error('Timeout parameter must be a number');
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const driverOpts = {
|
|
45
|
-
sessionId: this.sessionId,
|
|
46
|
-
protocol: 'http',
|
|
47
|
-
hostname: this.opts.address,
|
|
48
|
-
port: this.opts.port,
|
|
49
|
-
path: this.basePath,
|
|
50
|
-
isW3C: this.isW3CProtocol(),
|
|
51
|
-
isMobile: true,
|
|
52
|
-
capabilities: this.caps
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
_logger.default.info(`Constructed webdriverio driver options; W3C mode is ${driverOpts.isW3C ? 'on' : 'off'}`);
|
|
56
|
-
|
|
57
|
-
const childScript = _path.default.join(__dirname, 'execute-child.js');
|
|
58
|
-
|
|
59
|
-
_logger.default.info(`Forking process to run webdriver script as child using ${childScript}`);
|
|
60
|
-
|
|
61
|
-
const scriptProc = _child_process.default.fork(childScript);
|
|
62
|
-
|
|
63
|
-
let timeoutCanceled = false;
|
|
64
|
-
|
|
65
|
-
try {
|
|
66
|
-
const timeoutStart = Date.now();
|
|
67
|
-
|
|
68
|
-
const waitForResult = async function () {
|
|
69
|
-
const resPromise = new _bluebird.default(res => {
|
|
70
|
-
scriptProc.on('message', res);
|
|
71
|
-
});
|
|
72
|
-
const res = await resPromise;
|
|
73
|
-
|
|
74
|
-
_logger.default.info('Received execute driver script result from child process, shutting it down');
|
|
75
|
-
|
|
76
|
-
if (res.error) {
|
|
77
|
-
throw new Error(res.error.message);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return res.success;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const waitForTimeout = async function () {
|
|
84
|
-
while (!timeoutCanceled && Date.now() - timeoutStart < timeout) {
|
|
85
|
-
await _bluebird.default.delay(500);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
if (timeoutCanceled) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
throw new Error(`Execute driver script timed out after ${timeout}ms. ` + `You can adjust this with the 'timeout' parameter.`);
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
_logger.default.info('Sending driver and script data to child');
|
|
96
|
-
|
|
97
|
-
scriptProc.send({
|
|
98
|
-
driverOpts,
|
|
99
|
-
script,
|
|
100
|
-
timeout
|
|
101
|
-
});
|
|
102
|
-
return await _bluebird.default.race([waitForResult(), waitForTimeout()]);
|
|
103
|
-
} catch (err) {
|
|
104
|
-
throw new Error(`Could not execute driver script. Original error was: ${err}`);
|
|
105
|
-
} finally {
|
|
106
|
-
timeoutCanceled = true;
|
|
107
|
-
|
|
108
|
-
_logger.default.info('Disconnecting from and killing driver script child proc');
|
|
109
|
-
|
|
110
|
-
scriptProc.disconnect();
|
|
111
|
-
scriptProc.kill();
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
var _default = commands;
|
|
116
|
-
exports.default = _default;require('source-map-support').install();
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpYi9iYXNlZHJpdmVyL2NvbW1hbmRzL2V4ZWN1dGUuanMiXSwibmFtZXMiOlsiRkVBVF9GTEFHIiwiREVGQVVMVF9TQ1JJUFRfVElNRU9VVCIsIlNDUklQVF9UWVBFX1dESU8iLCJjb21tYW5kcyIsImV4ZWN1dGVEcml2ZXJTY3JpcHQiLCJzY3JpcHQiLCJzY3JpcHRUeXBlIiwidGltZW91dCIsImlzRmVhdHVyZUVuYWJsZWQiLCJFcnJvciIsIm9wdHMiLCJhZGRyZXNzIiwicG9ydCIsIl8iLCJpc051bWJlciIsImRyaXZlck9wdHMiLCJzZXNzaW9uSWQiLCJwcm90b2NvbCIsImhvc3RuYW1lIiwicGF0aCIsImJhc2VQYXRoIiwiaXNXM0MiLCJpc1czQ1Byb3RvY29sIiwiaXNNb2JpbGUiLCJjYXBhYmlsaXRpZXMiLCJjYXBzIiwibG9nIiwiaW5mbyIsImNoaWxkU2NyaXB0Iiwiam9pbiIsIl9fZGlybmFtZSIsInNjcmlwdFByb2MiLCJjcCIsImZvcmsiLCJ0aW1lb3V0Q2FuY2VsZWQiLCJ0aW1lb3V0U3RhcnQiLCJEYXRlIiwibm93Iiwid2FpdEZvclJlc3VsdCIsInJlc1Byb21pc2UiLCJCIiwicmVzIiwib24iLCJlcnJvciIsIm1lc3NhZ2UiLCJzdWNjZXNzIiwid2FpdEZvclRpbWVvdXQiLCJkZWxheSIsInNlbmQiLCJyYWNlIiwiZXJyIiwiZGlzY29ubmVjdCIsImtpbGwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTUEsU0FBUyxHQUFHLHVCQUFsQjtBQUNBLE1BQU1DLHNCQUFzQixHQUFHLE9BQU8sRUFBUCxHQUFZLEVBQTNDO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsYUFBekI7QUFHQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjs7QUFjQUEsUUFBUSxDQUFDQyxtQkFBVCxHQUErQixnQkFBZ0JDLE1BQWhCLEVBQXdCQyxVQUFVLEdBQUcsYUFBckMsRUFDN0JDLE9BQU8sR0FBR04sc0JBRG1CLEVBQ0s7QUFFbEMsTUFBSSxDQUFDLEtBQUtPLGdCQUFMLENBQXNCUixTQUF0QixDQUFMLEVBQXVDO0FBQ3JDLFVBQU0sSUFBSVMsS0FBSixDQUFXLHVEQUFELEdBQ0MsMkRBREQsR0FFQyxRQUFPVCxTQUFVLGtDQUFpQ0EsU0FBVSxFQUZ2RSxDQUFOO0FBR0Q7O0FBRUQsTUFBSU0sVUFBVSxLQUFLSixnQkFBbkIsRUFBcUM7QUFDbkMsVUFBTSxJQUFJTyxLQUFKLENBQVcsYUFBWVAsZ0JBQWlCLHNDQUF4QyxDQUFOO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDLEtBQUtRLElBQUwsQ0FBVUMsT0FBWCxJQUFzQixDQUFDLEtBQUtELElBQUwsQ0FBVUUsSUFBckMsRUFBMkM7QUFDekMsVUFBTSxJQUFJSCxLQUFKLENBQVUsOERBQ0EsaUVBRFYsQ0FBTjtBQUVEOztBQUVELE1BQUksQ0FBQ0ksZ0JBQUVDLFFBQUYsQ0FBV1AsT0FBWCxDQUFMLEVBQTBCO0FBQ3hCLFVBQU0sSUFBSUUsS0FBSixDQUFVLG9DQUFWLENBQU47QUFDRDs7QUFFRCxRQUFNTSxVQUFVLEdBQUc7QUFDakJDLElBQUFBLFNBQVMsRUFBRSxLQUFLQSxTQURDO0FBRWpCQyxJQUFBQSxRQUFRLEVBQUUsTUFGTztBQUdqQkMsSUFBQUEsUUFBUSxFQUFFLEtBQUtSLElBQUwsQ0FBVUMsT0FISDtBQUlqQkMsSUFBQUEsSUFBSSxFQUFFLEtBQUtGLElBQUwsQ0FBVUUsSUFKQztBQUtqQk8sSUFBQUEsSUFBSSxFQUFFLEtBQUtDLFFBTE07QUFNakJDLElBQUFBLEtBQUssRUFBRSxLQUFLQyxhQUFMLEVBTlU7QUFPakJDLElBQUFBLFFBQVEsRUFBRSxJQVBPO0FBUWpCQyxJQUFBQSxZQUFZLEVBQUUsS0FBS0M7QUFSRixHQUFuQjs7QUFVQUMsa0JBQUlDLElBQUosQ0FBVSx1REFBc0RaLFVBQVUsQ0FBQ00sS0FBWCxHQUFtQixJQUFuQixHQUEwQixLQUFNLEVBQWhHOztBQUlBLFFBQU1PLFdBQVcsR0FBR1QsY0FBS1UsSUFBTCxDQUFVQyxTQUFWLEVBQXFCLGtCQUFyQixDQUFwQjs7QUFDQUosa0JBQUlDLElBQUosQ0FBVSwwREFBeURDLFdBQVksRUFBL0U7O0FBQ0EsUUFBTUcsVUFBVSxHQUFHQyx1QkFBR0MsSUFBSCxDQUFRTCxXQUFSLENBQW5COztBQUlBLE1BQUlNLGVBQWUsR0FBRyxLQUF0Qjs7QUFFQSxNQUFJO0FBQ0YsVUFBTUMsWUFBWSxHQUFHQyxJQUFJLENBQUNDLEdBQUwsRUFBckI7O0FBR0EsVUFBTUMsYUFBYSxHQUFHLGtCQUFrQjtBQUN0QyxZQUFNQyxVQUFVLEdBQUcsSUFBSUMsaUJBQUosQ0FBT0MsR0FBRCxJQUFTO0FBQ2hDVixRQUFBQSxVQUFVLENBQUNXLEVBQVgsQ0FBYyxTQUFkLEVBQXlCRCxHQUF6QjtBQUNELE9BRmtCLENBQW5CO0FBSUEsWUFBTUEsR0FBRyxHQUFHLE1BQU1GLFVBQWxCOztBQUNBYixzQkFBSUMsSUFBSixDQUFTLDRFQUFUOztBQUVBLFVBQUljLEdBQUcsQ0FBQ0UsS0FBUixFQUFlO0FBQ2IsY0FBTSxJQUFJbEMsS0FBSixDQUFVZ0MsR0FBRyxDQUFDRSxLQUFKLENBQVVDLE9BQXBCLENBQU47QUFDRDs7QUFFRCxhQUFPSCxHQUFHLENBQUNJLE9BQVg7QUFDRCxLQWJEOztBQWtCQSxVQUFNQyxjQUFjLEdBQUcsa0JBQWtCO0FBQ3ZDLGFBQU8sQ0FBQ1osZUFBRCxJQUFxQkUsSUFBSSxDQUFDQyxHQUFMLEtBQWFGLFlBQWQsR0FBOEI1QixPQUF6RCxFQUFrRTtBQUNoRSxjQUFNaUMsa0JBQUVPLEtBQUYsQ0FBUSxHQUFSLENBQU47QUFDRDs7QUFFRCxVQUFJYixlQUFKLEVBQXFCO0FBQ25CO0FBQ0Q7O0FBRUQsWUFBTSxJQUFJekIsS0FBSixDQUFXLHlDQUF3Q0YsT0FBUSxNQUFqRCxHQUNDLG1EQURYLENBQU47QUFFRCxLQVhEOztBQWVBbUIsb0JBQUlDLElBQUosQ0FBUyx5Q0FBVDs7QUFDQUksSUFBQUEsVUFBVSxDQUFDaUIsSUFBWCxDQUFnQjtBQUFDakMsTUFBQUEsVUFBRDtBQUFhVixNQUFBQSxNQUFiO0FBQXFCRSxNQUFBQTtBQUFyQixLQUFoQjtBQUdBLFdBQU8sTUFBTWlDLGtCQUFFUyxJQUFGLENBQU8sQ0FBQ1gsYUFBYSxFQUFkLEVBQWtCUSxjQUFjLEVBQWhDLENBQVAsQ0FBYjtBQUNELEdBMUNELENBMENFLE9BQU9JLEdBQVAsRUFBWTtBQUNaLFVBQU0sSUFBSXpDLEtBQUosQ0FBVyx3REFBdUR5QyxHQUFJLEVBQXRFLENBQU47QUFDRCxHQTVDRCxTQTRDVTtBQUdSaEIsSUFBQUEsZUFBZSxHQUFHLElBQWxCOztBQUVBUixvQkFBSUMsSUFBSixDQUFTLHlEQUFUOztBQUNBSSxJQUFBQSxVQUFVLENBQUNvQixVQUFYO0FBQ0FwQixJQUFBQSxVQUFVLENBQUNxQixJQUFYO0FBQ0Q7QUFDRixDQWpHRDs7ZUFvR2VqRCxRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG5jb25zdCBGRUFUX0ZMQUcgPSAnZXhlY3V0ZV9kcml2ZXJfc2NyaXB0JztcbmNvbnN0IERFRkFVTFRfU0NSSVBUX1RJTUVPVVQgPSAxMDAwICogNjAgKiA2MDsgLy8gZGVmYXVsdCB0byAxIGhvdXIgdGltZW91dFxuY29uc3QgU0NSSVBUX1RZUEVfV0RJTyA9ICd3ZWJkcml2ZXJpbyc7XG4vLyBUT0RPIGFkZCB3ZCBzY3JpcHQgdHlwZSBhdCBzb21lIHBvaW50XG5cbmxldCBjb21tYW5kcyA9IHt9O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIHRha2VzIGEgc3RyaW5nIHdoaWNoIGlzIGV4ZWN1dGVkIGFzIGphdmFzY3JpcHQgaW4gdGhlIGNvbnRleHQgb2ZcbiAqIGEgbmV3IG5vZGVqcyBWTSwgYW5kIHdoaWNoIGhhcyBhdmFpbGFibGUgYSB3ZWJkcml2ZXJpbyBkcml2ZXIgb2JqZWN0LCBoYXZpbmdcbiAqIGFscmVhZHkgYmVlbiBhdHRhY2hlZCB0byB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc2Vzc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0IC0gdGhlIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRyaXZlciBzY3JpcHQgdG8gcnVuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NjcmlwdFR5cGU9J3dlYmRyaXZlcmlvJ10gLSB0aGUgbmFtZSBvZiB0aGUgZHJpdmVyIHNjcmlwdFxuICogbGlicmFyeSAoY3VycmVudGx5IG9ubHkgd2ViZHJpdmVyaW8gaXMgc3VwcG9ydGVkKVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IC0gYSBKU09OaWZpYWJsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXR1cm4gdmFsdWUgb2ZcbiAqIHRoZSBzY3JpcHRcbiAqL1xuY29tbWFuZHMuZXhlY3V0ZURyaXZlclNjcmlwdCA9IGFzeW5jIGZ1bmN0aW9uIChzY3JpcHQsIHNjcmlwdFR5cGUgPSAnd2ViZHJpdmVyaW8nLFxuICB0aW1lb3V0ID0gREVGQVVMVF9TQ1JJUFRfVElNRU9VVCkge1xuXG4gIGlmICghdGhpcy5pc0ZlYXR1cmVFbmFibGVkKEZFQVRfRkxBRykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4ZWN1dGUgZHJpdmVyIHNjcmlwdCBmdW5jdGlvbmFsaXR5IGlzIG5vdCBhdmFpbGFibGUgYCArXG4gICAgICAgICAgICAgICAgICAgIGB1bmxlc3Mgc2VydmVyIGlzIHN0YXJ0ZWQgd2l0aCAtLWFsbG93LWluc2VjdXJlIGluY2x1ZGluZyBgICtcbiAgICAgICAgICAgICAgICAgICAgYHRoZSAnJHtGRUFUX0ZMQUd9JyBmbGFnLCBlLmcuLCAtLWFsbG93LWluc2VjdXJlPSR7RkVBVF9GTEFHfWApO1xuICB9XG5cbiAgaWYgKHNjcmlwdFR5cGUgIT09IFNDUklQVF9UWVBFX1dESU8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9ubHkgdGhlICcke1NDUklQVF9UWVBFX1dESU99JyBzY3JpcHQgdHlwZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkYCk7XG4gIH1cblxuICBpZiAoIXRoaXMub3B0cy5hZGRyZXNzIHx8ICF0aGlzLm9wdHMucG9ydCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWRkcmVzcyBvciBwb3J0IG9mIHJ1bm5pbmcgc2VydmVyIHdlcmUgbm90IGRlZmluZWQ7IHRoaXMgJyArXG4gICAgICAgICAgICAgICAgICAgICdpcyByZXF1aXJlZC4gVGhpcyBpcyBwcm9iYWJseSBhIHByb2dyYW1taW5nIGVycm9yIGluIHRoZSBkcml2ZXInKTtcbiAgfVxuXG4gIGlmICghXy5pc051bWJlcih0aW1lb3V0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGltZW91dCBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlcicpO1xuICB9XG5cbiAgY29uc3QgZHJpdmVyT3B0cyA9IHtcbiAgICBzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuICAgIHByb3RvY29sOiAnaHR0cCcsIC8vIEFwcGl1bSB3b24ndCBldmVyIGJlIGJlaGluZCBzc2wgbG9jYWxseVxuICAgIGhvc3RuYW1lOiB0aGlzLm9wdHMuYWRkcmVzcyxcbiAgICBwb3J0OiB0aGlzLm9wdHMucG9ydCxcbiAgICBwYXRoOiB0aGlzLmJhc2VQYXRoLFxuICAgIGlzVzNDOiB0aGlzLmlzVzNDUHJvdG9jb2woKSxcbiAgICBpc01vYmlsZTogdHJ1ZSxcbiAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2Fwc1xuICB9O1xuICBsb2cuaW5mbyhgQ29uc3RydWN0ZWQgd2ViZHJpdmVyaW8gZHJpdmVyIG9wdGlvbnM7IFczQyBtb2RlIGlzICR7ZHJpdmVyT3B0cy5pc1czQyA/ICdvbicgOiAnb2ZmJ31gKTtcblxuXG4gIC8vIGZvcmsgdGhlIGV4ZWN1dGlvbiBzY3JpcHQgYXMgYSBjaGlsZCBwcm9jZXNzXG4gIGNvbnN0IGNoaWxkU2NyaXB0ID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2V4ZWN1dGUtY2hpbGQuanMnKTtcbiAgbG9nLmluZm8oYEZvcmtpbmcgcHJvY2VzcyB0byBydW4gd2ViZHJpdmVyIHNjcmlwdCBhcyBjaGlsZCB1c2luZyAke2NoaWxkU2NyaXB0fWApO1xuICBjb25zdCBzY3JpcHRQcm9jID0gY3AuZm9yayhjaGlsZFNjcmlwdCk7XG5cbiAgLy8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlIGhhdmUgY2FuY2VsZWQgdGhlIHNjcmlwdCB0aW1lb3V0LCBzbyB3ZSBjYW4gc3RvcFxuICAvLyB3YWl0aW5nIGZvciBpdCBhbmQgYWxsb3cgdGhpcyBwcm9jZXNzIHRvIGZpbmlzaCBncmFjZWZ1bGx5XG4gIGxldCB0aW1lb3V0Q2FuY2VsZWQgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHRpbWVvdXRTdGFydCA9IERhdGUubm93KCk7XG5cbiAgICAvLyBwcm9taXNlIHRoYXQgZGVhbHMgd2l0aCB0aGUgcmVzdWx0IGZyb20gdGhlIGNoaWxkIHByb2Nlc3NcbiAgICBjb25zdCB3YWl0Rm9yUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzUHJvbWlzZSA9IG5ldyBCKChyZXMpID0+IHtcbiAgICAgICAgc2NyaXB0UHJvYy5vbignbWVzc2FnZScsIHJlcyk7IC8vIHRoaXMgaXMgbm9kZSBJUENcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCByZXNQcm9taXNlO1xuICAgICAgbG9nLmluZm8oJ1JlY2VpdmVkIGV4ZWN1dGUgZHJpdmVyIHNjcmlwdCByZXN1bHQgZnJvbSBjaGlsZCBwcm9jZXNzLCBzaHV0dGluZyBpdCBkb3duJyk7XG5cbiAgICAgIGlmIChyZXMuZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5lcnJvci5tZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcy5zdWNjZXNzO1xuICAgIH07XG5cbiAgICAvLyBwcm9taXNlIHRoYXQgd2FpdHMgdXAgdG8gdGhlIHRpbWVvdXQgYW5kIHRocm93cyBhbiBlcnJvciBpZiBzbywgb3IgZG9lc1xuICAgIC8vIG5vdGhpbmcgaWYgdGhlIHRpbWVvdXQgaXMgY2FuY2VsZWQgYmVjYXVzZSB3ZSBnb3QgYSByZXN1bHQgZnJvbSB0aGVcbiAgICAvLyBjaGlsZCBzY3JpcHRcbiAgICBjb25zdCB3YWl0Rm9yVGltZW91dCA9IGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHdoaWxlICghdGltZW91dENhbmNlbGVkICYmIChEYXRlLm5vdygpIC0gdGltZW91dFN0YXJ0KSA8IHRpbWVvdXQpIHtcbiAgICAgICAgYXdhaXQgQi5kZWxheSg1MDApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGltZW91dENhbmNlbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeGVjdXRlIGRyaXZlciBzY3JpcHQgdGltZWQgb3V0IGFmdGVyICR7dGltZW91dH1tcy4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgYFlvdSBjYW4gYWRqdXN0IHRoaXMgd2l0aCB0aGUgJ3RpbWVvdXQnIHBhcmFtZXRlci5gKTtcbiAgICB9O1xuXG4gICAgLy8gbm93IHRoYXQgdGhlIGNoaWxkIHNjcmlwdCBpcyBhbGl2ZSwgc2VuZCBpdCB0aGUgZGF0YSBpdCBuZWVkcyB0byBzdGFydFxuICAgIC8vIHJ1bm5pbmcgdGhlIGRyaXZlciBzY3JpcHRcbiAgICBsb2cuaW5mbygnU2VuZGluZyBkcml2ZXIgYW5kIHNjcmlwdCBkYXRhIHRvIGNoaWxkJyk7XG4gICAgc2NyaXB0UHJvYy5zZW5kKHtkcml2ZXJPcHRzLCBzY3JpcHQsIHRpbWVvdXR9KTtcblxuICAgIC8vIGFuZCBzZXQgdXAgYSByYWNlIGJldHdlZW4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIGNoaWxkIGFuZCB0aGUgdGltZW91dFxuICAgIHJldHVybiBhd2FpdCBCLnJhY2UoW3dhaXRGb3JSZXN1bHQoKSwgd2FpdEZvclRpbWVvdXQoKV0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBleGVjdXRlIGRyaXZlciBzY3JpcHQuIE9yaWdpbmFsIGVycm9yIHdhczogJHtlcnJ9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gZW5zdXJlIHdlIGFsd2F5cyBjYW5jZWwgdGhlIHRpbWVvdXQgc28gdGhhdCB0aGUgdGltZW91dCBwcm9taXNlIHN0b3BzXG4gICAgLy8gc3Bpbm5pbmcgYW5kIGFsbG93cyB0aGlzIHByb2Nlc3MgdG8gZGllIGdyYWNlZnVsbHlcbiAgICB0aW1lb3V0Q2FuY2VsZWQgPSB0cnVlO1xuXG4gICAgbG9nLmluZm8oJ0Rpc2Nvbm5lY3RpbmcgZnJvbSBhbmQga2lsbGluZyBkcml2ZXIgc2NyaXB0IGNoaWxkIHByb2MnKTtcbiAgICBzY3JpcHRQcm9jLmRpc2Nvbm5lY3QoKTtcbiAgICBzY3JpcHRQcm9jLmtpbGwoKTtcbiAgfVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBjb21tYW5kcztcbiJdLCJmaWxlIjoibGliL2Jhc2Vkcml2ZXIvY29tbWFuZHMvZXhlY3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLiJ9
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
module.exports = {
|
|
6
|
-
notFind: function () {
|
|
7
|
-
return [];
|
|
8
|
-
}
|
|
9
|
-
};require('source-map-support').install();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9maXh0dXJlcy9jdXN0b20tZWxlbWVudC1maW5kZXItYmFkLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJub3RGaW5kIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUNmQyxFQUFBQSxPQUFPLEVBQUUsWUFBWTtBQUNuQixXQUFPLEVBQVA7QUFDRDtBQUhjLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XG4gIG5vdEZpbmQ6IGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvZml4dHVyZXMvY3VzdG9tLWVsZW1lbnQtZmluZGVyLWJhZC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLiJ9
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
module.exports = {
|
|
6
|
-
find: function (driver, logger, selector, multiple) {
|
|
7
|
-
if (!driver || !driver.opts) {
|
|
8
|
-
throw new Error('Expected driver object');
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
if (!logger || !logger.info) {
|
|
12
|
-
throw new Error('Expected logger object');
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (selector === 'foo') {
|
|
16
|
-
return ['bar'];
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (selector === 'foos') {
|
|
20
|
-
if (multiple) {
|
|
21
|
-
return ['baz1', 'baz2'];
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return ['bar1', 'bar2'];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
if (selector === 'error') {
|
|
28
|
-
throw new Error('This is a plugin error');
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return [];
|
|
32
|
-
}
|
|
33
|
-
};require('source-map-support').install();
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvYmFzZWRyaXZlci9maXh0dXJlcy9jdXN0b20tZWxlbWVudC1maW5kZXIuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsImZpbmQiLCJkcml2ZXIiLCJsb2dnZXIiLCJzZWxlY3RvciIsIm11bHRpcGxlIiwib3B0cyIsIkVycm9yIiwiaW5mbyJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUI7QUFDZkMsRUFBQUEsSUFBSSxFQUFFLFVBQVVDLE1BQVYsRUFBa0JDLE1BQWxCLEVBQTBCQyxRQUExQixFQUFvQ0MsUUFBcEMsRUFBOEM7QUFDbEQsUUFBSSxDQUFDSCxNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDSSxJQUF2QixFQUE2QjtBQUMzQixZQUFNLElBQUlDLEtBQUosQ0FBVSx3QkFBVixDQUFOO0FBQ0Q7O0FBRUQsUUFBSSxDQUFDSixNQUFELElBQVcsQ0FBQ0EsTUFBTSxDQUFDSyxJQUF2QixFQUE2QjtBQUMzQixZQUFNLElBQUlELEtBQUosQ0FBVSx3QkFBVixDQUFOO0FBQ0Q7O0FBRUQsUUFBSUgsUUFBUSxLQUFLLEtBQWpCLEVBQXdCO0FBQ3RCLGFBQU8sQ0FBQyxLQUFELENBQVA7QUFDRDs7QUFFRCxRQUFJQSxRQUFRLEtBQUssTUFBakIsRUFBeUI7QUFDdkIsVUFBSUMsUUFBSixFQUFjO0FBQ1osZUFBTyxDQUFDLE1BQUQsRUFBUyxNQUFULENBQVA7QUFDRDs7QUFFRCxhQUFPLENBQUMsTUFBRCxFQUFTLE1BQVQsQ0FBUDtBQUNEOztBQUVELFFBQUlELFFBQVEsS0FBSyxPQUFqQixFQUEwQjtBQUN4QixZQUFNLElBQUlHLEtBQUosQ0FBVSx3QkFBVixDQUFOO0FBQ0Q7O0FBRUQsV0FBTyxFQUFQO0FBQ0Q7QUEzQmMsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmluZDogZnVuY3Rpb24gKGRyaXZlciwgbG9nZ2VyLCBzZWxlY3RvciwgbXVsdGlwbGUpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBvYmplY3Qtc2hvcnRoYW5kXG4gICAgaWYgKCFkcml2ZXIgfHwgIWRyaXZlci5vcHRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGRyaXZlciBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBpZiAoIWxvZ2dlciB8fCAhbG9nZ2VyLmluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbG9nZ2VyIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gJ2ZvbycpIHtcbiAgICAgIHJldHVybiBbJ2JhciddO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gJ2Zvb3MnKSB7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIFsnYmF6MScsICdiYXoyJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbJ2JhcjEnLCAnYmFyMiddO1xuICAgIH1cblxuICAgIGlmIChzZWxlY3RvciA9PT0gJ2Vycm9yJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGlzIGEgcGx1Z2luIGVycm9yJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuIl0sImZpbGUiOiJ0ZXN0L2Jhc2Vkcml2ZXIvZml4dHVyZXMvY3VzdG9tLWVsZW1lbnQtZmluZGVyLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uIn0=
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import _ from 'lodash';
|
|
2
|
-
import B from 'bluebird';
|
|
3
|
-
import vm from 'vm';
|
|
4
|
-
import log from '../logger';
|
|
5
|
-
import { attach } from 'webdriverio';
|
|
6
|
-
|
|
7
|
-
// duplicate defining these keys here so we don't need to re-load a huge appium
|
|
8
|
-
// dependency tree into memory just to run a wdio script
|
|
9
|
-
const W3C_ELEMENT_KEY = 'element-6066-11e4-a52e-4f735466cecf';
|
|
10
|
-
const MJSONWP_ELEMENT_KEY = 'ELEMENT';
|
|
11
|
-
|
|
12
|
-
async function runScript (driverOpts, script, timeout) {
|
|
13
|
-
if (!_.isNumber(timeout)) {
|
|
14
|
-
throw new Error('Timeout parameter must be a number');
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// set up fake logger
|
|
18
|
-
const logLevels = ['error', 'warn', 'log'];
|
|
19
|
-
const logs = {};
|
|
20
|
-
const consoleFns = {};
|
|
21
|
-
for (const level of logLevels) {
|
|
22
|
-
logs[level] = [];
|
|
23
|
-
consoleFns[level] = (...logMsgs) => logs[level].push(...logMsgs);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const driver = attach(driverOpts);
|
|
27
|
-
|
|
28
|
-
const fullScript = buildScript(script);
|
|
29
|
-
// the timeout here will not matter really, but set it anyway to be on the
|
|
30
|
-
// safe side
|
|
31
|
-
const vmCtx = vm.runInNewContext(fullScript, {}, {timeout});
|
|
32
|
-
|
|
33
|
-
// run the driver script, giving user access to the driver object, a fake
|
|
34
|
-
// console logger, and a promise library
|
|
35
|
-
log.info('Running driver script in Node vm');
|
|
36
|
-
let result = await vmCtx(driver, consoleFns, B);
|
|
37
|
-
|
|
38
|
-
log.info('Ensuring driver script result is appropriate type for return');
|
|
39
|
-
result = coerceScriptResult(result);
|
|
40
|
-
return {result, logs};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Embed a user-generated script inside a method which takes only the
|
|
45
|
-
* predetermined objects we specify
|
|
46
|
-
*
|
|
47
|
-
* @param {string} script - the javascript to execute
|
|
48
|
-
*
|
|
49
|
-
* @return {string} - the full script to execute
|
|
50
|
-
*/
|
|
51
|
-
function buildScript (script) {
|
|
52
|
-
return `(async function execute (driver, console, Promise) {
|
|
53
|
-
${script}
|
|
54
|
-
})`;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* We can get any manner of crazy thing back from a vm executing untrusted
|
|
59
|
-
* code. We might also get WebdriverIO objects that aren't suitable for JSON
|
|
60
|
-
* response. So make sure we convert the things we know about to their
|
|
61
|
-
* appropriate response format, and squash other weird things.
|
|
62
|
-
*
|
|
63
|
-
* @param {Object} obj - object to convert and sanitize
|
|
64
|
-
*
|
|
65
|
-
* @return {Object} - safely converted object
|
|
66
|
-
*/
|
|
67
|
-
function coerceScriptResult (obj) {
|
|
68
|
-
// first ensure obj is of a type that can be JSON encoded safely. This will
|
|
69
|
-
// get rid of custom objects, functions, etc... and turn them into POJOs
|
|
70
|
-
try {
|
|
71
|
-
obj = JSON.parse(JSON.stringify(obj));
|
|
72
|
-
} catch (e) {
|
|
73
|
-
log.warn('Could not convert executeDriverScript to safe response!' +
|
|
74
|
-
`Result was: ${obj}. Will make it null`);
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
let res;
|
|
79
|
-
|
|
80
|
-
// now we begin our recursive case options
|
|
81
|
-
if (_.isPlainObject(obj)) {
|
|
82
|
-
// if we have an object, it's either an element object or something else
|
|
83
|
-
// webdriverio has no monadic object types other than element and driver,
|
|
84
|
-
// and we don't want to allow special casing return of driver
|
|
85
|
-
res = {};
|
|
86
|
-
|
|
87
|
-
if (obj[MJSONWP_ELEMENT_KEY] || obj[W3C_ELEMENT_KEY]) {
|
|
88
|
-
// if it's an element object, clear out anything that's not the key, and
|
|
89
|
-
// then return the object
|
|
90
|
-
if (obj[MJSONWP_ELEMENT_KEY]) {
|
|
91
|
-
res[MJSONWP_ELEMENT_KEY] = obj[MJSONWP_ELEMENT_KEY];
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (obj[W3C_ELEMENT_KEY]) {
|
|
95
|
-
res[W3C_ELEMENT_KEY] = obj[W3C_ELEMENT_KEY];
|
|
96
|
-
}
|
|
97
|
-
return res;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// otherwise, recurse into the object
|
|
101
|
-
for (const key of Object.keys(obj)) {
|
|
102
|
-
res[key] = coerceScriptResult(obj[key]);
|
|
103
|
-
}
|
|
104
|
-
return res;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// in the cae of an array, just recurse into the items
|
|
108
|
-
if (_.isArray(obj)) {
|
|
109
|
-
return obj.map(coerceScriptResult);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// base case, if it's not an object or array, return straightaway
|
|
113
|
-
return obj;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
async function main (driverOpts, script, timeout) {
|
|
117
|
-
let res;
|
|
118
|
-
try {
|
|
119
|
-
res = {success: await runScript(driverOpts, script, timeout)};
|
|
120
|
-
} catch (error) {
|
|
121
|
-
res = {error: {message: error.message, stack: error.stack}};
|
|
122
|
-
}
|
|
123
|
-
await B.promisify(process.send, {context: process})(res);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (require.main === module) {
|
|
127
|
-
log.info('Running driver execution in child process');
|
|
128
|
-
process.on('message', ({driverOpts, script, timeout}) => {
|
|
129
|
-
log.info('Parameters received from parent process');
|
|
130
|
-
main(driverOpts, script, timeout);
|
|
131
|
-
});
|
|
132
|
-
}
|