@checkly/playwright-core 1.41.2-beta.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 (305) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +3 -0
  4. package/ThirdPartyNotices.txt +1513 -0
  5. package/bin/PrintDeps.exe +0 -0
  6. package/bin/README.md +2 -0
  7. package/bin/install_media_pack.ps1 +5 -0
  8. package/bin/reinstall_chrome_beta_linux.sh +40 -0
  9. package/bin/reinstall_chrome_beta_mac.sh +13 -0
  10. package/bin/reinstall_chrome_beta_win.ps1 +23 -0
  11. package/bin/reinstall_chrome_stable_linux.sh +40 -0
  12. package/bin/reinstall_chrome_stable_mac.sh +12 -0
  13. package/bin/reinstall_chrome_stable_win.ps1 +23 -0
  14. package/bin/reinstall_msedge_beta_linux.sh +40 -0
  15. package/bin/reinstall_msedge_beta_mac.sh +11 -0
  16. package/bin/reinstall_msedge_beta_win.ps1 +22 -0
  17. package/bin/reinstall_msedge_dev_linux.sh +40 -0
  18. package/bin/reinstall_msedge_dev_mac.sh +11 -0
  19. package/bin/reinstall_msedge_dev_win.ps1 +22 -0
  20. package/bin/reinstall_msedge_stable_linux.sh +40 -0
  21. package/bin/reinstall_msedge_stable_mac.sh +11 -0
  22. package/bin/reinstall_msedge_stable_win.ps1 +23 -0
  23. package/browsers.json +64 -0
  24. package/cli.js +17 -0
  25. package/index.d.ts +17 -0
  26. package/index.js +33 -0
  27. package/index.mjs +28 -0
  28. package/lib/androidServerImpl.js +69 -0
  29. package/lib/browserServerImpl.js +92 -0
  30. package/lib/cli/driver.js +97 -0
  31. package/lib/cli/program.js +582 -0
  32. package/lib/cli/programWithTestStub.js +67 -0
  33. package/lib/client/accessibility.js +50 -0
  34. package/lib/client/android.js +473 -0
  35. package/lib/client/api.js +272 -0
  36. package/lib/client/artifact.js +79 -0
  37. package/lib/client/browser.js +145 -0
  38. package/lib/client/browserContext.js +509 -0
  39. package/lib/client/browserType.js +233 -0
  40. package/lib/client/cdpSession.js +53 -0
  41. package/lib/client/channelOwner.js +229 -0
  42. package/lib/client/clientHelper.js +57 -0
  43. package/lib/client/clientInstrumentation.js +40 -0
  44. package/lib/client/connection.js +327 -0
  45. package/lib/client/consoleMessage.js +55 -0
  46. package/lib/client/coverage.js +41 -0
  47. package/lib/client/dialog.js +57 -0
  48. package/lib/client/download.js +62 -0
  49. package/lib/client/electron.js +130 -0
  50. package/lib/client/elementHandle.js +291 -0
  51. package/lib/client/errors.js +77 -0
  52. package/lib/client/events.js +93 -0
  53. package/lib/client/fetch.js +343 -0
  54. package/lib/client/fileChooser.js +45 -0
  55. package/lib/client/frame.js +506 -0
  56. package/lib/client/harRouter.js +93 -0
  57. package/lib/client/input.js +111 -0
  58. package/lib/client/jsHandle.js +123 -0
  59. package/lib/client/jsonPipe.js +35 -0
  60. package/lib/client/localUtils.js +35 -0
  61. package/lib/client/locator.js +432 -0
  62. package/lib/client/network.js +601 -0
  63. package/lib/client/page.js +707 -0
  64. package/lib/client/playwright.js +74 -0
  65. package/lib/client/selectors.js +67 -0
  66. package/lib/client/stream.js +54 -0
  67. package/lib/client/tracing.js +135 -0
  68. package/lib/client/types.js +24 -0
  69. package/lib/client/video.js +51 -0
  70. package/lib/client/waiter.js +158 -0
  71. package/lib/client/webError.js +37 -0
  72. package/lib/client/worker.js +71 -0
  73. package/lib/client/writableStream.js +54 -0
  74. package/lib/common/socksProxy.js +569 -0
  75. package/lib/common/timeoutSettings.js +73 -0
  76. package/lib/common/types.js +5 -0
  77. package/lib/generated/consoleApiSource.js +7 -0
  78. package/lib/generated/injectedScriptSource.js +7 -0
  79. package/lib/generated/recorderSource.js +7 -0
  80. package/lib/generated/utilityScriptSource.js +7 -0
  81. package/lib/image_tools/colorUtils.js +98 -0
  82. package/lib/image_tools/compare.js +108 -0
  83. package/lib/image_tools/imageChannel.js +70 -0
  84. package/lib/image_tools/stats.js +102 -0
  85. package/lib/inProcessFactory.js +54 -0
  86. package/lib/inprocess.js +20 -0
  87. package/lib/outofprocess.js +67 -0
  88. package/lib/protocol/debug.js +27 -0
  89. package/lib/protocol/serializers.js +172 -0
  90. package/lib/protocol/transport.js +82 -0
  91. package/lib/protocol/validator.js +2599 -0
  92. package/lib/protocol/validatorPrimitives.js +139 -0
  93. package/lib/remote/playwrightConnection.js +274 -0
  94. package/lib/remote/playwrightServer.js +110 -0
  95. package/lib/server/accessibility.js +62 -0
  96. package/lib/server/android/android.js +441 -0
  97. package/lib/server/android/backendAdb.js +172 -0
  98. package/lib/server/artifact.js +104 -0
  99. package/lib/server/browser.js +129 -0
  100. package/lib/server/browserContext.js +609 -0
  101. package/lib/server/browserType.js +300 -0
  102. package/lib/server/chromium/appIcon.png +0 -0
  103. package/lib/server/chromium/chromium.js +346 -0
  104. package/lib/server/chromium/chromiumSwitches.js +41 -0
  105. package/lib/server/chromium/crAccessibility.js +237 -0
  106. package/lib/server/chromium/crBrowser.js +521 -0
  107. package/lib/server/chromium/crConnection.js +228 -0
  108. package/lib/server/chromium/crCoverage.js +246 -0
  109. package/lib/server/chromium/crDevTools.js +104 -0
  110. package/lib/server/chromium/crDragDrop.js +144 -0
  111. package/lib/server/chromium/crExecutionContext.js +156 -0
  112. package/lib/server/chromium/crInput.js +171 -0
  113. package/lib/server/chromium/crNetworkManager.js +723 -0
  114. package/lib/server/chromium/crPage.js +1173 -0
  115. package/lib/server/chromium/crPdf.js +147 -0
  116. package/lib/server/chromium/crProtocolHelper.js +131 -0
  117. package/lib/server/chromium/crServiceWorker.js +115 -0
  118. package/lib/server/chromium/defaultFontFamilies.js +145 -0
  119. package/lib/server/chromium/videoRecorder.js +155 -0
  120. package/lib/server/console.js +59 -0
  121. package/lib/server/cookieStore.js +112 -0
  122. package/lib/server/debugController.js +236 -0
  123. package/lib/server/debugger.js +132 -0
  124. package/lib/server/deviceDescriptors.js +21 -0
  125. package/lib/server/deviceDescriptorsSource.json +1549 -0
  126. package/lib/server/dialog.js +70 -0
  127. package/lib/server/dispatchers/androidDispatcher.js +193 -0
  128. package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  129. package/lib/server/dispatchers/browserContextDispatcher.js +306 -0
  130. package/lib/server/dispatchers/browserDispatcher.js +170 -0
  131. package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  132. package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  133. package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  134. package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  135. package/lib/server/dispatchers/dispatcher.js +400 -0
  136. package/lib/server/dispatchers/electronDispatcher.js +80 -0
  137. package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  138. package/lib/server/dispatchers/frameDispatcher.js +287 -0
  139. package/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
  140. package/lib/server/dispatchers/jsonPipeDispatcher.js +61 -0
  141. package/lib/server/dispatchers/localUtilsDispatcher.js +399 -0
  142. package/lib/server/dispatchers/networkDispatchers.js +221 -0
  143. package/lib/server/dispatchers/pageDispatcher.js +363 -0
  144. package/lib/server/dispatchers/playwrightDispatcher.js +105 -0
  145. package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  146. package/lib/server/dispatchers/streamDispatcher.js +62 -0
  147. package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  148. package/lib/server/dispatchers/writableStreamDispatcher.js +55 -0
  149. package/lib/server/dom.js +808 -0
  150. package/lib/server/download.js +53 -0
  151. package/lib/server/electron/electron.js +254 -0
  152. package/lib/server/electron/loader.js +57 -0
  153. package/lib/server/errors.js +68 -0
  154. package/lib/server/fetch.js +611 -0
  155. package/lib/server/fileChooser.js +42 -0
  156. package/lib/server/fileUploadUtils.js +71 -0
  157. package/lib/server/firefox/ffAccessibility.js +215 -0
  158. package/lib/server/firefox/ffBrowser.js +447 -0
  159. package/lib/server/firefox/ffConnection.js +168 -0
  160. package/lib/server/firefox/ffExecutionContext.js +138 -0
  161. package/lib/server/firefox/ffInput.js +150 -0
  162. package/lib/server/firefox/ffNetworkManager.js +231 -0
  163. package/lib/server/firefox/ffPage.js +558 -0
  164. package/lib/server/firefox/firefox.js +91 -0
  165. package/lib/server/formData.js +75 -0
  166. package/lib/server/frameSelectors.js +171 -0
  167. package/lib/server/frames.js +1597 -0
  168. package/lib/server/har/harRecorder.js +139 -0
  169. package/lib/server/har/harTracer.js +539 -0
  170. package/lib/server/helper.js +103 -0
  171. package/lib/server/index.js +96 -0
  172. package/lib/server/input.js +301 -0
  173. package/lib/server/instrumentation.js +74 -0
  174. package/lib/server/isomorphic/utilityScriptSerializers.js +212 -0
  175. package/lib/server/javascript.js +305 -0
  176. package/lib/server/launchApp.js +90 -0
  177. package/lib/server/macEditingCommands.js +139 -0
  178. package/lib/server/network.js +607 -0
  179. package/lib/server/page.js +793 -0
  180. package/lib/server/pipeTransport.js +85 -0
  181. package/lib/server/playwright.js +82 -0
  182. package/lib/server/progress.js +102 -0
  183. package/lib/server/protocolError.js +49 -0
  184. package/lib/server/recorder/codeGenerator.js +153 -0
  185. package/lib/server/recorder/csharp.js +310 -0
  186. package/lib/server/recorder/java.js +216 -0
  187. package/lib/server/recorder/javascript.js +229 -0
  188. package/lib/server/recorder/jsonl.js +47 -0
  189. package/lib/server/recorder/language.js +44 -0
  190. package/lib/server/recorder/python.js +275 -0
  191. package/lib/server/recorder/recorderActions.js +5 -0
  192. package/lib/server/recorder/recorderApp.js +181 -0
  193. package/lib/server/recorder/recorderUtils.js +48 -0
  194. package/lib/server/recorder/utils.js +45 -0
  195. package/lib/server/recorder.js +700 -0
  196. package/lib/server/registry/browserFetcher.js +168 -0
  197. package/lib/server/registry/dependencies.js +322 -0
  198. package/lib/server/registry/index.js +925 -0
  199. package/lib/server/registry/nativeDeps.js +383 -0
  200. package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  201. package/lib/server/screenshotter.js +354 -0
  202. package/lib/server/selectors.js +73 -0
  203. package/lib/server/socksInterceptor.js +100 -0
  204. package/lib/server/trace/recorder/snapshotter.js +168 -0
  205. package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  206. package/lib/server/trace/recorder/tracing.js +552 -0
  207. package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  208. package/lib/server/trace/viewer/traceViewer.js +229 -0
  209. package/lib/server/transport.js +191 -0
  210. package/lib/server/types.js +24 -0
  211. package/lib/server/usKeyboardLayout.js +555 -0
  212. package/lib/server/webkit/webkit.js +87 -0
  213. package/lib/server/webkit/wkAccessibility.js +194 -0
  214. package/lib/server/webkit/wkBrowser.js +328 -0
  215. package/lib/server/webkit/wkConnection.js +173 -0
  216. package/lib/server/webkit/wkExecutionContext.js +146 -0
  217. package/lib/server/webkit/wkInput.js +169 -0
  218. package/lib/server/webkit/wkInterceptableRequest.js +158 -0
  219. package/lib/server/webkit/wkPage.js +1198 -0
  220. package/lib/server/webkit/wkProvisionalPage.js +59 -0
  221. package/lib/server/webkit/wkWorkers.js +104 -0
  222. package/lib/third_party/diff_match_patch.js +2222 -0
  223. package/lib/third_party/pixelmatch.js +255 -0
  224. package/lib/utils/ascii.js +31 -0
  225. package/lib/utils/comparators.js +171 -0
  226. package/lib/utils/crypto.js +33 -0
  227. package/lib/utils/debug.js +46 -0
  228. package/lib/utils/debugLogger.js +89 -0
  229. package/lib/utils/env.js +47 -0
  230. package/lib/utils/eventsHelper.js +38 -0
  231. package/lib/utils/fileUtils.js +66 -0
  232. package/lib/utils/glob.js +83 -0
  233. package/lib/utils/happy-eyeballs.js +154 -0
  234. package/lib/utils/headers.js +52 -0
  235. package/lib/utils/hostPlatform.js +124 -0
  236. package/lib/utils/httpServer.js +195 -0
  237. package/lib/utils/index.js +324 -0
  238. package/lib/utils/isomorphic/cssParser.js +250 -0
  239. package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  240. package/lib/utils/isomorphic/locatorGenerators.js +651 -0
  241. package/lib/utils/isomorphic/locatorParser.js +179 -0
  242. package/lib/utils/isomorphic/locatorUtils.js +62 -0
  243. package/lib/utils/isomorphic/selectorParser.js +397 -0
  244. package/lib/utils/isomorphic/stringUtils.js +107 -0
  245. package/lib/utils/isomorphic/traceUtils.js +39 -0
  246. package/lib/utils/linuxUtils.js +78 -0
  247. package/lib/utils/manualPromise.js +109 -0
  248. package/lib/utils/mimeType.js +29 -0
  249. package/lib/utils/multimap.js +75 -0
  250. package/lib/utils/network.js +189 -0
  251. package/lib/utils/processLauncher.js +248 -0
  252. package/lib/utils/profiler.js +53 -0
  253. package/lib/utils/rtti.js +41 -0
  254. package/lib/utils/semaphore.js +51 -0
  255. package/lib/utils/spawnAsync.js +45 -0
  256. package/lib/utils/stackTrace.js +123 -0
  257. package/lib/utils/task.js +58 -0
  258. package/lib/utils/time.js +37 -0
  259. package/lib/utils/timeoutRunner.js +131 -0
  260. package/lib/utils/traceUtils.js +44 -0
  261. package/lib/utils/userAgent.js +105 -0
  262. package/lib/utils/wsServer.js +125 -0
  263. package/lib/utils/zipFile.js +75 -0
  264. package/lib/utils/zones.js +99 -0
  265. package/lib/utilsBundle.js +81 -0
  266. package/lib/utilsBundleImpl/index.js +51 -0
  267. package/lib/utilsBundleImpl/xdg-open +1066 -0
  268. package/lib/vite/htmlReport/index.html +66 -0
  269. package/lib/vite/recorder/assets/codeMirrorModule-Hs9-1ZG4.css +1 -0
  270. package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +24 -0
  271. package/lib/vite/recorder/assets/codicon-zGuYmc9o.ttf +0 -0
  272. package/lib/vite/recorder/assets/index-ljsTwXtJ.css +1 -0
  273. package/lib/vite/recorder/assets/index-yg8ypzl6.js +47 -0
  274. package/lib/vite/recorder/index.html +29 -0
  275. package/lib/vite/recorder/playwright-logo.svg +9 -0
  276. package/lib/vite/traceViewer/assets/codeMirrorModule-GluP1cQ1.js +24 -0
  277. package/lib/vite/traceViewer/assets/codeMirrorModule-fqJB1XDu.js +24 -0
  278. package/lib/vite/traceViewer/assets/codeMirrorModule-y3M3aAqy.js +24 -0
  279. package/lib/vite/traceViewer/assets/wsPort-Rvwd4WC-.js +69 -0
  280. package/lib/vite/traceViewer/assets/wsPort-dlD7vDkY.js +69 -0
  281. package/lib/vite/traceViewer/assets/wsPort-qOE2NWrO.js +69 -0
  282. package/lib/vite/traceViewer/assets/xtermModule-Yt6xwiJ_.js +9 -0
  283. package/lib/vite/traceViewer/codeMirrorModule.Hs9-1ZG4.css +1 -0
  284. package/lib/vite/traceViewer/codicon.zGuYmc9o.ttf +0 -0
  285. package/lib/vite/traceViewer/index.-g_5lMbJ.css +1 -0
  286. package/lib/vite/traceViewer/index.4X7zDysg.js +2 -0
  287. package/lib/vite/traceViewer/index.HkJgzlGy.js +2 -0
  288. package/lib/vite/traceViewer/index.html +26 -0
  289. package/lib/vite/traceViewer/index.kRjx5sAJ.js +2 -0
  290. package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  291. package/lib/vite/traceViewer/snapshot.html +21 -0
  292. package/lib/vite/traceViewer/sw.bundle.js +4 -0
  293. package/lib/vite/traceViewer/uiMode.1Wcp_Kto.js +10 -0
  294. package/lib/vite/traceViewer/uiMode.GTNzARcV.js +10 -0
  295. package/lib/vite/traceViewer/uiMode.html +17 -0
  296. package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +1 -0
  297. package/lib/vite/traceViewer/uiMode.zV-7Lf9v.js +10 -0
  298. package/lib/vite/traceViewer/wsPort.kSgQKQ0y.css +1 -0
  299. package/lib/vite/traceViewer/xtermModule.0lwXJFHT.css +32 -0
  300. package/lib/zipBundle.js +25 -0
  301. package/lib/zipBundleImpl.js +5 -0
  302. package/package.json +43 -0
  303. package/types/protocol.d.ts +20304 -0
  304. package/types/structs.d.ts +45 -0
  305. package/types/types.d.ts +20626 -0
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Accessibility = void 0;
7
+ /**
8
+ * Copyright 2017 Google Inc. All rights reserved.
9
+ * Modifications copyright (c) Microsoft Corporation.
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+
24
+ function axNodeFromProtocol(axNode) {
25
+ const result = {
26
+ ...axNode,
27
+ value: axNode.valueNumber !== undefined ? axNode.valueNumber : axNode.valueString,
28
+ checked: axNode.checked === 'checked' ? true : axNode.checked === 'unchecked' ? false : axNode.checked,
29
+ pressed: axNode.pressed === 'pressed' ? true : axNode.pressed === 'released' ? false : axNode.pressed,
30
+ children: axNode.children ? axNode.children.map(axNodeFromProtocol) : undefined
31
+ };
32
+ delete result.valueNumber;
33
+ delete result.valueString;
34
+ return result;
35
+ }
36
+ class Accessibility {
37
+ constructor(channel) {
38
+ this._channel = void 0;
39
+ this._channel = channel;
40
+ }
41
+ async snapshot(options = {}) {
42
+ const root = options.root ? options.root._elementChannel : undefined;
43
+ const result = await this._channel.accessibilitySnapshot({
44
+ interestingOnly: options.interestingOnly,
45
+ root
46
+ });
47
+ return result.rootAXNode ? axNodeFromProtocol(result.rootAXNode) : null;
48
+ }
49
+ }
50
+ exports.Accessibility = Accessibility;
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AndroidWebView = exports.AndroidSocket = exports.AndroidInput = exports.AndroidDevice = exports.Android = void 0;
7
+ var _fs = _interopRequireDefault(require("fs"));
8
+ var _utils = require("../utils");
9
+ var _events = require("./events");
10
+ var _browserContext = require("./browserContext");
11
+ var _channelOwner = require("./channelOwner");
12
+ var _timeoutSettings = require("../common/timeoutSettings");
13
+ var _waiter = require("./waiter");
14
+ var _events2 = require("events");
15
+ var _connection = require("./connection");
16
+ var _errors = require("./errors");
17
+ var _timeoutRunner = require("../utils/timeoutRunner");
18
+ let _Symbol$asyncDispose;
19
+ /**
20
+ * Copyright (c) Microsoft Corporation.
21
+ *
22
+ * Licensed under the Apache License, Version 2.0 (the "License");
23
+ * you may not use this file except in compliance with the License.
24
+ * You may obtain a copy of the License at
25
+ *
26
+ * http://www.apache.org/licenses/LICENSE-2.0
27
+ *
28
+ * Unless required by applicable law or agreed to in writing, software
29
+ * distributed under the License is distributed on an "AS IS" BASIS,
30
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31
+ * See the License for the specific language governing permissions and
32
+ * limitations under the License.
33
+ */
34
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
+ class Android extends _channelOwner.ChannelOwner {
36
+ static from(android) {
37
+ return android._object;
38
+ }
39
+ constructor(parent, type, guid, initializer) {
40
+ super(parent, type, guid, initializer);
41
+ this._timeoutSettings = void 0;
42
+ this._serverLauncher = void 0;
43
+ this._timeoutSettings = new _timeoutSettings.TimeoutSettings();
44
+ }
45
+ setDefaultTimeout(timeout) {
46
+ this._timeoutSettings.setDefaultTimeout(timeout);
47
+ this._channel.setDefaultTimeoutNoReply({
48
+ timeout
49
+ });
50
+ }
51
+ async devices(options = {}) {
52
+ const {
53
+ devices
54
+ } = await this._channel.devices(options);
55
+ return devices.map(d => AndroidDevice.from(d));
56
+ }
57
+ async launchServer(options = {}) {
58
+ if (!this._serverLauncher) throw new Error('Launching server is not supported');
59
+ return await this._serverLauncher.launchServer(options);
60
+ }
61
+ async connect(wsEndpoint, options = {}) {
62
+ return await this._wrapApiCall(async () => {
63
+ const deadline = options.timeout ? (0, _utils.monotonicTime)() + options.timeout : 0;
64
+ const headers = {
65
+ 'x-playwright-browser': 'android',
66
+ ...options.headers
67
+ };
68
+ const localUtils = this._connection.localUtils();
69
+ const connectParams = {
70
+ wsEndpoint,
71
+ headers,
72
+ slowMo: options.slowMo,
73
+ timeout: options.timeout
74
+ };
75
+ const {
76
+ pipe
77
+ } = await localUtils._channel.connect(connectParams);
78
+ const closePipe = () => pipe.close().catch(() => {});
79
+ const connection = new _connection.Connection(localUtils, this._instrumentation);
80
+ connection.markAsRemote();
81
+ connection.on('close', closePipe);
82
+ let device;
83
+ let closeError;
84
+ const onPipeClosed = () => {
85
+ var _device;
86
+ (_device = device) === null || _device === void 0 || _device._didClose();
87
+ connection.close(closeError);
88
+ };
89
+ pipe.on('closed', onPipeClosed);
90
+ connection.onmessage = message => pipe.send({
91
+ message
92
+ }).catch(onPipeClosed);
93
+ pipe.on('message', ({
94
+ message
95
+ }) => {
96
+ try {
97
+ connection.dispatch(message);
98
+ } catch (e) {
99
+ closeError = e;
100
+ closePipe();
101
+ }
102
+ });
103
+ const result = await (0, _timeoutRunner.raceAgainstDeadline)(async () => {
104
+ const playwright = await connection.initializePlaywright();
105
+ if (!playwright._initializer.preConnectedAndroidDevice) {
106
+ closePipe();
107
+ throw new Error('Malformed endpoint. Did you use Android.launchServer method?');
108
+ }
109
+ device = AndroidDevice.from(playwright._initializer.preConnectedAndroidDevice);
110
+ device._shouldCloseConnectionOnClose = true;
111
+ device.on(_events.Events.AndroidDevice.Close, closePipe);
112
+ return device;
113
+ }, deadline);
114
+ if (!result.timedOut) {
115
+ return result.result;
116
+ } else {
117
+ closePipe();
118
+ throw new Error(`Timeout ${options.timeout}ms exceeded`);
119
+ }
120
+ });
121
+ }
122
+ }
123
+ exports.Android = Android;
124
+ _Symbol$asyncDispose = Symbol.asyncDispose;
125
+ class AndroidDevice extends _channelOwner.ChannelOwner {
126
+ static from(androidDevice) {
127
+ return androidDevice._object;
128
+ }
129
+ constructor(parent, type, guid, initializer) {
130
+ super(parent, type, guid, initializer);
131
+ this._timeoutSettings = void 0;
132
+ this._webViews = new Map();
133
+ this._shouldCloseConnectionOnClose = false;
134
+ this.input = void 0;
135
+ this.input = new AndroidInput(this);
136
+ this._timeoutSettings = new _timeoutSettings.TimeoutSettings(parent._timeoutSettings);
137
+ this._channel.on('webViewAdded', ({
138
+ webView
139
+ }) => this._onWebViewAdded(webView));
140
+ this._channel.on('webViewRemoved', ({
141
+ socketName
142
+ }) => this._onWebViewRemoved(socketName));
143
+ this._channel.on('close', () => this._didClose());
144
+ }
145
+ _onWebViewAdded(webView) {
146
+ const view = new AndroidWebView(this, webView);
147
+ this._webViews.set(webView.socketName, view);
148
+ this.emit(_events.Events.AndroidDevice.WebView, view);
149
+ }
150
+ _onWebViewRemoved(socketName) {
151
+ const view = this._webViews.get(socketName);
152
+ this._webViews.delete(socketName);
153
+ if (view) view.emit(_events.Events.AndroidWebView.Close);
154
+ }
155
+ setDefaultTimeout(timeout) {
156
+ this._timeoutSettings.setDefaultTimeout(timeout);
157
+ this._channel.setDefaultTimeoutNoReply({
158
+ timeout
159
+ });
160
+ }
161
+ serial() {
162
+ return this._initializer.serial;
163
+ }
164
+ model() {
165
+ return this._initializer.model;
166
+ }
167
+ webViews() {
168
+ return [...this._webViews.values()];
169
+ }
170
+ async webView(selector, options) {
171
+ const predicate = v => {
172
+ if (selector.pkg) return v.pkg() === selector.pkg;
173
+ if (selector.socketName) return v._socketName() === selector.socketName;
174
+ return false;
175
+ };
176
+ const webView = [...this._webViews.values()].find(predicate);
177
+ if (webView) return webView;
178
+ return await this.waitForEvent('webview', {
179
+ ...options,
180
+ predicate
181
+ });
182
+ }
183
+ async wait(selector, options) {
184
+ await this._channel.wait({
185
+ selector: toSelectorChannel(selector),
186
+ ...options
187
+ });
188
+ }
189
+ async fill(selector, text, options) {
190
+ await this._channel.fill({
191
+ selector: toSelectorChannel(selector),
192
+ text,
193
+ ...options
194
+ });
195
+ }
196
+ async press(selector, key, options) {
197
+ await this.tap(selector, options);
198
+ await this.input.press(key);
199
+ }
200
+ async tap(selector, options) {
201
+ await this._channel.tap({
202
+ selector: toSelectorChannel(selector),
203
+ ...options
204
+ });
205
+ }
206
+ async drag(selector, dest, options) {
207
+ await this._channel.drag({
208
+ selector: toSelectorChannel(selector),
209
+ dest,
210
+ ...options
211
+ });
212
+ }
213
+ async fling(selector, direction, options) {
214
+ await this._channel.fling({
215
+ selector: toSelectorChannel(selector),
216
+ direction,
217
+ ...options
218
+ });
219
+ }
220
+ async longTap(selector, options) {
221
+ await this._channel.longTap({
222
+ selector: toSelectorChannel(selector),
223
+ ...options
224
+ });
225
+ }
226
+ async pinchClose(selector, percent, options) {
227
+ await this._channel.pinchClose({
228
+ selector: toSelectorChannel(selector),
229
+ percent,
230
+ ...options
231
+ });
232
+ }
233
+ async pinchOpen(selector, percent, options) {
234
+ await this._channel.pinchOpen({
235
+ selector: toSelectorChannel(selector),
236
+ percent,
237
+ ...options
238
+ });
239
+ }
240
+ async scroll(selector, direction, percent, options) {
241
+ await this._channel.scroll({
242
+ selector: toSelectorChannel(selector),
243
+ direction,
244
+ percent,
245
+ ...options
246
+ });
247
+ }
248
+ async swipe(selector, direction, percent, options) {
249
+ await this._channel.swipe({
250
+ selector: toSelectorChannel(selector),
251
+ direction,
252
+ percent,
253
+ ...options
254
+ });
255
+ }
256
+ async info(selector) {
257
+ return (await this._channel.info({
258
+ selector: toSelectorChannel(selector)
259
+ })).info;
260
+ }
261
+ async screenshot(options = {}) {
262
+ const {
263
+ binary
264
+ } = await this._channel.screenshot();
265
+ if (options.path) await _fs.default.promises.writeFile(options.path, binary);
266
+ return binary;
267
+ }
268
+ async [_Symbol$asyncDispose]() {
269
+ await this.close();
270
+ }
271
+ async close() {
272
+ try {
273
+ if (this._shouldCloseConnectionOnClose) this._connection.close();else await this._channel.close();
274
+ } catch (e) {
275
+ if ((0, _errors.isTargetClosedError)(e)) return;
276
+ throw e;
277
+ }
278
+ }
279
+ _didClose() {
280
+ this.emit(_events.Events.AndroidDevice.Close, this);
281
+ }
282
+ async shell(command) {
283
+ const {
284
+ result
285
+ } = await this._channel.shell({
286
+ command
287
+ });
288
+ return result;
289
+ }
290
+ async open(command) {
291
+ return AndroidSocket.from((await this._channel.open({
292
+ command
293
+ })).socket);
294
+ }
295
+ async installApk(file, options) {
296
+ await this._channel.installApk({
297
+ file: await loadFile(file),
298
+ args: options && options.args
299
+ });
300
+ }
301
+ async push(file, path, options) {
302
+ await this._channel.push({
303
+ file: await loadFile(file),
304
+ path,
305
+ mode: options ? options.mode : undefined
306
+ });
307
+ }
308
+ async launchBrowser(options = {}) {
309
+ const contextOptions = await (0, _browserContext.prepareBrowserContextParams)(options);
310
+ const result = await this._channel.launchBrowser(contextOptions);
311
+ const context = _browserContext.BrowserContext.from(result.context);
312
+ context._setOptions(contextOptions, {});
313
+ return context;
314
+ }
315
+ async waitForEvent(event, optionsOrPredicate = {}) {
316
+ return await this._wrapApiCall(async () => {
317
+ const timeout = this._timeoutSettings.timeout(typeof optionsOrPredicate === 'function' ? {} : optionsOrPredicate);
318
+ const predicate = typeof optionsOrPredicate === 'function' ? optionsOrPredicate : optionsOrPredicate.predicate;
319
+ const waiter = _waiter.Waiter.createForEvent(this, event);
320
+ waiter.rejectOnTimeout(timeout, `Timeout ${timeout}ms exceeded while waiting for event "${event}"`);
321
+ if (event !== _events.Events.AndroidDevice.Close) waiter.rejectOnEvent(this, _events.Events.AndroidDevice.Close, () => new _errors.TargetClosedError());
322
+ const result = await waiter.waitForEvent(this, event, predicate);
323
+ waiter.dispose();
324
+ return result;
325
+ });
326
+ }
327
+ }
328
+ exports.AndroidDevice = AndroidDevice;
329
+ class AndroidSocket extends _channelOwner.ChannelOwner {
330
+ static from(androidDevice) {
331
+ return androidDevice._object;
332
+ }
333
+ constructor(parent, type, guid, initializer) {
334
+ super(parent, type, guid, initializer);
335
+ this._channel.on('data', ({
336
+ data
337
+ }) => this.emit(_events.Events.AndroidSocket.Data, data));
338
+ this._channel.on('close', () => this.emit(_events.Events.AndroidSocket.Close));
339
+ }
340
+ async write(data) {
341
+ await this._channel.write({
342
+ data
343
+ });
344
+ }
345
+ async close() {
346
+ await this._channel.close();
347
+ }
348
+ async [Symbol.asyncDispose]() {
349
+ await this.close();
350
+ }
351
+ }
352
+ exports.AndroidSocket = AndroidSocket;
353
+ async function loadFile(file) {
354
+ if ((0, _utils.isString)(file)) return await _fs.default.promises.readFile(file);
355
+ return file;
356
+ }
357
+ class AndroidInput {
358
+ constructor(device) {
359
+ this._device = void 0;
360
+ this._device = device;
361
+ }
362
+ async type(text) {
363
+ await this._device._channel.inputType({
364
+ text
365
+ });
366
+ }
367
+ async press(key) {
368
+ await this._device._channel.inputPress({
369
+ key
370
+ });
371
+ }
372
+ async tap(point) {
373
+ await this._device._channel.inputTap({
374
+ point
375
+ });
376
+ }
377
+ async swipe(from, segments, steps) {
378
+ await this._device._channel.inputSwipe({
379
+ segments,
380
+ steps
381
+ });
382
+ }
383
+ async drag(from, to, steps) {
384
+ await this._device._channel.inputDrag({
385
+ from,
386
+ to,
387
+ steps
388
+ });
389
+ }
390
+ }
391
+ exports.AndroidInput = AndroidInput;
392
+ function toSelectorChannel(selector) {
393
+ const {
394
+ checkable,
395
+ checked,
396
+ clazz,
397
+ clickable,
398
+ depth,
399
+ desc,
400
+ enabled,
401
+ focusable,
402
+ focused,
403
+ hasChild,
404
+ hasDescendant,
405
+ longClickable,
406
+ pkg,
407
+ res,
408
+ scrollable,
409
+ selected,
410
+ text
411
+ } = selector;
412
+ const toRegex = value => {
413
+ if (value === undefined) return undefined;
414
+ if ((0, _utils.isRegExp)(value)) return value.source;
415
+ return '^' + value.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d') + '$';
416
+ };
417
+ return {
418
+ checkable,
419
+ checked,
420
+ clazz: toRegex(clazz),
421
+ pkg: toRegex(pkg),
422
+ desc: toRegex(desc),
423
+ res: toRegex(res),
424
+ text: toRegex(text),
425
+ clickable,
426
+ depth,
427
+ enabled,
428
+ focusable,
429
+ focused,
430
+ hasChild: hasChild ? {
431
+ selector: toSelectorChannel(hasChild.selector)
432
+ } : undefined,
433
+ hasDescendant: hasDescendant ? {
434
+ selector: toSelectorChannel(hasDescendant.selector),
435
+ maxDepth: hasDescendant.maxDepth
436
+ } : undefined,
437
+ longClickable,
438
+ scrollable,
439
+ selected
440
+ };
441
+ }
442
+ class AndroidWebView extends _events2.EventEmitter {
443
+ constructor(device, data) {
444
+ super();
445
+ this._device = void 0;
446
+ this._data = void 0;
447
+ this._pagePromise = void 0;
448
+ this._device = device;
449
+ this._data = data;
450
+ }
451
+ pid() {
452
+ return this._data.pid;
453
+ }
454
+ pkg() {
455
+ return this._data.pkg;
456
+ }
457
+ _socketName() {
458
+ return this._data.socketName;
459
+ }
460
+ async page() {
461
+ if (!this._pagePromise) this._pagePromise = this._fetchPage();
462
+ return await this._pagePromise;
463
+ }
464
+ async _fetchPage() {
465
+ const {
466
+ context
467
+ } = await this._device._channel.connectToWebView({
468
+ socketName: this._data.socketName
469
+ });
470
+ return _browserContext.BrowserContext.from(context).pages()[0];
471
+ }
472
+ }
473
+ exports.AndroidWebView = AndroidWebView;