appium-xcuitest-driver 10.2.2 → 10.4.0

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 (262) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/build/lib/commands/active-app-info.d.ts +9 -0
  3. package/build/lib/commands/active-app-info.d.ts.map +1 -0
  4. package/build/lib/commands/active-app-info.js +14 -0
  5. package/build/lib/commands/active-app-info.js.map +1 -0
  6. package/build/lib/commands/alert.d.ts +42 -45
  7. package/build/lib/commands/alert.d.ts.map +1 -1
  8. package/build/lib/commands/alert.js +66 -62
  9. package/build/lib/commands/alert.js.map +1 -1
  10. package/build/lib/commands/app-management.d.ts +150 -153
  11. package/build/lib/commands/app-management.d.ts.map +1 -1
  12. package/build/lib/commands/app-management.js +300 -286
  13. package/build/lib/commands/app-management.js.map +1 -1
  14. package/build/lib/commands/app-strings.d.ts +14 -17
  15. package/build/lib/commands/app-strings.d.ts.map +1 -1
  16. package/build/lib/commands/app-strings.js +23 -24
  17. package/build/lib/commands/app-strings.js.map +1 -1
  18. package/build/lib/commands/appearance.d.ts +19 -22
  19. package/build/lib/commands/appearance.d.ts.map +1 -1
  20. package/build/lib/commands/appearance.js +56 -56
  21. package/build/lib/commands/appearance.js.map +1 -1
  22. package/build/lib/commands/audit.d.ts +22 -17
  23. package/build/lib/commands/audit.d.ts.map +1 -1
  24. package/build/lib/commands/audit.js +17 -18
  25. package/build/lib/commands/audit.js.map +1 -1
  26. package/build/lib/commands/battery.d.ts +11 -14
  27. package/build/lib/commands/battery.d.ts.map +1 -1
  28. package/build/lib/commands/battery.js +36 -37
  29. package/build/lib/commands/battery.js.map +1 -1
  30. package/build/lib/commands/biometric.d.ts +30 -33
  31. package/build/lib/commands/biometric.d.ts.map +1 -1
  32. package/build/lib/commands/biometric.js +42 -41
  33. package/build/lib/commands/biometric.js.map +1 -1
  34. package/build/lib/commands/certificate.d.ts +48 -45
  35. package/build/lib/commands/certificate.d.ts.map +1 -1
  36. package/build/lib/commands/certificate.js +218 -205
  37. package/build/lib/commands/certificate.js.map +1 -1
  38. package/build/lib/commands/clipboard.d.ts +19 -22
  39. package/build/lib/commands/clipboard.d.ts.map +1 -1
  40. package/build/lib/commands/clipboard.js +30 -30
  41. package/build/lib/commands/clipboard.js.map +1 -1
  42. package/build/lib/commands/condition.d.ts +49 -26
  43. package/build/lib/commands/condition.d.ts.map +1 -1
  44. package/build/lib/commands/condition.js +87 -86
  45. package/build/lib/commands/condition.js.map +1 -1
  46. package/build/lib/commands/content-size.d.ts +26 -29
  47. package/build/lib/commands/content-size.d.ts.map +1 -1
  48. package/build/lib/commands/content-size.js +36 -36
  49. package/build/lib/commands/content-size.js.map +1 -1
  50. package/build/lib/commands/context.d.ts +161 -108
  51. package/build/lib/commands/context.d.ts.map +1 -1
  52. package/build/lib/commands/context.js +530 -517
  53. package/build/lib/commands/context.js.map +1 -1
  54. package/build/lib/commands/deviceInfo.d.ts +9 -12
  55. package/build/lib/commands/deviceInfo.d.ts.map +1 -1
  56. package/build/lib/commands/deviceInfo.js +17 -18
  57. package/build/lib/commands/deviceInfo.js.map +1 -1
  58. package/build/lib/commands/element.d.ts +102 -105
  59. package/build/lib/commands/element.d.ts.map +1 -1
  60. package/build/lib/commands/element.js +337 -323
  61. package/build/lib/commands/element.js.map +1 -1
  62. package/build/lib/commands/execute.d.ts +24 -19
  63. package/build/lib/commands/execute.d.ts.map +1 -1
  64. package/build/lib/commands/execute.js +63 -62
  65. package/build/lib/commands/execute.js.map +1 -1
  66. package/build/lib/commands/file-movement.d.ts +77 -80
  67. package/build/lib/commands/file-movement.d.ts.map +1 -1
  68. package/build/lib/commands/file-movement.js +130 -124
  69. package/build/lib/commands/file-movement.js.map +1 -1
  70. package/build/lib/commands/find.d.ts +18 -21
  71. package/build/lib/commands/find.d.ts.map +1 -1
  72. package/build/lib/commands/find.js +158 -156
  73. package/build/lib/commands/find.js.map +1 -1
  74. package/build/lib/commands/general.d.ts +124 -116
  75. package/build/lib/commands/general.d.ts.map +1 -1
  76. package/build/lib/commands/general.js +248 -232
  77. package/build/lib/commands/general.js.map +1 -1
  78. package/build/lib/commands/geolocation.d.ts +43 -46
  79. package/build/lib/commands/geolocation.d.ts.map +1 -1
  80. package/build/lib/commands/geolocation.js +10 -11
  81. package/build/lib/commands/geolocation.js.map +1 -1
  82. package/build/lib/commands/gesture.d.ts +273 -276
  83. package/build/lib/commands/gesture.d.ts.map +1 -1
  84. package/build/lib/commands/gesture.js +506 -492
  85. package/build/lib/commands/gesture.js.map +1 -1
  86. package/build/lib/commands/increase-contrast.d.ts +20 -23
  87. package/build/lib/commands/increase-contrast.d.ts.map +1 -1
  88. package/build/lib/commands/increase-contrast.js +30 -30
  89. package/build/lib/commands/increase-contrast.js.map +1 -1
  90. package/build/lib/commands/iohid.d.ts +1370 -1373
  91. package/build/lib/commands/iohid.d.ts.map +1 -1
  92. package/build/lib/commands/iohid.js +30 -31
  93. package/build/lib/commands/iohid.js.map +1 -1
  94. package/build/lib/commands/keyboard.d.ts +29 -32
  95. package/build/lib/commands/keyboard.d.ts.map +1 -1
  96. package/build/lib/commands/keyboard.js +53 -51
  97. package/build/lib/commands/keyboard.js.map +1 -1
  98. package/build/lib/commands/keychains.d.ts +9 -12
  99. package/build/lib/commands/keychains.d.ts.map +1 -1
  100. package/build/lib/commands/keychains.js +13 -14
  101. package/build/lib/commands/keychains.js.map +1 -1
  102. package/build/lib/commands/localization.d.ts +16 -19
  103. package/build/lib/commands/localization.d.ts.map +1 -1
  104. package/build/lib/commands/localization.js +25 -26
  105. package/build/lib/commands/localization.js.map +1 -1
  106. package/build/lib/commands/location.d.ts +36 -39
  107. package/build/lib/commands/location.d.ts.map +1 -1
  108. package/build/lib/commands/location.js +99 -98
  109. package/build/lib/commands/location.js.map +1 -1
  110. package/build/lib/commands/lock.d.ts +21 -24
  111. package/build/lib/commands/lock.d.ts.map +1 -1
  112. package/build/lib/commands/lock.js +39 -38
  113. package/build/lib/commands/lock.js.map +1 -1
  114. package/build/lib/commands/log.d.ts +43 -37
  115. package/build/lib/commands/log.d.ts.map +1 -1
  116. package/build/lib/commands/log.js +174 -171
  117. package/build/lib/commands/log.js.map +1 -1
  118. package/build/lib/commands/memory.d.ts +9 -12
  119. package/build/lib/commands/memory.d.ts.map +1 -1
  120. package/build/lib/commands/memory.js +37 -39
  121. package/build/lib/commands/memory.js.map +1 -1
  122. package/build/lib/commands/navigation.d.ts +30 -33
  123. package/build/lib/commands/navigation.d.ts.map +1 -1
  124. package/build/lib/commands/navigation.js +92 -92
  125. package/build/lib/commands/navigation.js.map +1 -1
  126. package/build/lib/commands/notifications.d.ts +26 -29
  127. package/build/lib/commands/notifications.d.ts.map +1 -1
  128. package/build/lib/commands/notifications.js +53 -53
  129. package/build/lib/commands/notifications.js.map +1 -1
  130. package/build/lib/commands/pasteboard.d.ts +21 -24
  131. package/build/lib/commands/pasteboard.d.ts.map +1 -1
  132. package/build/lib/commands/pasteboard.js +37 -37
  133. package/build/lib/commands/pasteboard.js.map +1 -1
  134. package/build/lib/commands/pcap.d.ts +39 -26
  135. package/build/lib/commands/pcap.d.ts.map +1 -1
  136. package/build/lib/commands/pcap.js +81 -81
  137. package/build/lib/commands/pcap.js.map +1 -1
  138. package/build/lib/commands/performance.d.ts +63 -44
  139. package/build/lib/commands/performance.d.ts.map +1 -1
  140. package/build/lib/commands/performance.js +105 -105
  141. package/build/lib/commands/performance.js.map +1 -1
  142. package/build/lib/commands/permissions.d.ts +33 -36
  143. package/build/lib/commands/permissions.d.ts.map +1 -1
  144. package/build/lib/commands/permissions.js +66 -65
  145. package/build/lib/commands/permissions.js.map +1 -1
  146. package/build/lib/commands/proxy-helper.d.ts +12 -15
  147. package/build/lib/commands/proxy-helper.d.ts.map +1 -1
  148. package/build/lib/commands/proxy-helper.js +53 -54
  149. package/build/lib/commands/proxy-helper.js.map +1 -1
  150. package/build/lib/commands/record-audio.d.ts +49 -29
  151. package/build/lib/commands/record-audio.d.ts.map +1 -1
  152. package/build/lib/commands/record-audio.js +100 -104
  153. package/build/lib/commands/record-audio.js.map +1 -1
  154. package/build/lib/commands/recordscreen.d.ts +54 -18
  155. package/build/lib/commands/recordscreen.d.ts.map +1 -1
  156. package/build/lib/commands/recordscreen.js +127 -129
  157. package/build/lib/commands/recordscreen.js.map +1 -1
  158. package/build/lib/commands/screenshots.d.ts +14 -17
  159. package/build/lib/commands/screenshots.d.ts.map +1 -1
  160. package/build/lib/commands/screenshots.js +108 -107
  161. package/build/lib/commands/screenshots.js.map +1 -1
  162. package/build/lib/commands/simctl.d.ts +11 -14
  163. package/build/lib/commands/simctl.d.ts.map +1 -1
  164. package/build/lib/commands/simctl.js +23 -26
  165. package/build/lib/commands/simctl.js.map +1 -1
  166. package/build/lib/commands/source.d.ts +14 -17
  167. package/build/lib/commands/source.d.ts.map +1 -1
  168. package/build/lib/commands/source.js +40 -43
  169. package/build/lib/commands/source.js.map +1 -1
  170. package/build/lib/commands/timeouts.d.ts +44 -33
  171. package/build/lib/commands/timeouts.d.ts.map +1 -1
  172. package/build/lib/commands/timeouts.js +65 -63
  173. package/build/lib/commands/timeouts.js.map +1 -1
  174. package/build/lib/commands/web.d.ts +247 -197
  175. package/build/lib/commands/web.d.ts.map +1 -1
  176. package/build/lib/commands/web.js +815 -786
  177. package/build/lib/commands/web.js.map +1 -1
  178. package/build/lib/commands/xctest-record-screen.d.ts +63 -66
  179. package/build/lib/commands/xctest-record-screen.d.ts.map +1 -1
  180. package/build/lib/commands/xctest-record-screen.js +103 -102
  181. package/build/lib/commands/xctest-record-screen.js.map +1 -1
  182. package/build/lib/commands/xctest.d.ts +55 -51
  183. package/build/lib/commands/xctest.d.ts.map +1 -1
  184. package/build/lib/commands/xctest.js +116 -117
  185. package/build/lib/commands/xctest.js.map +1 -1
  186. package/build/lib/driver.d.ts +278 -1597
  187. package/build/lib/driver.d.ts.map +1 -1
  188. package/build/lib/driver.js +320 -236
  189. package/build/lib/driver.js.map +1 -1
  190. package/build/lib/execute-method-map.d.ts.map +1 -1
  191. package/build/lib/execute-method-map.js +9 -0
  192. package/build/lib/execute-method-map.js.map +1 -1
  193. package/build/lib/real-device.d.ts +1 -1
  194. package/build/lib/real-device.d.ts.map +1 -1
  195. package/build/lib/real-device.js +2 -2
  196. package/build/lib/real-device.js.map +1 -1
  197. package/lib/commands/active-app-info.js +12 -0
  198. package/lib/commands/alert.js +68 -65
  199. package/lib/commands/app-management.js +308 -301
  200. package/lib/commands/app-strings.js +24 -26
  201. package/lib/commands/appearance.js +54 -56
  202. package/lib/commands/audit.js +18 -20
  203. package/lib/commands/battery.js +35 -37
  204. package/lib/commands/biometric.js +44 -46
  205. package/lib/commands/certificate.js +226 -215
  206. package/lib/commands/clipboard.js +30 -32
  207. package/lib/commands/condition.js +98 -100
  208. package/lib/commands/content-size.js +36 -38
  209. package/lib/commands/context.js +495 -490
  210. package/lib/commands/deviceInfo.js +19 -20
  211. package/lib/commands/element.js +367 -357
  212. package/lib/commands/execute.js +72 -72
  213. package/lib/commands/file-movement.js +132 -134
  214. package/lib/commands/find.js +160 -159
  215. package/lib/commands/general.js +238 -231
  216. package/lib/commands/geolocation.js +6 -14
  217. package/lib/commands/gesture.js +525 -515
  218. package/lib/commands/increase-contrast.js +30 -32
  219. package/lib/commands/iohid.js +32 -34
  220. package/lib/commands/keyboard.js +49 -51
  221. package/lib/commands/keychains.js +12 -14
  222. package/lib/commands/localization.js +24 -26
  223. package/lib/commands/location.js +102 -104
  224. package/lib/commands/lock.js +38 -38
  225. package/lib/commands/log.js +197 -198
  226. package/lib/commands/memory.js +40 -43
  227. package/lib/commands/navigation.js +96 -100
  228. package/lib/commands/notifications.js +57 -59
  229. package/lib/commands/pasteboard.js +37 -39
  230. package/lib/commands/pcap.js +84 -86
  231. package/lib/commands/performance.js +132 -133
  232. package/lib/commands/permissions.js +67 -69
  233. package/lib/commands/proxy-helper.js +60 -61
  234. package/lib/commands/record-audio.js +115 -120
  235. package/lib/commands/recordscreen.js +145 -149
  236. package/lib/commands/screenshots.js +116 -116
  237. package/lib/commands/simctl.js +25 -29
  238. package/lib/commands/source.js +42 -46
  239. package/lib/commands/timeouts.js +59 -63
  240. package/lib/commands/web.js +878 -858
  241. package/lib/commands/xctest-record-screen.js +103 -105
  242. package/lib/commands/xctest.js +134 -139
  243. package/lib/driver.js +288 -236
  244. package/lib/execute-method-map.ts +9 -0
  245. package/lib/real-device.js +2 -2
  246. package/npm-shrinkwrap.json +440 -76
  247. package/package.json +2 -1
  248. package/build/lib/commands/activeAppInfo.d.ts +0 -12
  249. package/build/lib/commands/activeAppInfo.d.ts.map +0 -1
  250. package/build/lib/commands/activeAppInfo.js +0 -15
  251. package/build/lib/commands/activeAppInfo.js.map +0 -1
  252. package/build/lib/commands/index.d.ts +0 -96
  253. package/build/lib/commands/index.d.ts.map +0 -1
  254. package/build/lib/commands/index.js +0 -100
  255. package/build/lib/commands/index.js.map +0 -1
  256. package/build/lib/real-device-clients/devicectl.d.ts +0 -204
  257. package/build/lib/real-device-clients/devicectl.d.ts.map +0 -1
  258. package/build/lib/real-device-clients/devicectl.js +0 -264
  259. package/build/lib/real-device-clients/devicectl.js.map +0 -1
  260. package/lib/commands/activeAppInfo.js +0 -14
  261. package/lib/commands/index.js +0 -95
  262. package/lib/real-device-clients/devicectl.js +0 -291
