@appium/base-driver 8.1.2 → 8.2.3

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.
Files changed (70) hide show
  1. package/build/lib/basedriver/capabilities.js +3 -1
  2. package/build/lib/basedriver/commands/index.js +2 -4
  3. package/build/lib/basedriver/driver.js +8 -10
  4. package/build/lib/basedriver/helpers.js +140 -82
  5. package/build/lib/express/express-logging.js +2 -2
  6. package/build/lib/index.js +126 -0
  7. package/build/lib/jsonwp-proxy/protocol-converter.js +2 -5
  8. package/build/lib/jsonwp-proxy/proxy.js +2 -5
  9. package/build/lib/protocol/errors.js +4 -2
  10. package/build/lib/protocol/helpers.js +3 -20
  11. package/build/lib/protocol/index.js +13 -1
  12. package/build/lib/protocol/protocol.js +26 -25
  13. package/build/lib/protocol/routes.js +1 -10
  14. package/build/test/basedriver/capability-specs.js +10 -10
  15. package/build/test/basedriver/commands/event-specs.js +10 -10
  16. package/build/test/basedriver/driver-e2e-specs.js +3 -3
  17. package/build/test/basedriver/driver-e2e-tests.js +6 -223
  18. package/build/test/basedriver/driver-specs.js +3 -3
  19. package/build/test/basedriver/driver-tests.js +6 -6
  20. package/build/test/basedriver/helpers-specs.js +5 -1
  21. package/build/test/basedriver/timeout-specs.js +7 -7
  22. package/build/test/basedriver/websockets-e2e-specs.js +5 -5
  23. package/build/test/express/server-e2e-specs.js +156 -0
  24. package/build/test/express/server-specs.js +151 -0
  25. package/build/test/express/static-specs.js +23 -0
  26. package/build/test/helpers.js +57 -0
  27. package/build/test/jsonwp-proxy/mock-request.js +93 -0
  28. package/build/test/jsonwp-proxy/protocol-converter-specs.js +173 -0
  29. package/build/test/jsonwp-proxy/proxy-e2e-specs.js +61 -0
  30. package/build/test/jsonwp-proxy/proxy-specs.js +294 -0
  31. package/build/test/jsonwp-proxy/url-specs.js +167 -0
  32. package/build/test/jsonwp-status/status-specs.js +36 -0
  33. package/build/test/protocol/errors-specs.js +388 -0
  34. package/build/test/protocol/fake-driver.js +168 -0
  35. package/build/test/protocol/helpers.js +27 -0
  36. package/build/test/protocol/protocol-e2e-specs.js +1182 -0
  37. package/build/test/protocol/routes-specs.js +82 -0
  38. package/build/test/protocol/validator-specs.js +151 -0
  39. package/index.d.ts +5 -3
  40. package/index.js +1 -62
  41. package/lib/basedriver/capabilities.js +3 -0
  42. package/lib/basedriver/commands/index.js +0 -2
  43. package/lib/basedriver/driver.js +6 -26
  44. package/lib/basedriver/helpers.js +202 -85
  45. package/lib/express/express-logging.js +1 -1
  46. package/lib/index.js +64 -0
  47. package/lib/jsonwp-proxy/protocol-converter.js +1 -5
  48. package/lib/jsonwp-proxy/proxy.js +1 -3
  49. package/lib/protocol/errors.js +1 -1
  50. package/lib/protocol/helpers.js +5 -25
  51. package/lib/protocol/index.js +3 -1
  52. package/lib/protocol/protocol.js +26 -31
  53. package/lib/protocol/routes.js +0 -3
  54. package/package.json +8 -16
  55. package/test/basedriver/capability-specs.js +1 -1
  56. package/test/basedriver/commands/event-specs.js +1 -1
  57. package/test/basedriver/driver-e2e-specs.js +1 -1
  58. package/test/basedriver/driver-e2e-tests.js +1 -179
  59. package/test/basedriver/driver-specs.js +1 -1
  60. package/test/basedriver/driver-tests.js +3 -3
  61. package/test/basedriver/helpers-specs.js +4 -0
  62. package/test/basedriver/timeout-specs.js +1 -1
  63. package/test/basedriver/websockets-e2e-specs.js +1 -1
  64. package/build/index.js +0 -120
  65. package/build/lib/basedriver/commands/execute-child.js +0 -137
  66. package/build/lib/basedriver/commands/execute.js +0 -119
  67. package/build/test/basedriver/fixtures/custom-element-finder-bad.js +0 -12
  68. package/build/test/basedriver/fixtures/custom-element-finder.js +0 -36
  69. package/lib/basedriver/commands/execute-child.js +0 -132
  70. package/lib/basedriver/commands/execute.js +0 -126
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ require("source-map-support/register");
6
+
7
+ var _lodash = require("lodash");
8
+
9
+ var _protocol = require("../../lib/protocol");
10
+
11
+ var _crypto = _interopRequireDefault(require("crypto"));
12
+
13
+ describe('Protocol', function () {
14
+ describe('ensure protocol consistency', function () {
15
+ it('should not change protocol between patch versions', function () {
16
+ let shasum = _crypto.default.createHash('sha1');
17
+
18
+ for (let [url, urlMapping] of _lodash._.toPairs(_protocol.METHOD_MAP)) {
19
+ shasum.update(url);
20
+
21
+ for (let [method, methodMapping] of _lodash._.toPairs(urlMapping)) {
22
+ shasum.update(method);
23
+
24
+ if (methodMapping.command) {
25
+ shasum.update(methodMapping.command);
26
+ }
27
+
28
+ if (methodMapping.payloadParams) {
29
+ let allParams = _lodash._.flatten(methodMapping.payloadParams.required);
30
+
31
+ if (methodMapping.payloadParams.optional) {
32
+ allParams = allParams.concat(_lodash._.flatten(methodMapping.payloadParams.optional));
33
+ }
34
+
35
+ for (let param of allParams) {
36
+ shasum.update(param);
37
+ }
38
+
39
+ if (methodMapping.payloadParams.wrap) {
40
+ shasum.update('skip');
41
+ shasum.update(methodMapping.payloadParams.wrap);
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ let hash = shasum.digest('hex').substring(0, 8);
48
+ hash.should.equal('ccbdbf87');
49
+ });
50
+ });
51
+ describe('check route to command name conversion', function () {
52
+ it('should properly lookup correct command name for endpoint with session', function () {
53
+ const cmdName = (0, _protocol.routeToCommandName)('/timeouts', 'POST');
54
+ cmdName.should.equal('timeouts');
55
+ });
56
+ it('should properly lookup correct command name for endpoint with session', function () {
57
+ const cmdName = (0, _protocol.routeToCommandName)('/timeouts/implicit_wait', 'POST');
58
+ cmdName.should.equal('implicitWait');
59
+ });
60
+ it('should properly lookup correct command name for endpoint without session', function () {
61
+ const cmdName = (0, _protocol.routeToCommandName)('/status', 'GET');
62
+ cmdName.should.equal('getStatus');
63
+ });
64
+ it('should properly lookup correct command name for endpoint without leading slash', function () {
65
+ const cmdName = (0, _protocol.routeToCommandName)('status', 'GET');
66
+ cmdName.should.equal('getStatus');
67
+ });
68
+ it('should properly lookup correct command name for fully specified endpoint', function () {
69
+ const cmdName = (0, _protocol.routeToCommandName)('/status', 'GET');
70
+ cmdName.should.equal('getStatus');
71
+ });
72
+ it('should not find command name if incorrect input data has been specified', function () {
73
+ for (let [route, method] of [['/status', 'POST'], ['/xstatus', 'GET'], ['status', 'POST']]) {
74
+ const cmdName = (0, _protocol.routeToCommandName)(route, method);
75
+ chai.should().equal(cmdName, undefined);
76
+ }
77
+ });
78
+ });
79
+ });require('source-map-support').install();
80
+
81
+
82
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvcHJvdG9jb2wvcm91dGVzLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaXQiLCJzaGFzdW0iLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwidXJsIiwidXJsTWFwcGluZyIsIl8iLCJ0b1BhaXJzIiwiTUVUSE9EX01BUCIsInVwZGF0ZSIsIm1ldGhvZCIsIm1ldGhvZE1hcHBpbmciLCJjb21tYW5kIiwicGF5bG9hZFBhcmFtcyIsImFsbFBhcmFtcyIsImZsYXR0ZW4iLCJyZXF1aXJlZCIsIm9wdGlvbmFsIiwiY29uY2F0IiwicGFyYW0iLCJ3cmFwIiwiaGFzaCIsImRpZ2VzdCIsInN1YnN0cmluZyIsInNob3VsZCIsImVxdWFsIiwiY21kTmFtZSIsInJvdXRlIiwiY2hhaSIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBSUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBWTtBQUsvQkEsRUFBQUEsUUFBUSxDQUFDLDZCQUFELEVBQWdDLFlBQVk7QUFDbERDLElBQUFBLEVBQUUsQ0FBQyxtREFBRCxFQUFzRCxZQUFZO0FBQ2xFLFVBQUlDLE1BQU0sR0FBR0MsZ0JBQU9DLFVBQVAsQ0FBa0IsTUFBbEIsQ0FBYjs7QUFDQSxXQUFLLElBQUksQ0FBQ0MsR0FBRCxFQUFNQyxVQUFOLENBQVQsSUFBOEJDLFVBQUVDLE9BQUYsQ0FBVUMsb0JBQVYsQ0FBOUIsRUFBcUQ7QUFDbkRQLFFBQUFBLE1BQU0sQ0FBQ1EsTUFBUCxDQUFjTCxHQUFkOztBQUNBLGFBQUssSUFBSSxDQUFDTSxNQUFELEVBQVNDLGFBQVQsQ0FBVCxJQUFvQ0wsVUFBRUMsT0FBRixDQUFVRixVQUFWLENBQXBDLEVBQTJEO0FBQ3pESixVQUFBQSxNQUFNLENBQUNRLE1BQVAsQ0FBY0MsTUFBZDs7QUFDQSxjQUFJQyxhQUFhLENBQUNDLE9BQWxCLEVBQTJCO0FBQ3pCWCxZQUFBQSxNQUFNLENBQUNRLE1BQVAsQ0FBY0UsYUFBYSxDQUFDQyxP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MUIsQ0FBaEI7QUFDQWtCLFFBQUFBLElBQUksQ0FBQ0osTUFBTCxHQUFjQyxLQUFkLENBQW9CQyxPQUFwQixFQUE2QkcsU0FBN0I7QUFDRDtBQUNGLEtBTEMsQ0FBRjtBQU1ELEdBaENPLENBQVI7QUFrQ0QsQ0F0RU8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBfIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE1FVEhPRF9NQVAsIHJvdXRlVG9Db21tYW5kTmFtZSB9IGZyb20gJy4uLy4uL2xpYi9wcm90b2NvbCc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cblxuXG5kZXNjcmliZSgnUHJvdG9jb2wnLCBmdW5jdGlvbiAoKSB7XG5cbiAgLy8gVE9ETyB0ZXN0IGFnYWluc3QgYW4gZXhwbGljaXQgcHJvdG9jb2wgcmF0aGVyIHRoYW4gYSBoYXNoIG9mIGEgcHJldmlvdXNcbiAgLy8gcHJvdG9jb2xcblxuICBkZXNjcmliZSgnZW5zdXJlIHByb3RvY29sIGNvbnNpc3RlbmN5JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgbm90IGNoYW5nZSBwcm90b2NvbCBiZXR3ZWVuIHBhdGNoIHZlcnNpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgbGV0IHNoYXN1bSA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgICBmb3IgKGxldCBbdXJsLCB1cmxNYXBwaW5nXSBvZiBfLnRvUGFpcnMoTUVUSE9EX01BUCkpIHtcbiAgICAgICAgc2hhc3VtLnVwZGF0ZSh1cmwpO1xuICAgICAgICBmb3IgKGxldCBbbWV0aG9kLCBtZXRob2RNYXBwaW5nXSBvZiBfLnRvUGFpcnModXJsTWFwcGluZykpIHtcbiAgICAgICAgICBzaGFzdW0udXBkYXRlKG1ldGhvZCk7XG4gICAgICAgICAgaWYgKG1ldGhvZE1hcHBpbmcuY29tbWFuZCkge1xuICAgICAgICAgICAgc2hhc3VtLnVwZGF0ZShtZXRob2RNYXBwaW5nLmNvbW1hbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWV0aG9kTWFwcGluZy5wYXlsb2FkUGFyYW1zKSB7XG4gICAgICAgICAgICBsZXQgYWxsUGFyYW1zID0gXy5mbGF0dGVuKG1ldGhvZE1hcHBpbmcucGF5bG9hZFBhcmFtcy5yZXF1aXJlZCk7XG4gICAgICAgICAgICBpZiAobWV0aG9kTWFwcGluZy5wYXlsb2FkUGFyYW1zLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAgIGFsbFBhcmFtcyA9IGFsbFBhcmFtcy5jb25jYXQoXy5mbGF0dGVuKG1ldGhvZE1hcHBpbmcucGF5bG9hZFBhcmFtcy5vcHRpb25hbCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgcGFyYW0gb2YgYWxsUGFyYW1zKSB7XG4gICAgICAgICAgICAgIHNoYXN1bS51cGRhdGUocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1ldGhvZE1hcHBpbmcucGF5bG9hZFBhcmFtcy53cmFwKSB7XG4gICAgICAgICAgICAgIHNoYXN1bS51cGRhdGUoJ3NraXAnKTtcbiAgICAgICAgICAgICAgc2hhc3VtLnVwZGF0ZShtZXRob2RNYXBwaW5nLnBheWxvYWRQYXJhbXMud3JhcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgaGFzaCA9IHNoYXN1bS5kaWdlc3QoJ2hleCcpLnN1YnN0cmluZygwLCA4KTtcbiAgICAgIC8vIE1vZGlmeSB0aGUgaGFzaCB3aGVuZXZlciB0aGUgcHJvdG9jb2wgaGFzIGludGVudGlvbmFsbHkgYmVlbiBtb2RpZmllZC5cbiAgICAgIGhhc2guc2hvdWxkLmVxdWFsKCdjY2JkYmY4NycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2hlY2sgcm91dGUgdG8gY29tbWFuZCBuYW1lIGNvbnZlcnNpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwcm9wZXJseSBsb29rdXAgY29ycmVjdCBjb21tYW5kIG5hbWUgZm9yIGVuZHBvaW50IHdpdGggc2Vzc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNtZE5hbWUgPSByb3V0ZVRvQ29tbWFuZE5hbWUoJy90aW1lb3V0cycsICdQT1NUJyk7XG4gICAgICBjbWROYW1lLnNob3VsZC5lcXVhbCgndGltZW91dHMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvcGVybHkgbG9va3VwIGNvcnJlY3QgY29tbWFuZCBuYW1lIGZvciBlbmRwb2ludCB3aXRoIHNlc3Npb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjbWROYW1lID0gcm91dGVUb0NvbW1hbmROYW1lKCcvdGltZW91dHMvaW1wbGljaXRfd2FpdCcsICdQT1NUJyk7XG4gICAgICBjbWROYW1lLnNob3VsZC5lcXVhbCgnaW1wbGljaXRXYWl0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IGxvb2t1cCBjb3JyZWN0IGNvbW1hbmQgbmFtZSBmb3IgZW5kcG9pbnQgd2l0aG91dCBzZXNzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY21kTmFtZSA9IHJvdXRlVG9Db21tYW5kTmFtZSgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGNtZE5hbWUuc2hvdWxkLmVxdWFsKCdnZXRTdGF0dXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvcGVybHkgbG9va3VwIGNvcnJlY3QgY29tbWFuZCBuYW1lIGZvciBlbmRwb2ludCB3aXRob3V0IGxlYWRpbmcgc2xhc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjbWROYW1lID0gcm91dGVUb0NvbW1hbmROYW1lKCdzdGF0dXMnLCAnR0VUJyk7XG4gICAgICBjbWROYW1lLnNob3VsZC5lcXVhbCgnZ2V0U3RhdHVzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IGxvb2t1cCBjb3JyZWN0IGNvbW1hbmQgbmFtZSBmb3IgZnVsbHkgc3BlY2lmaWVkIGVuZHBvaW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY21kTmFtZSA9IHJvdXRlVG9Db21tYW5kTmFtZSgnL3N0YXR1cycsICdHRVQnKTtcbiAgICAgIGNtZE5hbWUuc2hvdWxkLmVxdWFsKCdnZXRTdGF0dXMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGZpbmQgY29tbWFuZCBuYW1lIGlmIGluY29ycmVjdCBpbnB1dCBkYXRhIGhhcyBiZWVuIHNwZWNpZmllZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAobGV0IFtyb3V0ZSwgbWV0aG9kXSBvZiBbWycvc3RhdHVzJywgJ1BPU1QnXSwgWycveHN0YXR1cycsICdHRVQnXSwgWydzdGF0dXMnLCAnUE9TVCddXSkge1xuICAgICAgICBjb25zdCBjbWROYW1lID0gcm91dGVUb0NvbW1hbmROYW1lKHJvdXRlLCBtZXRob2QpO1xuICAgICAgICBjaGFpLnNob3VsZCgpLmVxdWFsKGNtZE5hbWUsIHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG59KTtcbiJdLCJmaWxlIjoidGVzdC9wcm90b2NvbC9yb3V0ZXMtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+
3
+ require("source-map-support/register");
4
+
5
+ var _validators = require("../../lib/protocol/validators");
6
+
7
+ describe('Protocol', function () {
8
+ describe('direct to driver', function () {
9
+ describe('setUrl', function () {
10
+ it('should fail when no url passed', function () {
11
+ (() => {
12
+ _validators.validators.setUrl();
13
+ }).should.throw(/url/i);
14
+ });
15
+ it('should fail when given invalid url', function () {
16
+ (() => {
17
+ _validators.validators.setUrl('foo');
18
+ }).should.throw(/url/i);
19
+ });
20
+ it('should succeed when given url starting with http', function () {
21
+ (() => {
22
+ _validators.validators.setUrl('http://appium.io');
23
+ }).should.not.throw();
24
+ });
25
+ it('should succeed when given an android-like scheme', function () {
26
+ (() => {
27
+ _validators.validators.setUrl('content://contacts/people/1');
28
+ }).should.not.throw();
29
+ });
30
+ it('should succeed with hyphens dots and plus chars in the scheme', function () {
31
+ (() => {
32
+ _validators.validators.setUrl('my-app.a+b://login');
33
+ }).should.not.throw();
34
+ });
35
+ it('should succeed when given an about scheme', function () {
36
+ (() => {
37
+ _validators.validators.setUrl('about:blank');
38
+ }).should.not.throw();
39
+ });
40
+ it('should succeed when given a data scheme', function () {
41
+ (() => {
42
+ _validators.validators.setUrl('data:text/html,<html></html>');
43
+ }).should.not.throw();
44
+ });
45
+ });
46
+ describe('implicitWait', function () {
47
+ it('should fail when given no ms', function () {
48
+ (() => {
49
+ _validators.validators.implicitWait();
50
+ }).should.throw(/ms/i);
51
+ });
52
+ it('should fail when given a non-numeric ms', function () {
53
+ (() => {
54
+ _validators.validators.implicitWait('five');
55
+ }).should.throw(/ms/i);
56
+ });
57
+ it('should fail when given a negative ms', function () {
58
+ (() => {
59
+ _validators.validators.implicitWait(-1);
60
+ }).should.throw(/ms/i);
61
+ });
62
+ it('should succeed when given an ms of 0', function () {
63
+ (() => {
64
+ _validators.validators.implicitWait(0);
65
+ }).should.not.throw();
66
+ });
67
+ it('should succeed when given an ms greater than 0', function () {
68
+ (() => {
69
+ _validators.validators.implicitWait(100);
70
+ }).should.not.throw();
71
+ });
72
+ });
73
+ describe('asyncScriptTimeout', function () {
74
+ it('should fail when given no ms', function () {
75
+ (() => {
76
+ _validators.validators.asyncScriptTimeout();
77
+ }).should.throw(/ms/i);
78
+ });
79
+ it('should fail when given a non-numeric ms', function () {
80
+ (() => {
81
+ _validators.validators.asyncScriptTimeout('five');
82
+ }).should.throw(/ms/i);
83
+ });
84
+ it('should fail when given a negative ms', function () {
85
+ (() => {
86
+ _validators.validators.asyncScriptTimeout(-1);
87
+ }).should.throw(/ms/i);
88
+ });
89
+ it('should succeed when given an ms of 0', function () {
90
+ (() => {
91
+ _validators.validators.asyncScriptTimeout(0);
92
+ }).should.not.throw();
93
+ });
94
+ it('should succeed when given an ms greater than 0', function () {
95
+ (() => {
96
+ _validators.validators.asyncScriptTimeout(100);
97
+ }).should.not.throw();
98
+ });
99
+ });
100
+ describe('clickCurrent', function () {
101
+ it('should fail when given an invalid button', function () {
102
+ (() => {
103
+ _validators.validators.clickCurrent(4);
104
+ }).should.throw(/0, 1, or 2/i);
105
+ });
106
+ it('should succeed when given a valid button', function () {
107
+ (() => {
108
+ _validators.validators.clickCurrent(0);
109
+ }).should.not.throw();
110
+ (() => {
111
+ _validators.validators.clickCurrent(1);
112
+ }).should.not.throw();
113
+ (() => {
114
+ _validators.validators.clickCurrent(2);
115
+ }).should.not.throw();
116
+ });
117
+ });
118
+ describe('setNetworkConnection', function () {
119
+ it('should fail when given no type', function () {
120
+ (() => {
121
+ _validators.validators.setNetworkConnection();
122
+ }).should.throw(/0, 1, 2, 4, 6/i);
123
+ });
124
+ it('should fail when given an invalid type', function () {
125
+ (() => {
126
+ _validators.validators.setNetworkConnection(8);
127
+ }).should.throw(/0, 1, 2, 4, 6/i);
128
+ });
129
+ it('should succeed when given a valid type', function () {
130
+ (() => {
131
+ _validators.validators.setNetworkConnection(0);
132
+ }).should.not.throw();
133
+ (() => {
134
+ _validators.validators.setNetworkConnection(1);
135
+ }).should.not.throw();
136
+ (() => {
137
+ _validators.validators.setNetworkConnection(2);
138
+ }).should.not.throw();
139
+ (() => {
140
+ _validators.validators.setNetworkConnection(4);
141
+ }).should.not.throw();
142
+ (() => {
143
+ _validators.validators.setNetworkConnection(6);
144
+ }).should.not.throw();
145
+ });
146
+ });
147
+ });
148
+ });require('source-map-support').install();
149
+
150
+
151
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvcHJvdG9jb2wvdmFsaWRhdG9yLXNwZWNzLmpzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaXQiLCJ2YWxpZGF0b3JzIiwic2V0VXJsIiwic2hvdWxkIiwidGhyb3ciLCJub3QiLCJpbXBsaWNpdFdhaXQiLCJhc3luY1NjcmlwdFRpbWVvdXQiLCJjbGlja0N1cnJlbnQiLCJzZXROZXR3b3JrQ29ubmVjdGlvbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUVBOztBQUlBQSxRQUFRLENBQUMsVUFBRCxFQUFhLFlBQVk7QUFDL0JBLEVBQUFBLFFBQVEsQ0FBQyxrQkFBRCxFQUFxQixZQUFZO0FBRXZDQSxJQUFBQSxRQUFRLENBQUMsUUFBRCxFQUFXLFlBQVk7QUFDN0JDLE1BQUFBLEVBQUUsQ0FBQyxnQ0FBRCxFQUFtQyxZQUFZO0FBQy9DLFNBQUMsTUFBTTtBQUFDQyxpQ0FBV0MsTUFBWDtBQUFxQixTQUE3QixFQUErQkMsTUFBL0IsQ0FBc0NDLEtBQXRDLENBQTRDLE1BQTVDO0FBQ0QsT0FGQyxDQUFGO0FBR0FKLE1BQUFBLEVBQUUsQ0FBQyxvQ0FBRCxFQUF1QyxZQUFZO0FBQ25ELFNBQUMsTUFBTTtBQUFDQyxpQ0FBV0MsTUFBWCxDQUFrQixLQUFsQjtBQUEwQixTQUFsQyxFQUFvQ0MsTUFBcEMsQ0FBMkNDLEtBQTNDLENBQWlELE1BQWpEO0FBQ0QsT0FGQyxDQUFGO0FBR0FKLE1BQUFBLEVBQUUsQ0FBQyxrREFBRCxFQUFxRCxZQUFZO0FBQ2pFLFNBQUMsTUFBTTtBQUFDQyxpQ0FBV0MsTUFBWCxDQUFrQixrQkFBbEI7QUFBdUMsU0FBL0MsRUFBaURDLE1BQWpELENBQXdERSxHQUF4RCxDQUE0REQsS0FBNUQ7QUFDRCxPQUZDLENBQUY7QUFHQUosTUFBQUEsRUFBRSxDQUFDLGtEQUFELEVBQXFELFlBQVk7QUFDakUsU0FBQyxNQUFNO0FBQUNDLGlDQUFXQyxNQUFYLENBQWtCLDZCQUFsQjtBQUFrRCxTQUExRCxFQUE0REMsTUFBNUQsQ0FBbUVFLEdBQW5F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cmFuc3BpbGU6bW9jaGFcblxuaW1wb3J0IHsgdmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL2xpYi9wcm90b2NvbC92YWxpZGF0b3JzJztcblxuXG5cbmRlc2NyaWJlKCdQcm90b2NvbCcsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2RpcmVjdCB0byBkcml2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnc2V0VXJsJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gbm8gdXJsIHBhc3NlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLnNldFVybCgpO30pLnNob3VsZC50aHJvdygvdXJsL2kpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBnaXZlbiBpbnZhbGlkIHVybCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLnNldFVybCgnZm9vJyk7fSkuc2hvdWxkLnRocm93KC91cmwvaSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB3aGVuIGdpdmVuIHVybCBzdGFydGluZyB3aXRoIGh0dHAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiB7dmFsaWRhdG9ycy5zZXRVcmwoJ2h0dHA6Ly9hcHBpdW0uaW8nKTt9KS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB3aGVuIGdpdmVuIGFuIGFuZHJvaWQtbGlrZSBzY2hlbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiB7dmFsaWRhdG9ycy5zZXRVcmwoJ2NvbnRlbnQ6Ly9jb250YWN0cy9wZW9wbGUvMScpO30pLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdpdGggaHlwaGVucyBkb3RzIGFuZCBwbHVzIGNoYXJzIGluIHRoZSBzY2hlbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiB7dmFsaWRhdG9ycy5zZXRVcmwoJ215LWFwcC5hK2I6Ly9sb2dpbicpO30pLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdoZW4gZ2l2ZW4gYW4gYWJvdXQgc2NoZW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuc2V0VXJsKCdhYm91dDpibGFuaycpO30pLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdoZW4gZ2l2ZW4gYSBkYXRhIHNjaGVtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLnNldFVybCgnZGF0YTp0ZXh0L2h0bWwsPGh0bWw+PC9odG1sPicpO30pLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdpbXBsaWNpdFdhaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBnaXZlbiBubyBtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLmltcGxpY2l0V2FpdCgpO30pLnNob3VsZC50aHJvdygvbXMvaSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIGdpdmVuIGEgbm9uLW51bWVyaWMgbXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiB7dmFsaWRhdG9ycy5pbXBsaWNpdFdhaXQoJ2ZpdmUnKTt9KS5zaG91bGQudGhyb3coL21zL2kpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBnaXZlbiBhIG5lZ2F0aXZlIG1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuaW1wbGljaXRXYWl0KC0xKTt9KS5zaG91bGQudGhyb3coL21zL2kpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHN1Y2NlZWQgd2hlbiBnaXZlbiBhbiBtcyBvZiAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuaW1wbGljaXRXYWl0KDApO30pLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdoZW4gZ2l2ZW4gYW4gbXMgZ3JlYXRlciB0aGFuIDAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiB7dmFsaWRhdG9ycy5pbXBsaWNpdFdhaXQoMTAwKTt9KS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnYXN5bmNTY3JpcHRUaW1lb3V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gZ2l2ZW4gbm8gbXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiB7dmFsaWRhdG9ycy5hc3luY1NjcmlwdFRpbWVvdXQoKTt9KS5zaG91bGQudGhyb3coL21zL2kpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBnaXZlbiBhIG5vbi1udW1lcmljIG1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuYXN5bmNTY3JpcHRUaW1lb3V0KCdmaXZlJyk7fSkuc2hvdWxkLnRocm93KC9tcy9pKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBmYWlsIHdoZW4gZ2l2ZW4gYSBuZWdhdGl2ZSBtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLmFzeW5jU2NyaXB0VGltZW91dCgtMSk7fSkuc2hvdWxkLnRocm93KC9tcy9pKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdoZW4gZ2l2ZW4gYW4gbXMgb2YgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLmFzeW5jU2NyaXB0VGltZW91dCgwKTt9KS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgc3VjY2VlZCB3aGVuIGdpdmVuIGFuIG1zIGdyZWF0ZXIgdGhhbiAwJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuYXN5bmNTY3JpcHRUaW1lb3V0KDEwMCk7fSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2NsaWNrQ3VycmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuY2xpY2tDdXJyZW50KDQpO30pLnNob3VsZC50aHJvdygvMCwgMSwgb3IgMi9pKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdoZW4gZ2l2ZW4gYSB2YWxpZCBidXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICgoKSA9PiB7dmFsaWRhdG9ycy5jbGlja0N1cnJlbnQoMCk7fSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuY2xpY2tDdXJyZW50KDEpO30pLnNob3VsZC5ub3QudGhyb3coKTtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLmNsaWNrQ3VycmVudCgyKTt9KS5zaG91bGQubm90LnRocm93KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnc2V0TmV0d29ya0Nvbm5lY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIGZhaWwgd2hlbiBnaXZlbiBubyB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuc2V0TmV0d29ya0Nvbm5lY3Rpb24oKTt9KS5zaG91bGQudGhyb3coLzAsIDEsIDIsIDQsIDYvaSk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgZmFpbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgKCgpID0+IHt2YWxpZGF0b3JzLnNldE5ldHdvcmtDb25uZWN0aW9uKDgpO30pLnNob3VsZC50aHJvdygvMCwgMSwgMiwgNCwgNi9pKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBzdWNjZWVkIHdoZW4gZ2l2ZW4gYSB2YWxpZCB0eXBlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuc2V0TmV0d29ya0Nvbm5lY3Rpb24oMCk7fSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuc2V0TmV0d29ya0Nvbm5lY3Rpb24oMSk7fSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuc2V0TmV0d29ya0Nvbm5lY3Rpb24oMik7fSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuc2V0TmV0d29ya0Nvbm5lY3Rpb24oNCk7fSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgICAoKCkgPT4ge3ZhbGlkYXRvcnMuc2V0TmV0d29ya0Nvbm5lY3Rpb24oNik7fSkuc2hvdWxkLm5vdC50aHJvdygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvcHJvdG9jb2wvdmFsaWRhdG9yLXNwZWNzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
package/index.d.ts CHANGED
@@ -2,7 +2,6 @@ declare class BaseDriver {
2
2
  // class variables
3
3
  static baseVersion: string;
4
4
  static newMethodMap?: MethodMap;
5
- static get argsConstraints(): Constraints;
6
5
 
7
6
  constructor(opts?: {}, shouldValidateCaps?: boolean);
8
7
 
@@ -174,7 +173,6 @@ declare class BaseDriver {
174
173
  updateSettings(newSettings: Record<string, unknown>): Promise<void>;
175
174
  getSettings(): Promise<Record<string, unknown>>;
176
175
  receiveAsyncResponse?(response: unknown): Promise<void>;
177
- executeDriverScript(script: string, scriptType?: string, timeout?: number): Promise<unknown>;
178
176
  getLogEvents(type?: string | string[]): {};
179
177
  logCustomEvent(vendor: string, event: string): void;
180
178
  setClipboard?(content: string, contentType?: string, label?: string): Promise<void>;
@@ -281,7 +279,11 @@ declare interface DriverHelpers {
281
279
  parseCapsArray: (cap: string | string[]) => string[];
282
280
  }
283
281
 
284
- declare type SettingsUpdater = (prop: string, newValue: {}, curValue: {}) => Promise<void>;
282
+ declare type SettingsUpdater = (
283
+ prop: string,
284
+ newValue: {},
285
+ curValue: {},
286
+ ) => Promise<void>;
285
287
 
286
288
  declare class DeviceSettings {
287
289
  constructor(defaultSettings: {}, onSettingsUpdate: SettingsUpdater);
package/index.js CHANGED
@@ -1,62 +1 @@
1
- // transpile:main
2
-
3
- // BaseDriver exports
4
- import * as driver from './lib/basedriver/driver';
5
- import * as deviceSettings from './lib/basedriver/device-settings';
6
-
7
- const { BaseDriver } = driver;
8
- const { DeviceSettings, BASEDRIVER_HANDLED_SETTINGS } = deviceSettings;
9
-
10
- export { BaseDriver, DeviceSettings, BASEDRIVER_HANDLED_SETTINGS };
11
- export default BaseDriver;
12
-
13
-
14
- // MJSONWP exports
15
- import * as protocol from './lib/protocol';
16
- import {
17
- DEFAULT_BASE_PATH, PROTOCOLS
18
- } from './lib/constants';
19
-
20
- const {
21
- Protocol, routeConfiguringFunction, errors, isErrorType,
22
- errorFromMJSONWPStatusCode, errorFromW3CJsonCode, ALL_COMMANDS, METHOD_MAP,
23
- routeToCommandName, NO_SESSION_ID_COMMANDS, isSessionCommand,
24
- normalizeBasePath, determineProtocol
25
- } = protocol;
26
-
27
- export {
28
- Protocol, routeConfiguringFunction, errors, isErrorType, PROTOCOLS,
29
- errorFromMJSONWPStatusCode, errorFromW3CJsonCode, determineProtocol,
30
- errorFromMJSONWPStatusCode as errorFromCode, ALL_COMMANDS, METHOD_MAP,
31
- routeToCommandName, NO_SESSION_ID_COMMANDS, isSessionCommand,
32
- DEFAULT_BASE_PATH, normalizeBasePath
33
- };
34
-
35
- // Express exports
36
- import * as staticIndex from './lib/express/static';
37
- const { STATIC_DIR } = staticIndex;
38
- export { STATIC_DIR };
39
-
40
- import * as serverIndex from './lib/express/server';
41
- const { server } = serverIndex;
42
- export { server };
43
-
44
- // jsonwp-proxy exports
45
- import * as proxyIndex from './lib/jsonwp-proxy/proxy';
46
- const { JWProxy } = proxyIndex;
47
- export { JWProxy };
48
-
49
- // jsonwp-status exports
50
- import * as statusIndex from './lib/jsonwp-status/status';
51
- const { codes: statusCodes, getSummaryByCode } = statusIndex;
52
- export { statusCodes, getSummaryByCode };
53
-
54
- // W3C capabilities parser
55
- import * as caps from './lib/basedriver/capabilities';
56
- const { processCapabilities, isStandardCap, validateCaps } = caps;
57
- export { processCapabilities, isStandardCap, validateCaps };
58
-
59
- // Web socket helpers
60
- import * as ws from './lib/express/websocket';
61
- const { DEFAULT_WS_PATHNAME_PREFIX } = ws;
62
- export { DEFAULT_WS_PATHNAME_PREFIX };
1
+ module.exports = require('./build/lib');
@@ -145,7 +145,10 @@ function parseCaps (caps, constraints = {}, shouldValidateCaps = true) {
145
145
  }
146
146
 
147
147
  // If an empty array as provided, we'll be forgiving and make it an array of one empty object
148
+ // In the future, reject 'firstMatch' argument if its array did not have one or more entries (#3.2)
148
149
  if (allFirstMatchCaps.length === 0) {
150
+ log.warn(`The firstMatch array in the given capabilities has no entries. Adding an empty entry fo rnow, ` +
151
+ `but it will require one or more entries as W3C spec.`);
149
152
  allFirstMatchCaps.push({});
150
153
  }
151
154
 
@@ -3,7 +3,6 @@ import settingsCmds from './settings';
3
3
  import timeoutCmds from './timeout';
4
4
  import findCmds from './find';
5
5
  import logCmds from './log';
6
- import executeCmds from './execute';
7
6
  import eventCmds from './event';
8
7
 
9
8
 
@@ -16,7 +15,6 @@ Object.assign(
16
15
  timeoutCmds,
17
16
  findCmds,
18
17
  logCmds,
19
- executeCmds,
20
18
  eventCmds,
21
19
  // add other command types here
22
20
  );
@@ -1,5 +1,5 @@
1
1
  import {
2
- Protocol, errors, determineProtocol
2
+ Protocol, errors, determineProtocol, DELETE_SESSION_COMMAND,
3
3
  } from '../protocol';
4
4
  import { fs } from '@appium/support';
5
5
  import { PROTOCOLS, DEFAULT_BASE_PATH } from '../constants';
@@ -38,27 +38,6 @@ class BaseDriver extends Protocol {
38
38
  */
39
39
  static baseVersion = BASEDRIVER_VER;
40
40
 
41
- /**
42
- * Override this getter in child driver classes
43
- * if you'd like to expose any command line arguments.
44
- * These arguments take precedence over any opts.
45
- *
46
- * @returns {Object} The map which represents constraints over
47
- * supported command line arguments. The map should look similar
48
- * to the desired capabilities constraints one, for example:
49
- * {
50
- * webkitDebugProxyPort: {
51
- * isNumber: true
52
- * },
53
- * wdaLocalPort: {
54
- * isNumber: true
55
- * },
56
- * }
57
- */
58
- static get argsConstraints () {
59
- return {};
60
- }
61
-
62
41
  constructor (opts = {}, shouldValidateCaps = true) {
63
42
  super();
64
43
 
@@ -327,11 +306,12 @@ class BaseDriver extends Protocol {
327
306
  async executeCommand (cmd, ...args) {
328
307
  // get start time for this command, and log in special cases
329
308
  let startTime = Date.now();
309
+
330
310
  if (cmd === 'createSession') {
331
311
  // If creating a session determine if W3C or MJSONWP protocol was requested and remember the choice
332
312
  this.protocol = determineProtocol(...args);
333
313
  this.logEvent(EVENT_SESSION_INIT);
334
- } else if (cmd === 'deleteSession') {
314
+ } else if (cmd === DELETE_SESSION_COMMAND) {
335
315
  this.logEvent(EVENT_SESSION_QUIT_START);
336
316
  }
337
317
 
@@ -362,7 +342,7 @@ class BaseDriver extends Protocol {
362
342
  unexpectedShutdownListener = null;
363
343
  }
364
344
  });
365
- const res = this.isCommandsQueueEnabled && cmd !== 'executeDriverScript'
345
+ const res = this.isCommandsQueueEnabled
366
346
  ? await this.commandsQueueGuard.acquire(BaseDriver.name, commandExecutor)
367
347
  : await commandExecutor();
368
348
 
@@ -372,7 +352,7 @@ class BaseDriver extends Protocol {
372
352
  // automatic session deletion in this.onCommandTimeout. Of course we don't
373
353
  // want to trigger the timer when the user is shutting down the session
374
354
  // intentionally
375
- if (this.isCommandsQueueEnabled && cmd !== 'deleteSession') {
355
+ if (this.isCommandsQueueEnabled && cmd !== DELETE_SESSION_COMMAND) {
376
356
  // resetting existing timeout
377
357
  this.startNewCommandTimeout();
378
358
  }
@@ -382,7 +362,7 @@ class BaseDriver extends Protocol {
382
362
  this._eventHistory.commands.push({cmd, startTime, endTime});
383
363
  if (cmd === 'createSession') {
384
364
  this.logEvent(EVENT_SESSION_START);
385
- } else if (cmd === 'deleteSession') {
365
+ } else if (cmd === DELETE_SESSION_COMMAND) {
386
366
  this.logEvent(EVENT_SESSION_QUIT_DONE);
387
367
  }
388
368