@limrun/appium-xcuitest-driver 10.4.3-lim.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/CHANGELOG.md +2600 -0
  2. package/LICENSE +201 -0
  3. package/README.md +55 -0
  4. package/build/index.d.ts +5 -0
  5. package/build/index.js +41 -0
  6. package/build/lib/app-infos-cache.d.ts +62 -0
  7. package/build/lib/app-infos-cache.d.ts.map +1 -0
  8. package/build/lib/app-infos-cache.js +180 -0
  9. package/build/lib/app-infos-cache.js.map +1 -0
  10. package/build/lib/app-utils.d.ts +89 -0
  11. package/build/lib/app-utils.d.ts.map +1 -0
  12. package/build/lib/app-utils.js +657 -0
  13. package/build/lib/app-utils.js.map +1 -0
  14. package/build/lib/commands/active-app-info.d.ts +9 -0
  15. package/build/lib/commands/active-app-info.d.ts.map +1 -0
  16. package/build/lib/commands/active-app-info.js +14 -0
  17. package/build/lib/commands/active-app-info.js.map +1 -0
  18. package/build/lib/commands/advanced-battery-types.d.ts +444 -0
  19. package/build/lib/commands/advanced-battery-types.d.ts.map +1 -0
  20. package/build/lib/commands/advanced-battery-types.js +8 -0
  21. package/build/lib/commands/advanced-battery-types.js.map +1 -0
  22. package/build/lib/commands/alert.d.ts +45 -0
  23. package/build/lib/commands/alert.d.ts.map +1 -0
  24. package/build/lib/commands/alert.js +87 -0
  25. package/build/lib/commands/alert.js.map +1 -0
  26. package/build/lib/commands/app-management.d.ts +153 -0
  27. package/build/lib/commands/app-management.d.ts.map +1 -0
  28. package/build/lib/commands/app-management.js +323 -0
  29. package/build/lib/commands/app-management.js.map +1 -0
  30. package/build/lib/commands/app-strings.d.ts +16 -0
  31. package/build/lib/commands/app-strings.d.ts.map +1 -0
  32. package/build/lib/commands/app-strings.js +30 -0
  33. package/build/lib/commands/app-strings.js.map +1 -0
  34. package/build/lib/commands/appearance.d.ts +22 -0
  35. package/build/lib/commands/appearance.d.ts.map +1 -0
  36. package/build/lib/commands/appearance.js +74 -0
  37. package/build/lib/commands/appearance.js.map +1 -0
  38. package/build/lib/commands/audit.d.ts +43 -0
  39. package/build/lib/commands/audit.d.ts.map +1 -0
  40. package/build/lib/commands/audit.js +31 -0
  41. package/build/lib/commands/audit.js.map +1 -0
  42. package/build/lib/commands/battery.d.ts +13 -0
  43. package/build/lib/commands/battery.d.ts.map +1 -0
  44. package/build/lib/commands/battery.js +49 -0
  45. package/build/lib/commands/battery.js.map +1 -0
  46. package/build/lib/commands/bidi/constants.d.ts +6 -0
  47. package/build/lib/commands/bidi/constants.d.ts.map +1 -0
  48. package/build/lib/commands/bidi/constants.js +10 -0
  49. package/build/lib/commands/bidi/constants.js.map +1 -0
  50. package/build/lib/commands/bidi/models.d.ts +9 -0
  51. package/build/lib/commands/bidi/models.d.ts.map +1 -0
  52. package/build/lib/commands/bidi/models.js +54 -0
  53. package/build/lib/commands/bidi/models.js.map +1 -0
  54. package/build/lib/commands/bidi/types.d.ts +26 -0
  55. package/build/lib/commands/bidi/types.d.ts.map +1 -0
  56. package/build/lib/commands/bidi/types.js +4 -0
  57. package/build/lib/commands/bidi/types.js.map +1 -0
  58. package/build/lib/commands/biometric.d.ts +32 -0
  59. package/build/lib/commands/biometric.d.ts.map +1 -0
  60. package/build/lib/commands/biometric.js +54 -0
  61. package/build/lib/commands/biometric.js.map +1 -0
  62. package/build/lib/commands/certificate.d.ts +50 -0
  63. package/build/lib/commands/certificate.d.ts.map +1 -0
  64. package/build/lib/commands/certificate.js +454 -0
  65. package/build/lib/commands/certificate.js.map +1 -0
  66. package/build/lib/commands/clipboard.d.ts +21 -0
  67. package/build/lib/commands/clipboard.d.ts.map +1 -0
  68. package/build/lib/commands/clipboard.js +36 -0
  69. package/build/lib/commands/clipboard.js.map +1 -0
  70. package/build/lib/commands/condition.d.ts +102 -0
  71. package/build/lib/commands/condition.d.ts.map +1 -0
  72. package/build/lib/commands/condition.js +146 -0
  73. package/build/lib/commands/condition.js.map +1 -0
  74. package/build/lib/commands/content-size.d.ts +30 -0
  75. package/build/lib/commands/content-size.d.ts.map +1 -0
  76. package/build/lib/commands/content-size.js +67 -0
  77. package/build/lib/commands/content-size.js.map +1 -0
  78. package/build/lib/commands/context.d.ts +191 -0
  79. package/build/lib/commands/context.d.ts.map +1 -0
  80. package/build/lib/commands/context.js +625 -0
  81. package/build/lib/commands/context.js.map +1 -0
  82. package/build/lib/commands/deviceInfo.d.ts +12 -0
  83. package/build/lib/commands/deviceInfo.d.ts.map +1 -0
  84. package/build/lib/commands/deviceInfo.js +25 -0
  85. package/build/lib/commands/deviceInfo.js.map +1 -0
  86. package/build/lib/commands/element.d.ts +108 -0
  87. package/build/lib/commands/element.d.ts.map +1 -0
  88. package/build/lib/commands/element.js +395 -0
  89. package/build/lib/commands/element.js.map +1 -0
  90. package/build/lib/commands/enum.d.ts +105 -0
  91. package/build/lib/commands/enum.d.ts.map +1 -0
  92. package/build/lib/commands/enum.js +113 -0
  93. package/build/lib/commands/enum.js.map +1 -0
  94. package/build/lib/commands/execute.d.ts +33 -0
  95. package/build/lib/commands/execute.d.ts.map +1 -0
  96. package/build/lib/commands/execute.js +142 -0
  97. package/build/lib/commands/execute.js.map +1 -0
  98. package/build/lib/commands/file-movement.d.ts +90 -0
  99. package/build/lib/commands/file-movement.d.ts.map +1 -0
  100. package/build/lib/commands/file-movement.js +477 -0
  101. package/build/lib/commands/file-movement.js.map +1 -0
  102. package/build/lib/commands/find.d.ts +21 -0
  103. package/build/lib/commands/find.d.ts.map +1 -0
  104. package/build/lib/commands/find.js +199 -0
  105. package/build/lib/commands/find.js.map +1 -0
  106. package/build/lib/commands/general.d.ts +137 -0
  107. package/build/lib/commands/general.d.ts.map +1 -0
  108. package/build/lib/commands/general.js +270 -0
  109. package/build/lib/commands/general.js.map +1 -0
  110. package/build/lib/commands/geolocation.d.ts +57 -0
  111. package/build/lib/commands/geolocation.d.ts.map +1 -0
  112. package/build/lib/commands/geolocation.js +58 -0
  113. package/build/lib/commands/geolocation.js.map +1 -0
  114. package/build/lib/commands/gesture.d.ts +283 -0
  115. package/build/lib/commands/gesture.d.ts.map +1 -0
  116. package/build/lib/commands/gesture.js +565 -0
  117. package/build/lib/commands/gesture.js.map +1 -0
  118. package/build/lib/commands/hid-event.d.ts +2773 -0
  119. package/build/lib/commands/hid-event.d.ts.map +1 -0
  120. package/build/lib/commands/hid-event.js +1633 -0
  121. package/build/lib/commands/hid-event.js.map +1 -0
  122. package/build/lib/commands/increase-contrast.d.ts +24 -0
  123. package/build/lib/commands/increase-contrast.d.ts.map +1 -0
  124. package/build/lib/commands/increase-contrast.js +49 -0
  125. package/build/lib/commands/increase-contrast.js.map +1 -0
  126. package/build/lib/commands/iohid.d.ts +1372 -0
  127. package/build/lib/commands/iohid.d.ts.map +1 -0
  128. package/build/lib/commands/iohid.js +63 -0
  129. package/build/lib/commands/iohid.js.map +1 -0
  130. package/build/lib/commands/keyboard.d.ts +32 -0
  131. package/build/lib/commands/keyboard.d.ts.map +1 -0
  132. package/build/lib/commands/keyboard.js +67 -0
  133. package/build/lib/commands/keyboard.js.map +1 -0
  134. package/build/lib/commands/keychains.d.ts +10 -0
  135. package/build/lib/commands/keychains.d.ts.map +1 -0
  136. package/build/lib/commands/keychains.js +22 -0
  137. package/build/lib/commands/keychains.js.map +1 -0
  138. package/build/lib/commands/localization.d.ts +17 -0
  139. package/build/lib/commands/localization.d.ts.map +1 -0
  140. package/build/lib/commands/localization.js +34 -0
  141. package/build/lib/commands/localization.js.map +1 -0
  142. package/build/lib/commands/location.d.ts +40 -0
  143. package/build/lib/commands/location.d.ts.map +1 -0
  144. package/build/lib/commands/location.js +121 -0
  145. package/build/lib/commands/location.js.map +1 -0
  146. package/build/lib/commands/lock.d.ts +23 -0
  147. package/build/lib/commands/lock.d.ts.map +1 -0
  148. package/build/lib/commands/lock.js +49 -0
  149. package/build/lib/commands/lock.js.map +1 -0
  150. package/build/lib/commands/log.d.ts +68 -0
  151. package/build/lib/commands/log.d.ts.map +1 -0
  152. package/build/lib/commands/log.js +287 -0
  153. package/build/lib/commands/log.js.map +1 -0
  154. package/build/lib/commands/memory.d.ts +11 -0
  155. package/build/lib/commands/memory.d.ts.map +1 -0
  156. package/build/lib/commands/memory.js +49 -0
  157. package/build/lib/commands/memory.js.map +1 -0
  158. package/build/lib/commands/navigation.d.ts +44 -0
  159. package/build/lib/commands/navigation.d.ts.map +1 -0
  160. package/build/lib/commands/navigation.js +121 -0
  161. package/build/lib/commands/navigation.js.map +1 -0
  162. package/build/lib/commands/notifications.d.ts +28 -0
  163. package/build/lib/commands/notifications.d.ts.map +1 -0
  164. package/build/lib/commands/notifications.js +64 -0
  165. package/build/lib/commands/notifications.js.map +1 -0
  166. package/build/lib/commands/pasteboard.d.ts +23 -0
  167. package/build/lib/commands/pasteboard.d.ts.map +1 -0
  168. package/build/lib/commands/pasteboard.js +43 -0
  169. package/build/lib/commands/pasteboard.js.map +1 -0
  170. package/build/lib/commands/pcap.d.ts +54 -0
  171. package/build/lib/commands/pcap.d.ts.map +1 -0
  172. package/build/lib/commands/pcap.js +149 -0
  173. package/build/lib/commands/pcap.js.map +1 -0
  174. package/build/lib/commands/performance.d.ts +85 -0
  175. package/build/lib/commands/performance.d.ts.map +1 -0
  176. package/build/lib/commands/performance.js +331 -0
  177. package/build/lib/commands/performance.js.map +1 -0
  178. package/build/lib/commands/permissions.d.ts +36 -0
  179. package/build/lib/commands/permissions.d.ts.map +1 -0
  180. package/build/lib/commands/permissions.js +80 -0
  181. package/build/lib/commands/permissions.js.map +1 -0
  182. package/build/lib/commands/proxy-helper.d.ts +15 -0
  183. package/build/lib/commands/proxy-helper.d.ts.map +1 -0
  184. package/build/lib/commands/proxy-helper.js +117 -0
  185. package/build/lib/commands/proxy-helper.js.map +1 -0
  186. package/build/lib/commands/record-audio.d.ts +69 -0
  187. package/build/lib/commands/record-audio.d.ts.map +1 -0
  188. package/build/lib/commands/record-audio.js +228 -0
  189. package/build/lib/commands/record-audio.js.map +1 -0
  190. package/build/lib/commands/recordscreen.d.ts +89 -0
  191. package/build/lib/commands/recordscreen.d.ts.map +1 -0
  192. package/build/lib/commands/recordscreen.js +326 -0
  193. package/build/lib/commands/recordscreen.js.map +1 -0
  194. package/build/lib/commands/screenshots.d.ts +16 -0
  195. package/build/lib/commands/screenshots.d.ts.map +1 -0
  196. package/build/lib/commands/screenshots.js +129 -0
  197. package/build/lib/commands/screenshots.js.map +1 -0
  198. package/build/lib/commands/simctl.d.ts +27 -0
  199. package/build/lib/commands/simctl.d.ts.map +1 -0
  200. package/build/lib/commands/simctl.js +65 -0
  201. package/build/lib/commands/simctl.js.map +1 -0
  202. package/build/lib/commands/source.d.ts +16 -0
  203. package/build/lib/commands/source.d.ts.map +1 -0
  204. package/build/lib/commands/source.js +128 -0
  205. package/build/lib/commands/source.js.map +1 -0
  206. package/build/lib/commands/timeouts.d.ts +53 -0
  207. package/build/lib/commands/timeouts.d.ts.map +1 -0
  208. package/build/lib/commands/timeouts.js +71 -0
  209. package/build/lib/commands/timeouts.js.map +1 -0
  210. package/build/lib/commands/types.d.ts +539 -0
  211. package/build/lib/commands/types.d.ts.map +1 -0
  212. package/build/lib/commands/types.js +3 -0
  213. package/build/lib/commands/types.js.map +1 -0
  214. package/build/lib/commands/web.d.ts +297 -0
  215. package/build/lib/commands/web.d.ts.map +1 -0
  216. package/build/lib/commands/web.js +1029 -0
  217. package/build/lib/commands/web.js.map +1 -0
  218. package/build/lib/commands/xctest-record-screen.d.ts +92 -0
  219. package/build/lib/commands/xctest-record-screen.d.ts.map +1 -0
  220. package/build/lib/commands/xctest-record-screen.js +193 -0
  221. package/build/lib/commands/xctest-record-screen.js.map +1 -0
  222. package/build/lib/commands/xctest.d.ts +71 -0
  223. package/build/lib/commands/xctest.d.ts.map +1 -0
  224. package/build/lib/commands/xctest.js +257 -0
  225. package/build/lib/commands/xctest.js.map +1 -0
  226. package/build/lib/css-converter.d.ts +10 -0
  227. package/build/lib/css-converter.d.ts.map +1 -0
  228. package/build/lib/css-converter.js +258 -0
  229. package/build/lib/css-converter.js.map +1 -0
  230. package/build/lib/desired-caps.d.ts +506 -0
  231. package/build/lib/desired-caps.d.ts.map +1 -0
  232. package/build/lib/desired-caps.js +400 -0
  233. package/build/lib/desired-caps.js.map +1 -0
  234. package/build/lib/device-connections-factory.d.ts +13 -0
  235. package/build/lib/device-connections-factory.d.ts.map +1 -0
  236. package/build/lib/device-connections-factory.js +244 -0
  237. package/build/lib/device-connections-factory.js.map +1 -0
  238. package/build/lib/device-log/helpers.d.ts +10 -0
  239. package/build/lib/device-log/helpers.d.ts.map +1 -0
  240. package/build/lib/device-log/helpers.js +37 -0
  241. package/build/lib/device-log/helpers.js.map +1 -0
  242. package/build/lib/device-log/ios-crash-log.d.ts +34 -0
  243. package/build/lib/device-log/ios-crash-log.d.ts.map +1 -0
  244. package/build/lib/device-log/ios-crash-log.js +141 -0
  245. package/build/lib/device-log/ios-crash-log.js.map +1 -0
  246. package/build/lib/device-log/ios-device-log.d.ts +19 -0
  247. package/build/lib/device-log/ios-device-log.d.ts.map +1 -0
  248. package/build/lib/device-log/ios-device-log.js +42 -0
  249. package/build/lib/device-log/ios-device-log.js.map +1 -0
  250. package/build/lib/device-log/ios-log.d.ts +24 -0
  251. package/build/lib/device-log/ios-log.d.ts.map +1 -0
  252. package/build/lib/device-log/ios-log.js +50 -0
  253. package/build/lib/device-log/ios-log.js.map +1 -0
  254. package/build/lib/device-log/ios-performance-log.d.ts +18 -0
  255. package/build/lib/device-log/ios-performance-log.d.ts.map +1 -0
  256. package/build/lib/device-log/ios-performance-log.js +43 -0
  257. package/build/lib/device-log/ios-performance-log.js.map +1 -0
  258. package/build/lib/device-log/ios-simulator-log.d.ts +38 -0
  259. package/build/lib/device-log/ios-simulator-log.d.ts.map +1 -0
  260. package/build/lib/device-log/ios-simulator-log.js +184 -0
  261. package/build/lib/device-log/ios-simulator-log.js.map +1 -0
  262. package/build/lib/device-log/line-consuming-log.d.ts +9 -0
  263. package/build/lib/device-log/line-consuming-log.d.ts.map +1 -0
  264. package/build/lib/device-log/line-consuming-log.js +16 -0
  265. package/build/lib/device-log/line-consuming-log.js.map +1 -0
  266. package/build/lib/device-log/safari-console-log.d.ts +67 -0
  267. package/build/lib/device-log/safari-console-log.d.ts.map +1 -0
  268. package/build/lib/device-log/safari-console-log.js +81 -0
  269. package/build/lib/device-log/safari-console-log.js.map +1 -0
  270. package/build/lib/device-log/safari-network-log.d.ts +75 -0
  271. package/build/lib/device-log/safari-network-log.d.ts.map +1 -0
  272. package/build/lib/device-log/safari-network-log.js +47 -0
  273. package/build/lib/device-log/safari-network-log.js.map +1 -0
  274. package/build/lib/doctor/checks.d.ts +3 -0
  275. package/build/lib/doctor/checks.d.ts.map +1 -0
  276. package/build/lib/doctor/checks.js +39 -0
  277. package/build/lib/doctor/checks.js.map +1 -0
  278. package/build/lib/doctor/optional-checks.d.ts +46 -0
  279. package/build/lib/doctor/optional-checks.d.ts.map +1 -0
  280. package/build/lib/doctor/optional-checks.js +129 -0
  281. package/build/lib/doctor/optional-checks.js.map +1 -0
  282. package/build/lib/doctor/required-checks.d.ts +42 -0
  283. package/build/lib/doctor/required-checks.d.ts.map +1 -0
  284. package/build/lib/doctor/required-checks.js +94 -0
  285. package/build/lib/doctor/required-checks.js.map +1 -0
  286. package/build/lib/doctor/utils.d.ts +8 -0
  287. package/build/lib/doctor/utils.d.ts.map +1 -0
  288. package/build/lib/doctor/utils.js +21 -0
  289. package/build/lib/doctor/utils.js.map +1 -0
  290. package/build/lib/driver.d.ts +2429 -0
  291. package/build/lib/driver.d.ts.map +1 -0
  292. package/build/lib/driver.js +1967 -0
  293. package/build/lib/driver.js.map +1 -0
  294. package/build/lib/execute-method-map.d.ts +552 -0
  295. package/build/lib/execute-method-map.d.ts.map +1 -0
  296. package/build/lib/execute-method-map.js +586 -0
  297. package/build/lib/execute-method-map.js.map +1 -0
  298. package/build/lib/ios-fs-helpers.d.ts +75 -0
  299. package/build/lib/ios-fs-helpers.d.ts.map +1 -0
  300. package/build/lib/ios-fs-helpers.js +370 -0
  301. package/build/lib/ios-fs-helpers.js.map +1 -0
  302. package/build/lib/ios-generic-simulators.d.ts +6 -0
  303. package/build/lib/ios-generic-simulators.d.ts.map +1 -0
  304. package/build/lib/ios-generic-simulators.js +14 -0
  305. package/build/lib/ios-generic-simulators.js.map +1 -0
  306. package/build/lib/logger.d.ts +3 -0
  307. package/build/lib/logger.d.ts.map +1 -0
  308. package/build/lib/logger.js +6 -0
  309. package/build/lib/logger.js.map +1 -0
  310. package/build/lib/method-map.d.ts +229 -0
  311. package/build/lib/method-map.d.ts.map +1 -0
  312. package/build/lib/method-map.js +200 -0
  313. package/build/lib/method-map.js.map +1 -0
  314. package/build/lib/real-device-clients/base-device-client.d.ts +22 -0
  315. package/build/lib/real-device-clients/base-device-client.d.ts.map +1 -0
  316. package/build/lib/real-device-clients/base-device-client.js +14 -0
  317. package/build/lib/real-device-clients/base-device-client.js.map +1 -0
  318. package/build/lib/real-device-clients/py-ios-device-client.d.ts +21 -0
  319. package/build/lib/real-device-clients/py-ios-device-client.d.ts.map +1 -0
  320. package/build/lib/real-device-clients/py-ios-device-client.js +125 -0
  321. package/build/lib/real-device-clients/py-ios-device-client.js.map +1 -0
  322. package/build/lib/real-device-management.d.ts +53 -0
  323. package/build/lib/real-device-management.d.ts.map +1 -0
  324. package/build/lib/real-device-management.js +128 -0
  325. package/build/lib/real-device-management.js.map +1 -0
  326. package/build/lib/real-device.d.ts +112 -0
  327. package/build/lib/real-device.d.ts.map +1 -0
  328. package/build/lib/real-device.js +352 -0
  329. package/build/lib/real-device.js.map +1 -0
  330. package/build/lib/simulator-management.d.ts +96 -0
  331. package/build/lib/simulator-management.d.ts.map +1 -0
  332. package/build/lib/simulator-management.js +278 -0
  333. package/build/lib/simulator-management.js.map +1 -0
  334. package/build/lib/stubs.d.ts +3 -0
  335. package/build/lib/stubs.d.ts.map +1 -0
  336. package/build/lib/stubs.js +3 -0
  337. package/build/lib/stubs.js.map +1 -0
  338. package/build/lib/types.d.ts +31 -0
  339. package/build/lib/types.d.ts.map +1 -0
  340. package/build/lib/types.js +3 -0
  341. package/build/lib/types.js.map +1 -0
  342. package/build/lib/utils.d.ts +191 -0
  343. package/build/lib/utils.d.ts.map +1 -0
  344. package/build/lib/utils.js +549 -0
  345. package/build/lib/utils.js.map +1 -0
  346. package/build/lib/xcrun.d.ts +3 -0
  347. package/build/lib/xcrun.d.ts.map +1 -0
  348. package/build/lib/xcrun.js +17 -0
  349. package/build/lib/xcrun.js.map +1 -0
  350. package/index.js +7 -0
  351. package/lib/app-infos-cache.js +187 -0
  352. package/lib/app-utils.js +710 -0
  353. package/lib/commands/active-app-info.js +12 -0
  354. package/lib/commands/advanced-battery-types.ts +454 -0
  355. package/lib/commands/alert.js +88 -0
  356. package/lib/commands/app-management.js +346 -0
  357. package/lib/commands/app-strings.js +30 -0
  358. package/lib/commands/appearance.js +71 -0
  359. package/lib/commands/audit.js +31 -0
  360. package/lib/commands/battery.js +45 -0
  361. package/lib/commands/bidi/constants.ts +6 -0
  362. package/lib/commands/bidi/models.ts +55 -0
  363. package/lib/commands/bidi/types.ts +31 -0
  364. package/lib/commands/biometric.js +53 -0
  365. package/lib/commands/certificate.js +497 -0
  366. package/lib/commands/clipboard.js +35 -0
  367. package/lib/commands/condition.js +155 -0
  368. package/lib/commands/content-size.js +68 -0
  369. package/lib/commands/context.js +705 -0
  370. package/lib/commands/deviceInfo.js +27 -0
  371. package/lib/commands/element.js +423 -0
  372. package/lib/commands/enum.ts +108 -0
  373. package/lib/commands/execute.js +153 -0
  374. package/lib/commands/file-movement.js +510 -0
  375. package/lib/commands/find.js +205 -0
  376. package/lib/commands/general.js +278 -0
  377. package/lib/commands/geolocation.js +56 -0
  378. package/lib/commands/gesture.js +596 -0
  379. package/lib/commands/hid-event.ts +1634 -0
  380. package/lib/commands/increase-contrast.js +50 -0
  381. package/lib/commands/iohid.js +64 -0
  382. package/lib/commands/keyboard.js +62 -0
  383. package/lib/commands/keychains.js +18 -0
  384. package/lib/commands/localization.js +30 -0
  385. package/lib/commands/location.js +131 -0
  386. package/lib/commands/lock.js +46 -0
  387. package/lib/commands/log.js +327 -0
  388. package/lib/commands/memory.js +51 -0
  389. package/lib/commands/navigation.js +125 -0
  390. package/lib/commands/notifications.js +66 -0
  391. package/lib/commands/pasteboard.js +42 -0
  392. package/lib/commands/pcap.js +168 -0
  393. package/lib/commands/performance.js +392 -0
  394. package/lib/commands/permissions.js +85 -0
  395. package/lib/commands/proxy-helper.js +122 -0
  396. package/lib/commands/record-audio.js +264 -0
  397. package/lib/commands/recordscreen.js +391 -0
  398. package/lib/commands/screenshots.js +137 -0
  399. package/lib/commands/simctl.js +71 -0
  400. package/lib/commands/source.js +131 -0
  401. package/lib/commands/timeouts.js +68 -0
  402. package/lib/commands/types.ts +648 -0
  403. package/lib/commands/web.js +1113 -0
  404. package/lib/commands/xctest-record-screen.js +204 -0
  405. package/lib/commands/xctest.js +285 -0
  406. package/lib/css-converter.js +311 -0
  407. package/lib/desired-caps.js +396 -0
  408. package/lib/device-connections-factory.js +269 -0
  409. package/lib/device-log/helpers.ts +40 -0
  410. package/lib/device-log/ios-crash-log.ts +166 -0
  411. package/lib/device-log/ios-device-log.ts +51 -0
  412. package/lib/device-log/ios-log.ts +70 -0
  413. package/lib/device-log/ios-performance-log.ts +50 -0
  414. package/lib/device-log/ios-simulator-log.ts +202 -0
  415. package/lib/device-log/line-consuming-log.ts +16 -0
  416. package/lib/device-log/safari-console-log.ts +117 -0
  417. package/lib/device-log/safari-network-log.ts +120 -0
  418. package/lib/doctor/checks.ts +3 -0
  419. package/lib/doctor/optional-checks.ts +173 -0
  420. package/lib/doctor/required-checks.ts +120 -0
  421. package/lib/doctor/utils.ts +18 -0
  422. package/lib/driver.js +2316 -0
  423. package/lib/execute-method-map.ts +585 -0
  424. package/lib/ios-fs-helpers.js +355 -0
  425. package/lib/ios-generic-simulators.js +11 -0
  426. package/lib/logger.js +5 -0
  427. package/lib/method-map.js +196 -0
  428. package/lib/real-device-clients/base-device-client.ts +34 -0
  429. package/lib/real-device-clients/py-ios-device-client.ts +149 -0
  430. package/lib/real-device-management.js +133 -0
  431. package/lib/real-device.js +347 -0
  432. package/lib/simulator-management.js +324 -0
  433. package/lib/stubs.ts +3 -0
  434. package/lib/types.ts +33 -0
  435. package/lib/utils.js +551 -0
  436. package/lib/xcrun.js +16 -0
  437. package/package.json +175 -0
  438. package/scripts/build-docs.js +56 -0
  439. package/scripts/build-wda.js +42 -0
  440. package/scripts/download-wda-sim.mjs +68 -0
  441. package/scripts/image-mounter.mjs +239 -0
  442. package/scripts/open-wda.mjs +15 -0
  443. package/scripts/tunnel-creation.mjs +359 -0
  444. package/scripts/utils.js +16 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Returns information about the active application.