@@ -3,6 +3,78 @@ import {XCUITestDriver} from '../driver';
3
3
  import {errors, errorFromCode, errorFromW3CJsonCode} from 'appium/driver';
4
4
  import {util} from 'appium/support';
5
5
 
6
+ /**
7
+ * Collect the response of an async script execution
8
+ * @this {XCUITestDriver}
9
+ * @deprecated
10
+ * @privateRemarks It's unclear what this is for. Don't use it.
11
+ */
12
+ export async function receiveAsyncResponse(status, value) {
13
+ this.log.debug(`Received async response: ${JSON.stringify(value)}`);
14
+ if (!util.hasValue(this.asyncPromise)) {
15
+ this.log.warn(
16
+ `Received async response when we were not expecting one! ` +
17
+ `Response was: ${JSON.stringify(value)}`,
18
+ );
19
+ return;
20
+ }
21
+
22
+ if (util.hasValue(status) && status !== 0) {
23
+ // MJSONWP
24
+ return this.asyncPromise.reject(errorFromCode(status, value.message));
25
+ }
26
+ if (!util.hasValue(status) && value && _.isString(value.error)) {
27
+ // W3C
28
+ return this.asyncPromise.reject(
29
+ errorFromW3CJsonCode(value.error, value.message, value.stacktrace),
30
+ );
31
+ }
32
+ return this.asyncPromise.resolve(value);
33
+ }
34
+
35
+ /**
36
+ * @template {ExecuteMethodArgs} [TArgs = unknown[]]
37
+ * @template [TReturn = unknown]
38
+ * @param {string} script - Either a script to run, or in the case of an Execute Method, the name of the script to execute.
39
+ * @param {TArgs} [args]
40
+ * @this {XCUITestDriver}
41
+ * @returns {Promise<TReturn>}
42
+ */
43
+ export async function execute(script, args) {
44
+ // TODO: create a type that converts args to the parameters of the associated method using the `command` prop of `executeMethodMap`
45
+ script = script.trim().replace(/^mobile:\s*/, 'mobile: ');
46
+ if (isExecuteMethod(script)) {
47
+ const executeMethodArgs = preprocessExecuteMethodArgs(script, args);
48
+ return await this.executeMethod(script, [executeMethodArgs]);
49
+ } else if (this.isWebContext()) {
50
+ const atomsArgs = this.convertElementsForAtoms(/** @type {readonly any[]} */ (args));
51
+ const result = await this.executeAtom('execute_script', [script, atomsArgs]);
52
+ return this.cacheWebElements(result);
53
+ } else {
54
+ throw new errors.NotImplementedError();
55
+ }
56
+ }
57
+
58
+ /**
59
+ * @this {XCUITestDriver}
60
+ * @group Mobile Web Only
61
+ */
62
+ export async function executeAsync(script, args) {
63
+ if (!this.isWebContext()) {
64
+ throw new errors.NotImplementedError();
65
+ }
66
+
67
+ args = this.convertElementsForAtoms(args);
68
+ this.asyncWaitMs = this.asyncWaitMs || 0;
69
+ const promise = (/** @type {import('appium-remote-debugger').RemoteDebugger} */ (this.remote)).executeAtomAsync(
70
+ 'execute_async_script',
71
+ [script, args, this.asyncWaitMs],
72
+ this.curWebFrames,
73
+ );
74
+ return this.cacheWebElements(await this.waitForAtom(promise));
75
+ }
76
+
77
+
6
78
  /**
7
79
  * Checks if script expects a particular parameter (either optional or required).
8
80
  * @template {keyof XCUITestDriver.executeMethodMap} Script
@@ -71,78 +143,6 @@ function preprocessExecuteMethodArgs(script, args) {
71
143
  return executeMethodArgs;
72
144
  }
73
145
 
74
- export default {
75
- /**
76
- * Collect the response of an async script execution
77
- * @this {XCUITestDriver}
78
- * @deprecated
79
- * @privateRemarks It's unclear what this is for. Don't use it.
80
- */
81
- async receiveAsyncResponse(status, value) {
82
- this.log.debug(`Received async response: ${JSON.stringify(value)}`);
83
- if (!util.hasValue(this.asyncPromise)) {
84
- this.log.warn(
85
- `Received async response when we were not expecting one! ` +
86
- `Response was: ${JSON.stringify(value)}`,
87
- );
88
- return;
89
- }
90
-
91
- if (util.hasValue(status) && status !== 0) {
92
- // MJSONWP
93
- return this.asyncPromise.reject(errorFromCode(status, value.message));
94
- }
95
- if (!util.hasValue(status) && value && _.isString(value.error)) {
96
- // W3C
97
- return this.asyncPromise.reject(
98
- errorFromW3CJsonCode(value.error, value.message, value.stacktrace),
99
- );
100
- }
101
- return this.asyncPromise.resolve(value);
102
- },
103
-
104
- /**
105
- * @template {ExecuteMethodArgs} [TArgs = unknown[]]
106
- * @template [TReturn = unknown]
107
- * @param {string} script - Either a script to run, or in the case of an Execute Method, the name of the script to execute.
108
- * @param {TArgs} [args]
109
- * @this {XCUITestDriver}
110
- * @returns {Promise<TReturn>}
111
- */
112
- async execute(script, args) {
113
- // TODO: create a type that converts args to the parameters of the associated method using the `command` prop of `executeMethodMap`
114
- script = script.trim().replace(/^mobile:\s*/, 'mobile: ');
115
- if (isExecuteMethod(script)) {
116
- const executeMethodArgs = preprocessExecuteMethodArgs(script, args);
117
- return await this.executeMethod(script, [executeMethodArgs]);
118
- } else if (this.isWebContext()) {
119
- const atomsArgs = this.convertElementsForAtoms(/** @type {readonly any[]} */ (args));
120
- const result = await this.executeAtom('execute_script', [script, atomsArgs]);
121
- return this.cacheWebElements(result);
122
- } else {
123
- throw new errors.NotImplementedError();
124
- }
125
- },
126
- /**
127
- * @this {XCUITestDriver}
128
- * @group Mobile Web Only
129
- */
130
- async executeAsync(script, args) {
131
- if (!this.isWebContext()) {
132
- throw new errors.NotImplementedError();
133
- }
134
-
135
- args = this.convertElementsForAtoms(args);
136
- this.asyncWaitMs = this.asyncWaitMs || 0;
137
- const promise = (/** @type {import('appium-remote-debugger').RemoteDebugger} */ (this.remote)).executeAtomAsync(
138
- 'execute_async_script',
139
- [script, args, this.asyncWaitMs],
140
- this.curWebFrames,
141
- );
142
- return this.cacheWebElements(await this.waitForAtom(promise));
143
- },
144
- };
145
-
146
146
  /**
147
147
  * @template [T=any]
148
148
  * @typedef {import('@appium/types').StringRecord<T>} StringRecord
@@ -2,7 +2,7 @@ import _ from 'lodash';
2
2
  import {fs, tempDir, mkdirp, zip, util} from 'appium/support';
3
3
  import path from 'path';
4
4
  import {services} from 'appium-ios-device';
5
- import {pullFile, pullFolder, pushFile} from '../ios-fs-helpers';
5
+ import {pullFile as iosPullFile, pullFolder as iosPullFolder, pushFile as iosPushFile} from '../ios-fs-helpers';
6
6
  import {errors} from 'appium/driver';
7
7
 
8
8
  const CONTAINER_PATH_MARKER = '@';
@@ -192,7 +192,7 @@ async function pushFileToSimulator(remotePath, base64Data) {
192
192
  async function pushFileToRealDevice(remotePath, base64Data) {
193
193
  const {service, relativePath} = await createService.bind(this)(remotePath);
194
194
  try {
195
- await pushFile(service, Buffer.from(base64Data, 'base64'), relativePath);
195
+ await iosPushFile(service, Buffer.from(base64Data, 'base64'), relativePath);
196
196
  } catch (e) {
197
197
  this.log.debug(e.stack);
198
198
  throw new Error(`Could not push the file to '${remotePath}'. Original error: ${e.message}`);
@@ -291,8 +291,8 @@ async function pullFromRealDevice(remotePath, isFile) {
291
291
  }
292
292
 
293
293
  return fileInfo.isFile()
294
- ? (await pullFile(service, relativePath)).toString('base64')
295
- : (await pullFolder(service, relativePath)).toString();
294
+ ? (await iosPullFile(service, relativePath)).toString('base64')
295
+ : (await iosPullFolder(service, relativePath)).toString();
296
296
  } finally {
297
297
  service.close();
298
298
  }
@@ -369,143 +369,141 @@ async function deleteFromRealDevice(remotePath) {
369
369
  }
370
370
  }
371
371
 
372
- export default {
373
- /**
374
- * Pushes the given data to a file on the remote device
375
- *
376
- * @param {string} remotePath The full path to the remote file or
377
- * a file inside a package bundle. Check the documentation on
378
- * `pushFileToRealDevice` and `pushFileToSimulator` for more information
379
- * on acceptable values.
380
- * @param {string} base64Data Base64 encoded data to be written to the
381
- * remote file. The remote file will be silently overridden if it already exists.
382
- * @throws {Error} If there was an error while pushing the data
383
- * @this {XCUITestDriver}
384
- */
385
- async pushFile(remotePath, base64Data) {
386
- if (remotePath.endsWith('/')) {
387
- throw new errors.InvalidArgumentError(
388
- `It is expected that remote path points to a file and not to a folder. ` +
389
- `'${remotePath}' is given instead`,
390
- );
391
- }
392
- if (_.isArray(base64Data)) {
393
- // some clients (ahem) java, send a byte array encoding utf8 characters
394
- // instead of a string, which would be infinitely better!
395
- base64Data = Buffer.from(base64Data).toString('utf8');
396
- }
397
- return this.isSimulator()
398
- ? await pushFileToSimulator.bind(this)(remotePath, base64Data)
399
- : await pushFileToRealDevice.bind(this)(remotePath, base64Data);
400
- },
372
+ /**
373
+ * Pushes the given data to a file on the remote device
374
+ *
375
+ * @param {string} remotePath The full path to the remote file or
376
+ * a file inside a package bundle. Check the documentation on
377
+ * `pushFileToRealDevice` and `pushFileToSimulator` for more information
378
+ * on acceptable values.
379
+ * @param {string} base64Data Base64 encoded data to be written to the
380
+ * remote file. The remote file will be silently overridden if it already exists.
381
+ * @throws {Error} If there was an error while pushing the data
382
+ * @this {XCUITestDriver}
383
+ */
384
+ export async function pushFile(remotePath, base64Data) {
385
+ if (remotePath.endsWith('/')) {
386
+ throw new errors.InvalidArgumentError(
387
+ `It is expected that remote path points to a file and not to a folder. ` +
388
+ `'${remotePath}' is given instead`,
389
+ );
390
+ }
391
+ if (_.isArray(base64Data)) {
392
+ // some clients (ahem) java, send a byte array encoding utf8 characters
393
+ // instead of a string, which would be infinitely better!
394
+ base64Data = Buffer.from(base64Data).toString('utf8');
395
+ }
396
+ return this.isSimulator()
397
+ ? await pushFileToSimulator.bind(this)(remotePath, base64Data)
398
+ : await pushFileToRealDevice.bind(this)(remotePath, base64Data);
399
+ }
401
400
 
402
- /**
403
- * Pushes the given data to a file on the remote device.
404
- *
405
- * @param {string} remotePath - The full path to the remote file
406
- * or a specially formatted path, which points to an item inside an app bundle.
407
- * @param {string} payload - Base64-encoded content of the file to be pushed.
408
- * @this {XCUITestDriver}
409
- */
410
- async mobilePushFile(remotePath, payload) {
411
- return await this.pushFile(remotePath, payload);
412
- },
401
+ /**
402
+ * Pushes the given data to a file on the remote device.
403
+ *
404
+ * @param {string} remotePath - The full path to the remote file
405
+ * or a specially formatted path, which points to an item inside an app bundle.
406
+ * @param {string} payload - Base64-encoded content of the file to be pushed.
407
+ * @this {XCUITestDriver}
408
+ */
409
+ export async function mobilePushFile(remotePath, payload) {
410
+ return await this.pushFile(remotePath, payload);
411
+ }
413
412
 
414
- /**
415
- * Pulls a remote file from the device.
416
- *
417
- * @param {string} remotePath The full path to the remote file
418
- * or a specially formatted path, which points to an item inside app bundle.
419
- * See the documentation for `pullFromRealDevice` and `pullFromSimulator`
420
- * to get more information on acceptable values.
421
- * @returns {Promise<string>} Base64 encoded content of the pulled file
422
- * @throws {Error} If the pull operation failed
423
- * @this {XCUITestDriver}
424
- */
425
- async pullFile(remotePath) {
426
- if (remotePath.endsWith('/')) {
427
- throw new errors.InvalidArgumentError(
428
- `It is expected that remote path points to a file and not to a folder. ` +
429
- `'${remotePath}' is given instead`,
430
- );
431
- }
432
- return this.isSimulator()
433
- ? await pullFromSimulator.bind(this)(remotePath, true)
434
- : await pullFromRealDevice.bind(this)(remotePath, true);
435
- },
413
+ /**
414
+ * Pulls a remote file from the device.
415
+ *
416
+ * @param {string} remotePath The full path to the remote file
417
+ * or a specially formatted path, which points to an item inside app bundle.
418
+ * See the documentation for `pullFromRealDevice` and `pullFromSimulator`
419
+ * to get more information on acceptable values.
420
+ * @returns {Promise<string>} Base64 encoded content of the pulled file
421
+ * @throws {Error} If the pull operation failed
422
+ * @this {XCUITestDriver}
423
+ */
424
+ export async function pullFile(remotePath) {
425
+ if (remotePath.endsWith('/')) {
426
+ throw new errors.InvalidArgumentError(
427
+ `It is expected that remote path points to a file and not to a folder. ` +
428
+ `'${remotePath}' is given instead`,
429
+ );
430
+ }
431
+ return this.isSimulator()
432
+ ? await pullFromSimulator.bind(this)(remotePath, true)
433
+ : await pullFromRealDevice.bind(this)(remotePath, true);
434
+ }
436
435
 