3
+ *
4
+ * @returns {Promise<import('./types').ActiveAppInfo>} Active app information
5
+ * @throws {Error} if an error raised by command
6
+ * @this {import('../driver').XCUITestDriver}
7
+ */
8
+ export async function mobileGetActiveAppInfo() {
9
+ return /** @type {import('./types').ActiveAppInfo} */ (
10
+ await this.proxyCommand('/wda/activeAppInfo', 'GET')
11
+ );
12
+ }
@@ -0,0 +1,454 @@
1
+ export interface BatteryInfo {
2
+ level: number;
3
+ state: number;
4
+ AbsoluteCapacity: number;
5
+ AdapterDetails: AdapterDetails;
6
+ AdapterID: number;
7
+ AdapterPowerTier: number;
8
+ AdapterVoltage: number;
9
+ Current: number;
10
+ Description: string;
11
+ ErrorFlags: number;
12
+ FamilyCode: number;
13
+ IsWireless: boolean;
14
+ PMUConfiguration: number;
15
+ SharedSource: number;
16
+ Source: number;
17
+ Watts: number;
18
+ AdapterInfo: number;
19
+ Amperage: number;
20
+ AppleRawAdapterDetails: AdapterDetails[];
21
+ AppleRawBatteryVoltage: number;
22
+ AppleRawCurrentCapacity: number;
23
+ AppleRawExternalConnected: boolean;
24
+ AppleRawMaxCapacity: number;
25
+ AtCriticalLevel: boolean;
26
+ AvgTimeToEmpty: number;
27
+ BatteryCellDisconnectCount: number;
28
+ BatteryData: BatteryData;
29
+ AlgoChemID: number;
30
+ AlgoTemperature: number;
31
+ BatteryHealthMetric: number;
32
+ CellCurrentAccumulator: number[];
33
+ CellCurrentAccumulatorCount: number;
34
+ CellVoltage: number[];
35
+ CellWom: number[];
36
+ ChargeAccum: number;
37
+ ChemID: number;
38
+ ChemicalWeightedRa: number;
39
+ CycleCount: number;
40
+ DOD0: number[];
41
+ DODatEOC: number;
42
+ DailyMaxSoc: number;
43
+ DailyMinSoc: number;
44
+ DateOfFirstUse: number;
45
+ DesignCapacity: number;
46
+ Dod0AtQualifiedQmax: number;
47
+ DynamicSoc1Vcut: number;
48
+ FccComp1: number;
49
+ FccComp2: number;
50
+ FilteredCurrent: number;
51
+ FilteredCurrentRc3: number;
52
+ FilteredCurrentRc4: number;
53
+ Flags: number;
54
+ GaugeFlagRaw: number;
55
+ GaugeResetCounter: number;
56
+ ISS: number;
57
+ ITMiscStatus: number;
58
+ LifetimeData: LifetimeData;
59
+ AverageTemperature: number;
60
+ CycleCountLastQmax: number;
61
+ FlashEraseCounter: number;
62
+ FlashFailureCounter: number;
63
+ LTDataCorruptionOffset: number;
64
+ LTOCVRestCounter: number;
65
+ LTOCVRestCounterHsp: number;
66
+ LTQmaxUpdateCounter: number;
67
+ LTQmaxUpdateCounterHsp: number;
68
+ LowVoltageResidencyCounters: ChargerStatus;
69
+ MaximumChargeCurrent: number;
70
+ MaximumDischargeCurrent: number;
71
+ MaximumFCC: number;
72
+ MaximumPackVoltage: number;
73
+ MaximumQmax: number;
74
+ MaximumTemperature: number;
75
+ MinimumFCC: number;
76
+ MinimumPackVoltage: number;
77
+ MinimumQmax: number;
78
+ MinimumTemperature: number;
79
+ NCCMax: number;
80
+ NCCMin: number;
81
+ ResetCnt: number;
82
+ SafetyFaultCounter: ChargerStatus;
83
+ TemperatureSamples: number;
84
+ TimeAtHighSoc: ChargerStatus;
85
+ TotalOperatingTime: number;
86
+ UpdateTime: number;
87
+ ManufactureDate: number;
88
+ MaxCapacity: number;
89
+ MfgData: ChargerStatus;
90
+ PMUConfigured: number;
91
+ PackCurrentAccumulator: number;
92
+ PackCurrentAccumulatorCount: number;
93
+ PassedCharge: number;
94
+ PresentDOD: number[];
95
+ Qmax: number[];
96
+ QmaxDisqualificationReason: number;
97
+ Qstart: number;
98
+ RSS: number;
99
+ RSSFiltered: number;
100
+ Ra00: number;
101
+ Ra01: number;
102
+ Ra02: number;
103
+ Ra03: number;
104
+ Ra04: number;
105
+ Ra05: number;
106
+ Ra06: number;
107
+ Ra07: number;
108
+ Ra08: number;
109
+ Ra09: number;
110
+ Ra10: number;
111
+ Ra11: number;
112
+ Ra12: number;
113
+ Ra13: number;
114
+ Ra14: number;
115
+ RaTableRaw: ChargerStatus[];
116
+ ResScale: number;
117
+ ResetData: ChargerStatus;
118
+ ResetDataComms: number;
119
+ ResetDataFirmware: number;
120
+ ResetDataHardware: number;
121
+ ResetDataSoftware: number;
122
+ ResetDataWatchDog: number;
123
+ Serial: string;
124
+ SimRate: number;
125
+ Soc1Voltage: number;
126
+ StateOfCharge: number;
127
+ TrueRemainingCapacity: number;
128
+ UUID: number;
129
+ Voltage: number;
130
+ WatchdogDebugDump: ChargerStatus;
131
+ WeightedRa: number[];
132
+ iMaxAndSocSmoothTable: ChargerStatus;
133
+ BatteryInstalled: boolean;
134
+ BatteryInvalidWakeSeconds: number;
135
+ BestAdapterIndex: number;
136
+ BootPathUpdated: number;
137
+ BootVoltage: number;
138
+ CarrierMode: CarrierMode;
139
+ CarrierModeHighVoltage: number;
140
+ CarrierModeLowVoltage: number;
141
+ CarrierModeStatus: number;
142
+ ChargerConfiguration: number;
143
+ ChargerData: ChargerData;
144
+ ChargerID: number;
145
+ ChargerInhibitReason: number;
146
+ ChargerResetCounter: number;
147
+ ChargerStatus: ChargerStatus;
148
+ ChargingCurrent: number;
149
+ ChargingVoltage: number;
150
+ NotChargingReason: number;
151
+ SlowChargingReason: number;
152
+ TimeChargingThermallyLimited: number;
153
+ VacVoltageLimit: number;
154
+ CurrentCapacity: number;
155
+ DeadBatteryBootData: DeadBatteryBootData;
156
+ ActivePayloads: number;
157
+ GeneralPayload: DeadBatteryBootData;
158
+ AdapterType: number;
159
+ AverageBattSkinTemp: number;
160
+ AverageBattVirtualTemp: number;
161
+ CloakEntryCount: number;
162
+ PrechargeCount: number;
163
+ StartBatteryCapacity: number;
164
+ StartBatteryVoltage: number;
165
+ TimeOnCharger: number;
166
+ VbusType: number;
167
+ WirelessChargingMode: number;
168
+ ExternalChargeCapable: boolean;
169
+ ExternalConnected: boolean;
170
+ FullPathUpdated: number;
171
+ FullyCharged: boolean;
172
+ GasGaugeFirmwareVersion: number;
173
+ IOGeneralInterest: string;
174
+ IOReportLegend: IOReportLegend[];
175
+ IOReportChannelInfo: IOReportChannelInfo;
176
+ IOReportChannelUnit: number;
177
+ IOReportChannels: Array<Array<number | string>>;
178
+ IOReportGroupName: string;
179
+ IOReportLegendPublic: boolean;
180
+ InductiveData: InductiveData;
181
+ FirmwareMode: number;
182
+ InstantAmperage: number;
183
+ IsCharging: boolean;
184
+ KioskMode: KioskMode;
185
+ KioskModeFullChargeVoltage: number;
186
+ KioskModeHighSocDays: number;
187
+ KioskModeHighSocSeconds: number;
188
+ KioskModeLastHighSocHours: number;
189
+ KioskModeMode: number;
190
+ LPEMData: LPEMData;
191
+ Mode: number;
192
+ SOCFThreshold: number;
193
+ StatusFlags: number;
194
+ Location: number;
195
+ ManufacturerData: ChargerStatus;
196
+ NominalChargeCapacity: number;
197
+ PostChargeWaitSeconds: number;
198
+ PostDischargeWaitSeconds: number;
199
+ PowerTelemetryData: {[key: string]: number};
200
+ AccumulatedAdapterEfficiencyLoss: number;
201
+ AccumulatedBatteryDischarge: number;
202
+ AccumulatedBatteryPower: number;
203
+ AccumulatedSystemEnergyConsumed: number;
204
+ AccumulatedSystemLoad: number;
205
+ AccumulatedSystemPowerIn: number;
206
+ AccumulatedWallEnergyEstimate: number;
207
+ AdapterEfficiencyLoss: number;
208
+ AdapterEfficiencyLossAccumulatorCount: number;
209
+ BatteryDischargeAccumulatorCount: number;
210
+ BatteryPower: number;
211
+ BatteryPowerAccumulatorCount: number;
212
+ PowerTelemetryErrorCount: number;
213
+ SystemCurrentIn: number;
214
+ SystemEnergyConsumed: number;
215
+ SystemLoad: number;
216
+ SystemLoadAccumulatorCount: number;
217
+ SystemPowerIn: number;
218
+ SystemPowerInAccumulatorCount: number;
219
+ SystemVoltageIn: number;
220
+ WallEnergyEstimate: number;
221
+ Temperature: number;
222
+ TimeRemaining: number;
223
+ UserVisiblePathUpdated: number;
224
+ VirtualTemperature: number;
225
+ 'built-in': boolean;
226
+ }
227
+
228
+ export interface AdapterDetails {
229
+ AdapterID: number;
230
+ AdapterPowerTier: number;
231
+ AdapterVoltage: number;
232
+ Current: number;
233
+ Description?: string;
234
+ ErrorFlags?: number;
235
+ FamilyCode?: number;
236
+ IsWireless: boolean;
237
+ PMUConfiguration: number;
238
+ SharedSource: number;
239
+ Source: number;
240
+ Watts: number;
241
+ }
242
+
243
+ export interface BatteryData {
244
+ AlgoChemID: number;
245
+ AlgoTemperature: number;
246
+ BatteryHealthMetric: number;
247
+ CellCurrentAccumulator: number[];
248
+ CellCurrentAccumulatorCount: number;
249
+ CellVoltage: number[];
250
+ CellWom: number[];
251
+ ChargeAccum: number;
252
+ ChemID: number;
253
+ ChemicalWeightedRa: number;
254
+ CycleCount: number;
255
+ DOD0: number[];
256
+ DODatEOC: number;
257
+ DailyMaxSoc: number;
258
+ DailyMinSoc: number;
259
+ DateOfFirstUse: number;
260
+ DesignCapacity: number;
261
+ Dod0AtQualifiedQmax: number;
262
+ DynamicSoc1Vcut: number;
263
+ FccComp1: number;
264
+ FccComp2: number;
265
+ FilteredCurrent: number;
266
+ FilteredCurrentRc3: number;
267
+ FilteredCurrentRc4: number;
268
+ Flags: number;
269
+ GaugeFlagRaw: number;
270
+ GaugeResetCounter: number;
271
+ ISS: number;
272
+ ITMiscStatus: number;
273
+ LifetimeData: LifetimeData;
274
+ AverageTemperature: number;
275
+ CycleCountLastQmax: number;
276
+ FlashEraseCounter: number;
277
+ FlashFailureCounter: number;
278
+ LTDataCorruptionOffset: number;
279
+ LTOCVRestCounter: number;
280
+ LTOCVRestCounterHsp: number;
281
+ LTQmaxUpdateCounter: number;
282
+ LTQmaxUpdateCounterHsp: number;
283
+ LowVoltageResidencyCounters: ChargerStatus;
284
+ MaximumChargeCurrent: number;
285
+ MaximumDischargeCurrent: number;
286
+ MaximumFCC: number;
287
+ MaximumPackVoltage: number;
288
+ MaximumQmax: number;
289
+ MaximumTemperature: number;
290
+ MinimumFCC: number;
291
+ MinimumPackVoltage: number;
292
+ MinimumQmax: number;
293
+ MinimumTemperature: number;
294
+ NCCMax: number;
295
+ NCCMin: number;
296
+ ResetCnt: number;
297
+ SafetyFaultCounter: ChargerStatus;
298
+ TemperatureSamples: number;
299
+ TimeAtHighSoc: ChargerStatus;
300
+ TotalOperatingTime: number;
301
+ UpdateTime: number;
302
+ ManufactureDate: number;
303
+ MaxCapacity: number;
304
+ MfgData: ChargerStatus;
305
+ PMUConfigured: number;
306
+ PackCurrentAccumulator: number;
307
+ PackCurrentAccumulatorCount: number;
308
+ PassedCharge: number;
309
+ PresentDOD: number[];
310
+ Qmax: number[];
311
+ QmaxDisqualificationReason: number;
312
+ Qstart: number;
313
+ RSS: number;
314
+ RSSFiltered: number;
315
+ Ra00: number;
316
+ Ra01: number;
317
+ Ra02: number;
318
+ Ra03: number;
319
+ Ra04: number;
320
+ Ra05: number;
321
+ Ra06: number;
322
+ Ra07: number;
323
+ Ra08: number;
324
+ Ra09: number;
325
+ Ra10: number;
326
+ Ra11: number;
327
+ Ra12: number;
328
+ Ra13: number;
329
+ Ra14: number;
330
+ RaTableRaw: ChargerStatus[];
331
+ ResScale: number;
332
+ ResetData: ChargerStatus;
333
+ ResetDataComms: number;
334
+ ResetDataFirmware: number;
335
+ ResetDataHardware: number;
336
+ ResetDataSoftware: number;
337
+ ResetDataWatchDog: number;
338
+ Serial: string;
339
+ SimRate: number;
340
+ Soc1Voltage: number;
341
+ StateOfCharge: number;
342
+ TrueRemainingCapacity: number;
343
+ UUID: number;
344
+ Voltage: number;
345
+ WatchdogDebugDump: ChargerStatus;
346
+ WeightedRa: number[];
347
+ iMaxAndSocSmoothTable: ChargerStatus;
348
+ }
349
+
350
+ export interface LifetimeData {
351
+ AverageTemperature: number;
352
+ CycleCountLastQmax: number;
353
+ FlashEraseCounter: number;
354
+ FlashFailureCounter: number;
355
+ LTDataCorruptionOffset: number;
356
+ LTOCVRestCounter: number;
357
+ LTOCVRestCounterHsp: number;
358
+ LTQmaxUpdateCounter: number;
359
+ LTQmaxUpdateCounterHsp: number;
360
+ LowVoltageResidencyCounters: ChargerStatus;
361
+ MaximumChargeCurrent: number;
362
+ MaximumDischargeCurrent: number;
363
+ MaximumFCC: number;
364
+ MaximumPackVoltage: number;
365
+ MaximumQmax: number;
366
+ MaximumTemperature: number;
367
+ MinimumFCC: number;
368
+ MinimumPackVoltage: number;
369
+ MinimumQmax: number;
370
+ MinimumTemperature: number;
371
+ NCCMax: number;
372
+ NCCMin: number;
373
+ ResetCnt: number;
374
+ SafetyFaultCounter: ChargerStatus;
375
+ TemperatureSamples: number;
376
+ TimeAtHighSoc: ChargerStatus;
377
+ TotalOperatingTime: number;
378
+ UpdateTime: number;
379
+ }
380
+
381
+ export interface ChargerStatus {
382
+ type: Type;
383
+ data: number[];
384
+ }
385
+
386
+ export enum Type {
387
+ Buffer = 'Buffer',
388
+ }
389
+
390
+ export interface CarrierMode {
391
+ CarrierModeHighVoltage: number;
392
+ CarrierModeLowVoltage: number;
393
+ CarrierModeStatus: number;
394
+ }
395
+
396
+ export interface ChargerData {
397
+ ChargerID: number;
398
+ ChargerInhibitReason: number;
399
+ ChargerResetCounter: number;
400
+ ChargerStatus: ChargerStatus;
401
+ ChargingCurrent: number;
402
+ ChargingVoltage: number;
403
+ NotChargingReason: number;
404
+ SlowChargingReason: number;
405
+ TimeChargingThermallyLimited: number;
406
+ VacVoltageLimit: number;
407
+ }
408
+
409
+ export interface DeadBatteryBootData {
410
+ ActivePayloads?: number;
411
+ GeneralPayload?: DeadBatteryBootData;
412
+ AdapterType: number;
413
+ AverageBattSkinTemp: number;
414
+ AverageBattVirtualTemp: number;
415
+ CloakEntryCount: number;
416
+ PrechargeCount: number;
417
+ StartBatteryCapacity: number;
418
+ StartBatteryVoltage: number;
419
+ TimeOnCharger: number;
420
+ VbusType: number;
421
+ WirelessChargingMode: number;
422
+ }
423
+
424
+ export interface IOReportChannelInfo {
425
+ IOReportChannelUnit: number;
426
+ }
427
+
428
+ export interface IOReportLegend {
429
+ IOReportChannelInfo: IOReportChannelInfo;
430
+ IOReportChannelUnit: number;
431
+ IOReportChannels: Array<Array<number | string>>;
432
+ IOReportGroupName: string;
433
+ }
434
+
435
+ export interface InductiveData {
436
+ FirmwareMode: number;
437
+ }
438
+
439
+ export interface KioskMode {
440
+ KioskModeFullChargeVoltage: number;
441
+ KioskModeHighSocDays: number;
442
+ KioskModeHighSocSeconds: number;
443
+ KioskModeLastHighSocHours: number;
444
+ KioskModeMode: number;
445
+ }
446
+
447
+ export interface LPEMData {
448
+ CurrentCapacity: number;
449
+ MaxCapacity: number;
450
+ Mode: number;
451
+ SOCFThreshold: number;
452
+ StateOfCharge: number;
453
+ StatusFlags: number;
454
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @this {XCUITestDriver}
3
+ */
4
+ export async function getAlertText() {
5
+ return /** @type {string|null} */ (await this.proxyCommand('/alert/text', 'GET'));
6
+ }
7
+
8
+ /**
9
+ * @param {string} value
10
+ * @this {XCUITestDriver}
11
+ * @returns {Promise<void>}
12
+ */
13
+ export async function setAlertText(value) {
14
+ await this.proxyCommand('/alert/text', 'POST', {value});
15
+ }
16
+
17
+ /**
18
+ * @param { {buttonLabel?: string} } opts
19
+ * @returns {Promise<void>}
20
+ * @this {XCUITestDriver}
21
+ */
22
+ export async function postAcceptAlert(opts = {}) {
23
+ await this.proxyCommand('/alert/accept', 'POST', toAlertParams(opts));
24
+ }
25
+
26
+ /**
27
+ * @param { {buttonLabel?: string} } opts
28
+ * @returns {Promise<void>}
29
+ * @this {XCUITestDriver}
30
+ */
31
+ export async function postDismissAlert(opts = {}) {
32
+ await this.proxyCommand('/alert/dismiss', 'POST', toAlertParams(opts));
33
+ }
34
+
35
+ /**
36
+ * @internal
37
+ * @this {XCUITestDriver}
38
+ * @returns {Promise<string[]>} The list of button labels
39
+ */
40
+ export async function getAlertButtons() {
41
+ return /** @type {string[]} */ (await this.proxyCommand('/wda/alert/buttons', 'GET'));
42
+ }
43
+
44
+ /**
45
+ * Tries to apply the given action to the currently visible alert.
46
+ *
47
+ * @param {AlertAction} action - The actual action to apply.
48
+ * @param {string} [buttonLabel] - The name of the button used to perform the chosen alert action. Only makes sense if the action is `accept` or `dismiss`.
49
+ * @returns {Promise<string[]|void>} If `action` is `getButtons`, a list of alert button labelsp; otherwise nothing.
50
+ * @remarks This should really be separate commands.
51
+ * @this {XCUITestDriver}
52
+ */
53
+ export async function mobileHandleAlert(action, buttonLabel) {
54
+ switch (action) {
55
+ case 'accept':
56
+ return await this.postAcceptAlert({buttonLabel});
57
+ case 'dismiss':
58
+ return await this.postDismissAlert({buttonLabel});
59
+ case 'getButtons':
60
+ return await this.getAlertButtons();
61
+ default:
62
+ throw new Error(
63
+ `The 'action' value should be either 'accept', 'dismiss' or 'getButtons'. ` +
64
+ `'${action}' is provided instead.`,
65
+ );
66
+ }
67
+ }
68
+
69
+ /**
70
+ *
71
+ * @param { {buttonLabel?: string} } opts
72
+ * @returns { {name?: string} }
73
+ */
74
+ function toAlertParams(opts = {}) {
75
+ const params = {};
76
+ if (opts.buttonLabel) {
77
+ params.name = opts.buttonLabel;
78
+ }
79
+ return params;
80
+ }
81
+
82
+ /**
83
+ * @typedef {'accept'|'dismiss'|'getButtons'} AlertAction
84
+ */
85
+
86
+ /**
87
+ * @typedef {import('../driver').XCUITestDriver} XCUITestDriver
88
+ */