437
- /**
438
- * Pulls a remote file from the device.
439
- *
440
- * @param {string} remotePath - The full path to the remote file
441
- * or a specially formatted path, which points to an item inside app bundle. See the documentation for `pullFromRealDevice` and `pullFromSimulator` to get more information on acceptable values.
442
- * @returns {Promise<string>} The same as in `pullFile`
443
- * @this {XCUITestDriver}
444
- */
445
- async mobilePullFile(remotePath) {
446
- return await this.pullFile(remotePath);
447
- },
436
+ /**
437
+ * Pulls a remote file from the device.
438
+ *
439
+ * @param {string} remotePath - The full path to the remote file
440
+ * or a specially formatted path, which points to an item inside app bundle. See the documentation for `pullFromRealDevice` and `pullFromSimulator` to get more information on acceptable values.
441
+ * @returns {Promise<string>} The same as in `pullFile`
442
+ * @this {XCUITestDriver}
443
+ */
444
+ export async function mobilePullFile(remotePath) {
445
+ return await this.pullFile(remotePath);
446
+ }
448
447
 
449
- /**
450
- * Delete a remote folder from the device.
451
- *
452
- * @param {string} remotePath - The full path to the remote folder or a specially formatted path, which points to an item inside app bundle. See the documentation for `pullFromRealDevice` and `pullFromSimulator` to get more information on acceptable values.
453
- * @this {XCUITestDriver}
454
- * @returns {Promise<void>}
455
- */
456
- async mobileDeleteFolder(remotePath) {
457
- if (!remotePath.endsWith('/')) {
458
- remotePath = `${remotePath}/`;
459
- }
460
- await deleteFileOrFolder.bind(this)(remotePath);
461
- },
448
+ /**
449
+ * Delete a remote folder from the device.
450
+ *
451
+ * @param {string} remotePath - The full path to the remote folder or a specially formatted path, which points to an item inside app bundle. See the documentation for `pullFromRealDevice` and `pullFromSimulator` to get more information on acceptable values.
452
+ * @this {XCUITestDriver}
453
+ * @returns {Promise<void>}
454
+ */
455
+ export async function mobileDeleteFolder(remotePath) {
456
+ if (!remotePath.endsWith('/')) {
457
+ remotePath = `${remotePath}/`;
458
+ }
459
+ await deleteFileOrFolder.bind(this)(remotePath);
460
+ }
462
461
 
463
- /**
464
- * Delete a remote file from the device.
465
- *
466
- * @param {string} remotePath - The full path to the remote file or a specially formatted path, which points to an item inside app bundle. See the documentation for `pullFromRealDevice` and `pullFromSimulator` to get more information on acceptable values.
467
- * @this {XCUITestDriver}
468
- * @returns {Promise<void>}
469
- */
470
- async mobileDeleteFile(remotePath) {
471
- if (remotePath.endsWith('/')) {
472
- throw new errors.InvalidArgumentError(
473
- `It is expected that remote path points to a file and not to a folder. ` +
474
- `'${remotePath}' is given instead`,
475
- );
476
- }
477
- await deleteFileOrFolder.bind(this)(remotePath);
478
- },
462
+ /**
463
+ * Delete a remote file from the device.
464
+ *
465
+ * @param {string} remotePath - The full path to the remote file or a specially formatted path, which points to an item inside app bundle. See the documentation for `pullFromRealDevice` and `pullFromSimulator` to get more information on acceptable values.
466
+ * @this {XCUITestDriver}
467
+ * @returns {Promise<void>}
468
+ */
469
+ export async function mobileDeleteFile(remotePath) {
470
+ if (remotePath.endsWith('/')) {
471
+ throw new errors.InvalidArgumentError(
472
+ `It is expected that remote path points to a file and not to a folder. ` +
473
+ `'${remotePath}' is given instead`,
474
+ );
475
+ }
476
+ await deleteFileOrFolder.bind(this)(remotePath);
477
+ }
479
478
 
480
- /**
481
- * Pulls the whole folder from the remote device
482
- *
483
- * @param {string} remotePath The full path to a folder on the
484
- * remote device or a folder inside an application bundle
485
- * @returns {Promise<string>} Zipped and base64-encoded content of the folder
486
- * @throws {Error} If there was a failure while getting the folder content
487
- * @this {XCUITestDriver}
488
- */
489
- async pullFolder(remotePath) {
490
- if (!remotePath.endsWith('/')) {
491
- remotePath = `${remotePath}/`;
492
- }
493
- return this.isSimulator()
494
- ? await pullFromSimulator.bind(this)(remotePath, false)
495
- : await pullFromRealDevice.bind(this)(remotePath, false);
496
- },
479
+ /**
480
+ * Pulls the whole folder from the remote device
481
+ *
482
+ * @param {string} remotePath The full path to a folder on the
483
+ * remote device or a folder inside an application bundle
484
+ * @returns {Promise<string>} Zipped and base64-encoded content of the folder
485
+ * @throws {Error} If there was a failure while getting the folder content
486
+ * @this {XCUITestDriver}
487
+ */
488
+ export async function pullFolder(remotePath) {
489
+ if (!remotePath.endsWith('/')) {
490
+ remotePath = `${remotePath}/`;
491
+ }
492
+ return this.isSimulator()
493
+ ? await pullFromSimulator.bind(this)(remotePath, false)
494
+ : await pullFromRealDevice.bind(this)(remotePath, false);
495
+ }
497
496
 
498
- /**
499
- * Pulls the whole folder from the device under test.
500
- *
501
- * @param {string} remotePath - The full path to the remote folder
502
- * @returns {Promise<string>} The same as `pullFolder`
503
- * @this {XCUITestDriver}
504
- */
505
- async mobilePullFolder(remotePath) {
506
- return await this.pullFolder(remotePath);
507
- },
508
- };
497
+ /**
498
+ * Pulls the whole folder from the device under test.
499
+ *
500
+ * @param {string} remotePath - The full path to the remote folder
501
+ * @returns {Promise<string>} The same as `pullFolder`
502
+ * @this {XCUITestDriver}
503
+ */
504
+ export async function mobilePullFolder(remotePath) {
505
+ return await this.pullFolder(remotePath);
506
+ }
509
507
 
510
508
  /**
511
509
  * @typedef {import('../driver').XCUITestDriver} XCUITestDriver