patchright 1.48.0__py3-none-win32.whl

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 (406) hide show
  1. patchright/__init__.py +5 -0
  2. patchright/__main__.py +18 -0
  3. patchright/_impl/__init__.py +0 -0
  4. patchright/_impl/__pyinstaller/__init__.py +20 -0
  5. patchright/_impl/__pyinstaller/hook-playwright.async_api.py +17 -0
  6. patchright/_impl/__pyinstaller/hook-playwright.sync_api.py +17 -0
  7. patchright/_impl/_accessibility.py +50 -0
  8. patchright/_impl/_api_structures.py +271 -0
  9. patchright/_impl/_artifact.py +45 -0
  10. patchright/_impl/_assertions.py +779 -0
  11. patchright/_impl/_async_base.py +92 -0
  12. patchright/_impl/_browser.py +243 -0
  13. patchright/_impl/_browser_context.py +724 -0
  14. patchright/_impl/_browser_type.py +264 -0
  15. patchright/_impl/_cdp_session.py +21 -0
  16. patchright/_impl/_clock.py +57 -0
  17. patchright/_impl/_connection.py +554 -0
  18. patchright/_impl/_console_message.py +45 -0
  19. patchright/_impl/_dialog.py +40 -0
  20. patchright/_impl/_download.py +50 -0
  21. patchright/_impl/_driver.py +26 -0
  22. patchright/_impl/_element_handle.py +376 -0
  23. patchright/_impl/_errors.py +44 -0
  24. patchright/_impl/_event_context_manager.py +20 -0
  25. patchright/_impl/_fetch.py +511 -0
  26. patchright/_impl/_file_chooser.py +43 -0
  27. patchright/_impl/_frame.py +755 -0
  28. patchright/_impl/_glob.py +51 -0
  29. patchright/_impl/_greenlets.py +39 -0
  30. patchright/_impl/_har_router.py +99 -0
  31. patchright/_impl/_helper.py +421 -0
  32. patchright/_impl/_impl_to_api_mapping.py +123 -0
  33. patchright/_impl/_input.py +71 -0
  34. patchright/_impl/_js_handle.py +234 -0
  35. patchright/_impl/_json_pipe.py +56 -0
  36. patchright/_impl/_local_utils.py +73 -0
  37. patchright/_impl/_locator.py +784 -0
  38. patchright/_impl/_map.py +19 -0
  39. patchright/_impl/_network.py +934 -0
  40. patchright/_impl/_object_factory.py +91 -0
  41. patchright/_impl/_page.py +1446 -0
  42. patchright/_impl/_path_utils.py +11 -0
  43. patchright/_impl/_playwright.py +51 -0
  44. patchright/_impl/_selectors.py +62 -0
  45. patchright/_impl/_set_input_files_helpers.py +135 -0
  46. patchright/_impl/_str_utils.py +57 -0
  47. patchright/_impl/_stream.py +32 -0
  48. patchright/_impl/_sync_base.py +134 -0
  49. patchright/_impl/_tracing.py +103 -0
  50. patchright/_impl/_transport.py +150 -0
  51. patchright/_impl/_video.py +57 -0
  52. patchright/_impl/_waiter.py +142 -0
  53. patchright/_impl/_web_error.py +22 -0
  54. patchright/_impl/_writable_stream.py +27 -0
  55. patchright/_repo_version.py +12 -0
  56. patchright/async_api/__init__.py +177 -0
  57. patchright/async_api/_context_manager.py +39 -0
  58. patchright/async_api/_generated.py +19960 -0
  59. patchright/driver/LICENSE +2174 -0
  60. patchright/driver/README.md +1 -0
  61. patchright/driver/node.exe +0 -0
  62. patchright/driver/package/README.md +3 -0
  63. patchright/driver/package/ThirdPartyNotices.txt +1548 -0
  64. patchright/driver/package/api.json +1 -0
  65. patchright/driver/package/bin/PrintDeps.exe +0 -0
  66. patchright/driver/package/bin/README.md +2 -0
  67. patchright/driver/package/bin/install_media_pack.ps1 +5 -0
  68. patchright/driver/package/bin/reinstall_chrome_beta_linux.sh +40 -0
  69. patchright/driver/package/bin/reinstall_chrome_beta_mac.sh +13 -0
  70. patchright/driver/package/bin/reinstall_chrome_beta_win.ps1 +24 -0
  71. patchright/driver/package/bin/reinstall_chrome_stable_linux.sh +40 -0
  72. patchright/driver/package/bin/reinstall_chrome_stable_mac.sh +12 -0
  73. patchright/driver/package/bin/reinstall_chrome_stable_win.ps1 +24 -0
  74. patchright/driver/package/bin/reinstall_msedge_beta_linux.sh +40 -0
  75. patchright/driver/package/bin/reinstall_msedge_beta_mac.sh +11 -0
  76. patchright/driver/package/bin/reinstall_msedge_beta_win.ps1 +23 -0
  77. patchright/driver/package/bin/reinstall_msedge_dev_linux.sh +40 -0
  78. patchright/driver/package/bin/reinstall_msedge_dev_mac.sh +11 -0
  79. patchright/driver/package/bin/reinstall_msedge_dev_win.ps1 +23 -0
  80. patchright/driver/package/bin/reinstall_msedge_stable_linux.sh +40 -0
  81. patchright/driver/package/bin/reinstall_msedge_stable_mac.sh +11 -0
  82. patchright/driver/package/bin/reinstall_msedge_stable_win.ps1 +24 -0
  83. patchright/driver/package/browsers.json +57 -0
  84. patchright/driver/package/cli.js +18 -0
  85. patchright/driver/package/index.d.ts +17 -0
  86. patchright/driver/package/index.js +33 -0
  87. patchright/driver/package/index.mjs +28 -0
  88. patchright/driver/package/lib/androidServerImpl.js +69 -0
  89. patchright/driver/package/lib/browserServerImpl.js +92 -0
  90. patchright/driver/package/lib/cli/driver.js +95 -0
  91. patchright/driver/package/lib/cli/program.js +587 -0
  92. patchright/driver/package/lib/cli/programWithTestStub.js +67 -0
  93. patchright/driver/package/lib/client/accessibility.js +50 -0
  94. patchright/driver/package/lib/client/android.js +473 -0
  95. patchright/driver/package/lib/client/api.js +285 -0
  96. patchright/driver/package/lib/client/artifact.js +79 -0
  97. patchright/driver/package/lib/client/browser.js +145 -0
  98. patchright/driver/package/lib/client/browserContext.js +559 -0
  99. patchright/driver/package/lib/client/browserType.js +241 -0
  100. patchright/driver/package/lib/client/cdpSession.js +53 -0
  101. patchright/driver/package/lib/client/channelOwner.js +235 -0
  102. patchright/driver/package/lib/client/clientHelper.js +57 -0
  103. patchright/driver/package/lib/client/clientInstrumentation.js +50 -0
  104. patchright/driver/package/lib/client/clock.js +68 -0
  105. patchright/driver/package/lib/client/connection.js +333 -0
  106. patchright/driver/package/lib/client/consoleMessage.js +55 -0
  107. patchright/driver/package/lib/client/coverage.js +41 -0
  108. patchright/driver/package/lib/client/dialog.js +57 -0
  109. patchright/driver/package/lib/client/download.js +62 -0
  110. patchright/driver/package/lib/client/electron.js +135 -0
  111. patchright/driver/package/lib/client/elementHandle.js +321 -0
  112. patchright/driver/package/lib/client/errors.js +77 -0
  113. patchright/driver/package/lib/client/eventEmitter.js +314 -0
  114. patchright/driver/package/lib/client/events.js +94 -0
  115. patchright/driver/package/lib/client/fetch.js +391 -0
  116. patchright/driver/package/lib/client/fileChooser.js +45 -0
  117. patchright/driver/package/lib/client/frame.js +504 -0
  118. patchright/driver/package/lib/client/harRouter.js +99 -0
  119. patchright/driver/package/lib/client/input.js +111 -0
  120. patchright/driver/package/lib/client/jsHandle.js +121 -0
  121. patchright/driver/package/lib/client/jsonPipe.js +35 -0
  122. patchright/driver/package/lib/client/localUtils.js +36 -0
  123. patchright/driver/package/lib/client/locator.js +441 -0
  124. patchright/driver/package/lib/client/network.js +762 -0
  125. patchright/driver/package/lib/client/page.js +746 -0
  126. patchright/driver/package/lib/client/playwright.js +80 -0
  127. patchright/driver/package/lib/client/selectors.js +67 -0
  128. patchright/driver/package/lib/client/stream.js +54 -0
  129. patchright/driver/package/lib/client/tracing.js +134 -0
  130. patchright/driver/package/lib/client/types.js +24 -0
  131. patchright/driver/package/lib/client/video.js +51 -0
  132. patchright/driver/package/lib/client/waiter.js +158 -0
  133. patchright/driver/package/lib/client/webError.js +37 -0
  134. patchright/driver/package/lib/client/worker.js +71 -0
  135. patchright/driver/package/lib/client/writableStream.js +54 -0
  136. patchright/driver/package/lib/common/socksProxy.js +569 -0
  137. patchright/driver/package/lib/common/timeoutSettings.js +73 -0
  138. patchright/driver/package/lib/common/types.js +5 -0
  139. patchright/driver/package/lib/generated/clockSource.js +7 -0
  140. patchright/driver/package/lib/generated/consoleApiSource.js +7 -0
  141. patchright/driver/package/lib/generated/injectedScriptSource.js +7 -0
  142. patchright/driver/package/lib/generated/pollingRecorderSource.js +7 -0
  143. patchright/driver/package/lib/generated/utilityScriptSource.js +7 -0
  144. patchright/driver/package/lib/generated/webSocketMockSource.js +7 -0
  145. patchright/driver/package/lib/image_tools/colorUtils.js +98 -0
  146. patchright/driver/package/lib/image_tools/compare.js +108 -0
  147. patchright/driver/package/lib/image_tools/imageChannel.js +70 -0
  148. patchright/driver/package/lib/image_tools/stats.js +102 -0
  149. patchright/driver/package/lib/inProcessFactory.js +54 -0
  150. patchright/driver/package/lib/inprocess.js +20 -0
  151. patchright/driver/package/lib/outofprocess.js +67 -0
  152. patchright/driver/package/lib/protocol/debug.js +27 -0
  153. patchright/driver/package/lib/protocol/serializers.js +173 -0
  154. patchright/driver/package/lib/protocol/transport.js +82 -0
  155. patchright/driver/package/lib/protocol/validator.js +2759 -0
  156. patchright/driver/package/lib/protocol/validatorPrimitives.js +139 -0
  157. patchright/driver/package/lib/remote/playwrightConnection.js +274 -0
  158. patchright/driver/package/lib/remote/playwrightServer.js +110 -0
  159. patchright/driver/package/lib/server/accessibility.js +62 -0
  160. patchright/driver/package/lib/server/android/android.js +441 -0
  161. patchright/driver/package/lib/server/android/backendAdb.js +172 -0
  162. patchright/driver/package/lib/server/artifact.js +104 -0
  163. patchright/driver/package/lib/server/bidi/bidiBrowser.js +311 -0
  164. patchright/driver/package/lib/server/bidi/bidiChromium.js +124 -0
  165. patchright/driver/package/lib/server/bidi/bidiConnection.js +206 -0
  166. patchright/driver/package/lib/server/bidi/bidiExecutionContext.js +159 -0
  167. patchright/driver/package/lib/server/bidi/bidiFirefox.js +104 -0
  168. patchright/driver/package/lib/server/bidi/bidiInput.js +158 -0
  169. patchright/driver/package/lib/server/bidi/bidiNetworkManager.js +338 -0
  170. patchright/driver/package/lib/server/bidi/bidiOverCdp.js +103 -0
  171. patchright/driver/package/lib/server/bidi/bidiPage.js +529 -0
  172. patchright/driver/package/lib/server/bidi/bidiPdf.js +140 -0
  173. patchright/driver/package/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
  174. patchright/driver/package/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
  175. patchright/driver/package/lib/server/bidi/third_party/bidiProtocol.js +139 -0
  176. patchright/driver/package/lib/server/bidi/third_party/bidiSerializer.js +144 -0
  177. patchright/driver/package/lib/server/bidi/third_party/firefoxPrefs.js +221 -0
  178. patchright/driver/package/lib/server/browser.js +148 -0
  179. patchright/driver/package/lib/server/browserContext.js +666 -0
  180. patchright/driver/package/lib/server/browserType.js +335 -0
  181. patchright/driver/package/lib/server/chromium/appIcon.png +0 -0
  182. patchright/driver/package/lib/server/chromium/chromium.js +350 -0
  183. patchright/driver/package/lib/server/chromium/chromiumSwitches.js +36 -0
  184. patchright/driver/package/lib/server/chromium/crAccessibility.js +237 -0
  185. patchright/driver/package/lib/server/chromium/crBrowser.js +522 -0
  186. patchright/driver/package/lib/server/chromium/crConnection.js +228 -0
  187. patchright/driver/package/lib/server/chromium/crCoverage.js +246 -0
  188. patchright/driver/package/lib/server/chromium/crDevTools.js +104 -0
  189. patchright/driver/package/lib/server/chromium/crDragDrop.js +143 -0
  190. patchright/driver/package/lib/server/chromium/crExecutionContext.js +149 -0
  191. patchright/driver/package/lib/server/chromium/crInput.js +171 -0
  192. patchright/driver/package/lib/server/chromium/crNetworkManager.js +809 -0
  193. patchright/driver/package/lib/server/chromium/crPage.js +1235 -0
  194. patchright/driver/package/lib/server/chromium/crPdf.js +153 -0
  195. patchright/driver/package/lib/server/chromium/crProtocolHelper.js +133 -0
  196. patchright/driver/package/lib/server/chromium/crServiceWorker.js +111 -0
  197. patchright/driver/package/lib/server/chromium/defaultFontFamilies.js +145 -0
  198. patchright/driver/package/lib/server/chromium/videoRecorder.js +155 -0
  199. patchright/driver/package/lib/server/clock.js +133 -0
  200. patchright/driver/package/lib/server/codegen/csharp.js +299 -0
  201. patchright/driver/package/lib/server/codegen/java.js +235 -0
  202. patchright/driver/package/lib/server/codegen/javascript.js +223 -0
  203. patchright/driver/package/lib/server/codegen/jsonl.js +47 -0
  204. patchright/driver/package/lib/server/codegen/language.js +88 -0
  205. patchright/driver/package/lib/server/codegen/languages.js +30 -0
  206. patchright/driver/package/lib/server/codegen/python.js +265 -0
  207. patchright/driver/package/lib/server/codegen/types.js +5 -0
  208. patchright/driver/package/lib/server/console.js +57 -0
  209. patchright/driver/package/lib/server/cookieStore.js +185 -0
  210. patchright/driver/package/lib/server/debugController.js +234 -0
  211. patchright/driver/package/lib/server/debugger.js +132 -0
  212. patchright/driver/package/lib/server/deviceDescriptors.js +26 -0
  213. patchright/driver/package/lib/server/deviceDescriptorsSource.json +1669 -0
  214. patchright/driver/package/lib/server/dialog.js +71 -0
  215. patchright/driver/package/lib/server/dispatchers/androidDispatcher.js +193 -0
  216. patchright/driver/package/lib/server/dispatchers/artifactDispatcher.js +118 -0
  217. patchright/driver/package/lib/server/dispatchers/browserContextDispatcher.js +368 -0
  218. patchright/driver/package/lib/server/dispatchers/browserDispatcher.js +170 -0
  219. patchright/driver/package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
  220. patchright/driver/package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
  221. patchright/driver/package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
  222. patchright/driver/package/lib/server/dispatchers/dialogDispatcher.js +44 -0
  223. patchright/driver/package/lib/server/dispatchers/dispatcher.js +395 -0
  224. patchright/driver/package/lib/server/dispatchers/electronDispatcher.js +93 -0
  225. patchright/driver/package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
  226. patchright/driver/package/lib/server/dispatchers/frameDispatcher.js +286 -0
  227. patchright/driver/package/lib/server/dispatchers/jsHandleDispatcher.js +97 -0
  228. patchright/driver/package/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
  229. patchright/driver/package/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
  230. patchright/driver/package/lib/server/dispatchers/networkDispatchers.js +221 -0
  231. patchright/driver/package/lib/server/dispatchers/pageDispatcher.js +367 -0
  232. patchright/driver/package/lib/server/dispatchers/playwrightDispatcher.js +107 -0
  233. patchright/driver/package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
  234. patchright/driver/package/lib/server/dispatchers/streamDispatcher.js +62 -0
  235. patchright/driver/package/lib/server/dispatchers/tracingDispatcher.js +54 -0
  236. patchright/driver/package/lib/server/dispatchers/webSocketRouteDispatcher.js +189 -0
  237. patchright/driver/package/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
  238. patchright/driver/package/lib/server/dom.js +845 -0
  239. patchright/driver/package/lib/server/download.js +60 -0
  240. patchright/driver/package/lib/server/electron/electron.js +296 -0
  241. patchright/driver/package/lib/server/electron/loader.js +57 -0
  242. patchright/driver/package/lib/server/errors.js +68 -0
  243. patchright/driver/package/lib/server/fetch.js +656 -0
  244. patchright/driver/package/lib/server/fileChooser.js +42 -0
  245. patchright/driver/package/lib/server/fileUploadUtils.js +75 -0
  246. patchright/driver/package/lib/server/firefox/ffAccessibility.js +216 -0
  247. patchright/driver/package/lib/server/firefox/ffBrowser.js +460 -0
  248. patchright/driver/package/lib/server/firefox/ffConnection.js +168 -0
  249. patchright/driver/package/lib/server/firefox/ffExecutionContext.js +135 -0
  250. patchright/driver/package/lib/server/firefox/ffInput.js +150 -0
  251. patchright/driver/package/lib/server/firefox/ffNetworkManager.js +233 -0
  252. patchright/driver/package/lib/server/firefox/ffPage.js +559 -0
  253. patchright/driver/package/lib/server/firefox/firefox.js +99 -0
  254. patchright/driver/package/lib/server/formData.js +75 -0
  255. patchright/driver/package/lib/server/frameSelectors.js +171 -0
  256. patchright/driver/package/lib/server/frames.js +1808 -0
  257. patchright/driver/package/lib/server/har/harRecorder.js +139 -0
  258. patchright/driver/package/lib/server/har/harTracer.js +542 -0
  259. patchright/driver/package/lib/server/helper.js +103 -0
  260. patchright/driver/package/lib/server/index.js +114 -0
  261. patchright/driver/package/lib/server/input.js +310 -0
  262. patchright/driver/package/lib/server/instrumentation.js +70 -0
  263. patchright/driver/package/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
  264. patchright/driver/package/lib/server/javascript.js +299 -0
  265. patchright/driver/package/lib/server/launchApp.js +91 -0
  266. patchright/driver/package/lib/server/macEditingCommands.js +139 -0
  267. patchright/driver/package/lib/server/network.js +617 -0
  268. patchright/driver/package/lib/server/page.js +819 -0
  269. patchright/driver/package/lib/server/pipeTransport.js +85 -0
  270. patchright/driver/package/lib/server/playwright.js +88 -0
  271. patchright/driver/package/lib/server/progress.js +102 -0
  272. patchright/driver/package/lib/server/protocolError.js +49 -0
  273. patchright/driver/package/lib/server/recorder/contextRecorder.js +299 -0
  274. patchright/driver/package/lib/server/recorder/recorderApp.js +196 -0
  275. patchright/driver/package/lib/server/recorder/recorderCollection.js +116 -0
  276. patchright/driver/package/lib/server/recorder/recorderFrontend.js +5 -0
  277. patchright/driver/package/lib/server/recorder/recorderInTraceViewer.js +144 -0
  278. patchright/driver/package/lib/server/recorder/recorderRunner.js +155 -0
  279. patchright/driver/package/lib/server/recorder/recorderUtils.js +112 -0
  280. patchright/driver/package/lib/server/recorder/throttledFile.js +46 -0
  281. patchright/driver/package/lib/server/recorder.js +327 -0
  282. patchright/driver/package/lib/server/registry/browserFetcher.js +168 -0
  283. patchright/driver/package/lib/server/registry/dependencies.js +322 -0
  284. patchright/driver/package/lib/server/registry/index.js +1005 -0
  285. patchright/driver/package/lib/server/registry/nativeDeps.js +490 -0
  286. patchright/driver/package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
  287. patchright/driver/package/lib/server/screenshotter.js +348 -0
  288. patchright/driver/package/lib/server/selectors.js +73 -0
  289. patchright/driver/package/lib/server/socksClientCertificatesInterceptor.js +340 -0
  290. patchright/driver/package/lib/server/socksInterceptor.js +100 -0
  291. patchright/driver/package/lib/server/trace/recorder/snapshotter.js +172 -0
  292. patchright/driver/package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
  293. patchright/driver/package/lib/server/trace/recorder/tracing.js +542 -0
  294. patchright/driver/package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
  295. patchright/driver/package/lib/server/trace/viewer/traceViewer.js +213 -0
  296. patchright/driver/package/lib/server/transport.js +191 -0
  297. patchright/driver/package/lib/server/types.js +24 -0
  298. patchright/driver/package/lib/server/usKeyboardLayout.js +555 -0
  299. patchright/driver/package/lib/server/webkit/webkit.js +87 -0
  300. patchright/driver/package/lib/server/webkit/wkAccessibility.js +194 -0
  301. patchright/driver/package/lib/server/webkit/wkBrowser.js +329 -0
  302. patchright/driver/package/lib/server/webkit/wkConnection.js +173 -0
  303. patchright/driver/package/lib/server/webkit/wkExecutionContext.js +143 -0
  304. patchright/driver/package/lib/server/webkit/wkInput.js +169 -0
  305. patchright/driver/package/lib/server/webkit/wkInterceptableRequest.js +162 -0
  306. patchright/driver/package/lib/server/webkit/wkPage.js +1219 -0
  307. patchright/driver/package/lib/server/webkit/wkProvisionalPage.js +94 -0
  308. patchright/driver/package/lib/server/webkit/wkWorkers.js +104 -0
  309. patchright/driver/package/lib/third_party/diff_match_patch.js +2222 -0
  310. patchright/driver/package/lib/third_party/pixelmatch.js +255 -0
  311. patchright/driver/package/lib/utils/ascii.js +31 -0
  312. patchright/driver/package/lib/utils/comparators.js +171 -0
  313. patchright/driver/package/lib/utils/crypto.js +174 -0
  314. patchright/driver/package/lib/utils/debug.js +46 -0
  315. patchright/driver/package/lib/utils/debugLogger.js +91 -0
  316. patchright/driver/package/lib/utils/env.js +49 -0
  317. patchright/driver/package/lib/utils/eventsHelper.js +38 -0
  318. patchright/driver/package/lib/utils/expectUtils.js +33 -0
  319. patchright/driver/package/lib/utils/fileUtils.js +205 -0
  320. patchright/driver/package/lib/utils/happy-eyeballs.js +194 -0
  321. patchright/driver/package/lib/utils/headers.js +52 -0
  322. patchright/driver/package/lib/utils/hostPlatform.js +133 -0
  323. patchright/driver/package/lib/utils/httpServer.js +237 -0
  324. patchright/driver/package/lib/utils/index.js +368 -0
  325. patchright/driver/package/lib/utils/isomorphic/cssParser.js +250 -0
  326. patchright/driver/package/lib/utils/isomorphic/cssTokenizer.js +979 -0
  327. patchright/driver/package/lib/utils/isomorphic/locatorGenerators.js +642 -0
  328. patchright/driver/package/lib/utils/isomorphic/locatorParser.js +179 -0
  329. patchright/driver/package/lib/utils/isomorphic/locatorUtils.js +62 -0
  330. patchright/driver/package/lib/utils/isomorphic/mimeType.js +29 -0
  331. patchright/driver/package/lib/utils/isomorphic/recorderUtils.js +195 -0
  332. patchright/driver/package/lib/utils/isomorphic/selectorParser.js +397 -0
  333. patchright/driver/package/lib/utils/isomorphic/stringUtils.js +139 -0
  334. patchright/driver/package/lib/utils/isomorphic/traceUtils.js +39 -0
  335. patchright/driver/package/lib/utils/isomorphic/urlMatch.js +120 -0
  336. patchright/driver/package/lib/utils/linuxUtils.js +78 -0
  337. patchright/driver/package/lib/utils/manualPromise.js +109 -0
  338. patchright/driver/package/lib/utils/multimap.js +75 -0
  339. patchright/driver/package/lib/utils/network.js +160 -0
  340. patchright/driver/package/lib/utils/processLauncher.js +248 -0
  341. patchright/driver/package/lib/utils/profiler.js +53 -0
  342. patchright/driver/package/lib/utils/rtti.js +44 -0
  343. patchright/driver/package/lib/utils/semaphore.js +51 -0
  344. patchright/driver/package/lib/utils/spawnAsync.js +45 -0
  345. patchright/driver/package/lib/utils/stackTrace.js +121 -0
  346. patchright/driver/package/lib/utils/task.js +58 -0
  347. patchright/driver/package/lib/utils/time.js +37 -0
  348. patchright/driver/package/lib/utils/timeoutRunner.js +66 -0
  349. patchright/driver/package/lib/utils/traceUtils.js +44 -0
  350. patchright/driver/package/lib/utils/userAgent.js +105 -0
  351. patchright/driver/package/lib/utils/wsServer.js +127 -0
  352. patchright/driver/package/lib/utils/zipFile.js +75 -0
  353. patchright/driver/package/lib/utils/zones.js +62 -0
  354. patchright/driver/package/lib/utilsBundle.js +82 -0
  355. patchright/driver/package/lib/utilsBundleImpl/index.js +53 -0
  356. patchright/driver/package/lib/utilsBundleImpl/xdg-open +1066 -0
  357. patchright/driver/package/lib/vite/htmlReport/index.html +66 -0
  358. patchright/driver/package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +24 -0
  359. patchright/driver/package/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
  360. patchright/driver/package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  361. patchright/driver/package/lib/vite/recorder/assets/index-BW-aOBcL.css +1 -0
  362. patchright/driver/package/lib/vite/recorder/assets/index-Bxxcmxlu.js +42 -0
  363. patchright/driver/package/lib/vite/recorder/index.html +29 -0
  364. patchright/driver/package/lib/vite/recorder/playwright-logo.svg +9 -0
  365. patchright/driver/package/lib/vite/traceViewer/assets/codeMirrorModule-CZTtn9l8.js +24 -0
  366. patchright/driver/package/lib/vite/traceViewer/assets/inspectorTab-DTusvprx.js +64 -0
  367. patchright/driver/package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
  368. patchright/driver/package/lib/vite/traceViewer/assets/workbench-DIEjrm3Z.js +9 -0
  369. patchright/driver/package/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
  370. patchright/driver/package/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
  371. patchright/driver/package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  372. patchright/driver/package/lib/vite/traceViewer/embedded.Do_J5Hgs.js +2 -0
  373. patchright/driver/package/lib/vite/traceViewer/embedded.html +18 -0
  374. patchright/driver/package/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
  375. patchright/driver/package/lib/vite/traceViewer/index.B21BXreT.js +2 -0
  376. patchright/driver/package/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
  377. patchright/driver/package/lib/vite/traceViewer/index.html +29 -0
  378. patchright/driver/package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +1 -0
  379. patchright/driver/package/lib/vite/traceViewer/playwright-logo.svg +9 -0
  380. patchright/driver/package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
  381. patchright/driver/package/lib/vite/traceViewer/recorder.Bfh_9UGt.js +2 -0
  382. patchright/driver/package/lib/vite/traceViewer/recorder.html +17 -0
  383. patchright/driver/package/lib/vite/traceViewer/snapshot.html +21 -0
  384. patchright/driver/package/lib/vite/traceViewer/sw.bundle.js +3 -0
  385. patchright/driver/package/lib/vite/traceViewer/uiMode.CAYqod-m.css +1 -0
  386. patchright/driver/package/lib/vite/traceViewer/uiMode.DloKQa-h.js +5 -0
  387. patchright/driver/package/lib/vite/traceViewer/uiMode.html +20 -0
  388. patchright/driver/package/lib/vite/traceViewer/workbench.D3JVcA9K.css +1 -0
  389. patchright/driver/package/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
  390. patchright/driver/package/lib/zipBundle.js +25 -0
  391. patchright/driver/package/lib/zipBundleImpl.js +5 -0
  392. patchright/driver/package/package.json +44 -0
  393. patchright/driver/package/protocol.yml +3720 -0
  394. patchright/driver/package/types/protocol.d.ts +21571 -0
  395. patchright/driver/package/types/structs.d.ts +45 -0
  396. patchright/driver/package/types/types.d.ts +22519 -0
  397. patchright/py.typed +0 -0
  398. patchright/sync_api/__init__.py +177 -0
  399. patchright/sync_api/_context_manager.py +74 -0
  400. patchright/sync_api/_generated.py +20155 -0
  401. patchright-1.48.0.dist-info/LICENSE +202 -0
  402. patchright-1.48.0.dist-info/METADATA +83 -0
  403. patchright-1.48.0.dist-info/RECORD +406 -0
  404. patchright-1.48.0.dist-info/WHEEL +5 -0
  405. patchright-1.48.0.dist-info/entry_points.txt +5 -0
  406. patchright-1.48.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,779 @@
1
+ import collections.abc
2
+ from typing import Any, List, Optional, Pattern, Sequence, Union
3
+ from urllib.parse import urljoin
4
+ from patchright._impl._api_structures import (
5
+ AriaRole,
6
+ ExpectedTextValue,
7
+ FrameExpectOptions,
8
+ )
9
+ from patchright._impl._connection import format_call_log
10
+ from patchright._impl._errors import Error
11
+ from patchright._impl._fetch import APIResponse
12
+ from patchright._impl._helper import is_textual_mime_type
13
+ from patchright._impl._locator import Locator
14
+ from patchright._impl._page import Page
15
+ from patchright._impl._str_utils import escape_regex_flags
16
+
17
+
18
+ class AssertionsBase:
19
+
20
+ def __init__(
21
+ self,
22
+ locator: Locator,
23
+ timeout: float = None,
24
+ is_not: bool = False,
25
+ message: Optional[str] = None,
26
+ ) -> None:
27
+ self._actual_locator = locator
28
+ self._loop = locator._loop
29
+ self._dispatcher_fiber = locator._dispatcher_fiber
30
+ self._timeout = timeout
31
+ self._is_not = is_not
32
+ self._custom_message = message
33
+
34
+ async def _expect_impl(
35
+ self,
36
+ expression: str,
37
+ expect_options: FrameExpectOptions,
38
+ expected: Any,
39
+ message: str,
40
+ ) -> None:
41
+ __tracebackhide__ = True
42
+ expect_options["isNot"] = self._is_not
43
+ if expect_options.get("timeout") is None:
44
+ expect_options["timeout"] = self._timeout or 5000
45
+ if expect_options["isNot"]:
46
+ message = message.replace("expected to", "expected not to")
47
+ if "useInnerText" in expect_options and expect_options["useInnerText"] is None:
48
+ del expect_options["useInnerText"]
49
+ result = await self._actual_locator._expect(expression, expect_options)
50
+ if result["matches"] == self._is_not:
51
+ actual = result.get("received")
52
+ if self._custom_message:
53
+ out_message = self._custom_message
54
+ if expected is not None:
55
+ out_message += f"\nExpected value: '{expected or '<None>'}'"
56
+ else:
57
+ out_message = (
58
+ f"{message} '{expected}'" if expected is not None else f"{message}"
59
+ )
60
+ raise AssertionError(
61
+ f"{out_message}\nActual value: {actual} {format_call_log(result.get('log'))}"
62
+ )
63
+
64
+
65
+ class PageAssertions(AssertionsBase):
66
+
67
+ def __init__(
68
+ self,
69
+ page: Page,
70
+ timeout: float = None,
71
+ is_not: bool = False,
72
+ message: Optional[str] = None,
73
+ ) -> None:
74
+ super().__init__(page.locator(":root"), timeout, is_not, message)
75
+ self._actual_page = page
76
+
77
+ @property
78
+ def _not(self) -> "PageAssertions":
79
+ return PageAssertions(
80
+ self._actual_page, self._timeout, not self._is_not, self._custom_message
81
+ )
82
+
83
+ async def to_have_title(
84
+ self, titleOrRegExp: Union[Pattern[str], str], timeout: float = None
85
+ ) -> None:
86
+ __tracebackhide__ = True
87
+ expected_values = to_expected_text_values(
88
+ [titleOrRegExp], normalize_white_space=True
89
+ )
90
+ await self._expect_impl(
91
+ "to.have.title",
92
+ FrameExpectOptions(expectedText=expected_values, timeout=timeout),
93
+ titleOrRegExp,
94
+ "Page title expected to be",
95
+ )
96
+
97
+ async def not_to_have_title(
98
+ self, titleOrRegExp: Union[Pattern[str], str], timeout: float = None
99
+ ) -> None:
100
+ __tracebackhide__ = True
101
+ await self._not.to_have_title(titleOrRegExp, timeout)
102
+
103
+ async def to_have_url(
104
+ self,
105
+ urlOrRegExp: Union[str, Pattern[str]],
106
+ timeout: float = None,
107
+ ignoreCase: bool = None,
108
+ ) -> None:
109
+ __tracebackhide__ = True
110
+ base_url = self._actual_page.context._options.get("baseURL")
111
+ if isinstance(urlOrRegExp, str) and base_url:
112
+ urlOrRegExp = urljoin(base_url, urlOrRegExp)
113
+ expected_text = to_expected_text_values([urlOrRegExp], ignoreCase=ignoreCase)
114
+ await self._expect_impl(
115
+ "to.have.url",
116
+ FrameExpectOptions(expectedText=expected_text, timeout=timeout),
117
+ urlOrRegExp,
118
+ "Page URL expected to be",
119
+ )
120
+
121
+ async def not_to_have_url(
122
+ self,
123
+ urlOrRegExp: Union[Pattern[str], str],
124
+ timeout: float = None,
125
+ ignoreCase: bool = None,
126
+ ) -> None:
127
+ __tracebackhide__ = True
128
+ await self._not.to_have_url(urlOrRegExp, timeout, ignoreCase)
129
+
130
+
131
+ class LocatorAssertions(AssertionsBase):
132
+
133
+ def __init__(
134
+ self,
135
+ locator: Locator,
136
+ timeout: float = None,
137
+ is_not: bool = False,
138
+ message: Optional[str] = None,
139
+ ) -> None:
140
+ super().__init__(locator, timeout, is_not, message)
141
+ self._actual_locator = locator
142
+
143
+ @property
144
+ def _not(self) -> "LocatorAssertions":
145
+ return LocatorAssertions(
146
+ self._actual_locator, self._timeout, not self._is_not, self._custom_message
147
+ )
148
+
149
+ async def to_contain_text(
150
+ self,
151
+ expected: Union[
152
+ Sequence[str],
153
+ Sequence[Pattern[str]],
154
+ Sequence[Union[Pattern[str], str]],
155
+ Pattern[str],
156
+ str,
157
+ ],
158
+ useInnerText: bool = None,
159
+ timeout: float = None,
160
+ ignoreCase: bool = None,
161
+ ) -> None:
162
+ __tracebackhide__ = True
163
+ if isinstance(expected, collections.abc.Sequence) and (
164
+ not isinstance(expected, str)
165
+ ):
166
+ expected_text = to_expected_text_values(
167
+ expected,
168
+ match_substring=True,
169
+ normalize_white_space=True,
170
+ ignoreCase=ignoreCase,
171
+ )
172
+ await self._expect_impl(
173
+ "to.contain.text.array",
174
+ FrameExpectOptions(
175
+ expectedText=expected_text,
176
+ useInnerText=useInnerText,
177
+ timeout=timeout,
178
+ ),
179
+ expected,
180
+ "Locator expected to contain text",
181
+ )
182
+ else:
183
+ expected_text = to_expected_text_values(
184
+ [expected],
185
+ match_substring=True,
186
+ normalize_white_space=True,
187
+ ignoreCase=ignoreCase,
188
+ )
189
+ await self._expect_impl(
190
+ "to.have.text",
191
+ FrameExpectOptions(
192
+ expectedText=expected_text,
193
+ useInnerText=useInnerText,
194
+ timeout=timeout,
195
+ ),
196
+ expected,
197
+ "Locator expected to contain text",
198
+ )
199
+
200
+ async def not_to_contain_text(
201
+ self,
202
+ expected: Union[
203
+ Sequence[str],
204
+ Sequence[Pattern[str]],
205
+ Sequence[Union[Pattern[str], str]],
206
+ Pattern[str],
207
+ str,
208
+ ],
209
+ useInnerText: bool = None,
210
+ timeout: float = None,
211
+ ignoreCase: bool = None,
212
+ ) -> None:
213
+ __tracebackhide__ = True
214
+ await self._not.to_contain_text(expected, useInnerText, timeout, ignoreCase)
215
+
216
+ async def to_have_attribute(
217
+ self,
218
+ name: str,
219
+ value: Union[str, Pattern[str]],
220
+ ignoreCase: bool = None,
221
+ timeout: float = None,
222
+ ) -> None:
223
+ __tracebackhide__ = True
224
+ expected_text = to_expected_text_values([value], ignoreCase=ignoreCase)
225
+ await self._expect_impl(
226
+ "to.have.attribute.value",
227
+ FrameExpectOptions(
228
+ expressionArg=name, expectedText=expected_text, timeout=timeout
229
+ ),
230
+ value,
231
+ "Locator expected to have attribute",
232
+ )
233
+
234
+ async def not_to_have_attribute(
235
+ self,
236
+ name: str,
237
+ value: Union[str, Pattern[str]],
238
+ ignoreCase: bool = None,
239
+ timeout: float = None,
240
+ ) -> None:
241
+ __tracebackhide__ = True
242
+ await self._not.to_have_attribute(
243
+ name, value, ignoreCase=ignoreCase, timeout=timeout
244
+ )
245
+
246
+ async def to_have_class(
247
+ self,
248
+ expected: Union[
249
+ Sequence[str],
250
+ Sequence[Pattern[str]],
251
+ Sequence[Union[Pattern[str], str]],
252
+ Pattern[str],
253
+ str,
254
+ ],
255
+ timeout: float = None,
256
+ ) -> None:
257
+ __tracebackhide__ = True
258
+ if isinstance(expected, collections.abc.Sequence) and (
259
+ not isinstance(expected, str)
260
+ ):
261
+ expected_text = to_expected_text_values(expected)
262
+ await self._expect_impl(
263
+ "to.have.class.array",
264
+ FrameExpectOptions(expectedText=expected_text, timeout=timeout),
265
+ expected,
266
+ "Locator expected to have class",
267
+ )
268
+ else:
269
+ expected_text = to_expected_text_values([expected])
270
+ await self._expect_impl(
271
+ "to.have.class",
272
+ FrameExpectOptions(expectedText=expected_text, timeout=timeout),
273
+ expected,
274
+ "Locator expected to have class",
275
+ )
276
+
277
+ async def not_to_have_class(
278
+ self,
279
+ expected: Union[
280
+ Sequence[str],
281
+ Sequence[Pattern[str]],
282
+ Sequence[Union[Pattern[str], str]],
283
+ Pattern[str],
284
+ str,
285
+ ],
286
+ timeout: float = None,
287
+ ) -> None:
288
+ __tracebackhide__ = True
289
+ await self._not.to_have_class(expected, timeout)
290
+
291
+ async def to_have_count(self, count: int, timeout: float = None) -> None:
292
+ __tracebackhide__ = True
293
+ await self._expect_impl(
294
+ "to.have.count",
295
+ FrameExpectOptions(expectedNumber=count, timeout=timeout),
296
+ count,
297
+ "Locator expected to have count",
298
+ )
299
+
300
+ async def not_to_have_count(self, count: int, timeout: float = None) -> None:
301
+ __tracebackhide__ = True
302
+ await self._not.to_have_count(count, timeout)
303
+
304
+ async def to_have_css(
305
+ self, name: str, value: Union[str, Pattern[str]], timeout: float = None
306
+ ) -> None:
307
+ __tracebackhide__ = True
308
+ expected_text = to_expected_text_values([value])
309
+ await self._expect_impl(
310
+ "to.have.css",
311
+ FrameExpectOptions(
312
+ expressionArg=name, expectedText=expected_text, timeout=timeout
313
+ ),
314
+ value,
315
+ "Locator expected to have CSS",
316
+ )
317
+
318
+ async def not_to_have_css(
319
+ self, name: str, value: Union[str, Pattern[str]], timeout: float = None
320
+ ) -> None:
321
+ __tracebackhide__ = True
322
+ await self._not.to_have_css(name, value, timeout)
323
+
324
+ async def to_have_id(
325
+ self, id: Union[str, Pattern[str]], timeout: float = None
326
+ ) -> None:
327
+ __tracebackhide__ = True
328
+ expected_text = to_expected_text_values([id])
329
+ await self._expect_impl(
330
+ "to.have.id",
331
+ FrameExpectOptions(expectedText=expected_text, timeout=timeout),
332
+ id,
333
+ "Locator expected to have ID",
334
+ )
335
+
336
+ async def not_to_have_id(
337
+ self, id: Union[str, Pattern[str]], timeout: float = None
338
+ ) -> None:
339
+ __tracebackhide__ = True
340
+ await self._not.to_have_id(id, timeout)
341
+
342
+ async def to_have_js_property(
343
+ self, name: str, value: Any, timeout: float = None
344
+ ) -> None:
345
+ __tracebackhide__ = True
346
+ await self._expect_impl(
347
+ "to.have.property",
348
+ FrameExpectOptions(
349
+ expressionArg=name, expectedValue=value, timeout=timeout
350
+ ),
351
+ value,
352
+ "Locator expected to have JS Property",
353
+ )
354
+
355
+ async def not_to_have_js_property(
356
+ self, name: str, value: Any, timeout: float = None
357
+ ) -> None:
358
+ __tracebackhide__ = True
359
+ await self._not.to_have_js_property(name, value, timeout)
360
+
361
+ async def to_have_value(
362
+ self, value: Union[str, Pattern[str]], timeout: float = None
363
+ ) -> None:
364
+ __tracebackhide__ = True
365
+ expected_text = to_expected_text_values([value])
366
+ await self._expect_impl(
367
+ "to.have.value",
368
+ FrameExpectOptions(expectedText=expected_text, timeout=timeout),
369
+ value,
370
+ "Locator expected to have Value",
371
+ )
372
+
373
+ async def not_to_have_value(
374
+ self, value: Union[str, Pattern[str]], timeout: float = None
375
+ ) -> None:
376
+ __tracebackhide__ = True
377
+ await self._not.to_have_value(value, timeout)
378
+
379
+ async def to_have_values(
380
+ self,
381
+ values: Union[
382
+ Sequence[str], Sequence[Pattern[str]], Sequence[Union[Pattern[str], str]]
383
+ ],
384
+ timeout: float = None,
385
+ ) -> None:
386
+ __tracebackhide__ = True
387
+ expected_text = to_expected_text_values(values)
388
+ await self._expect_impl(
389
+ "to.have.values",
390
+ FrameExpectOptions(expectedText=expected_text, timeout=timeout),
391
+ values,
392
+ "Locator expected to have Values",
393
+ )
394
+
395
+ async def not_to_have_values(
396
+ self,
397
+ values: Union[
398
+ Sequence[str], Sequence[Pattern[str]], Sequence[Union[Pattern[str], str]]
399
+ ],
400
+ timeout: float = None,
401
+ ) -> None:
402
+ __tracebackhide__ = True
403
+ await self._not.to_have_values(values, timeout)
404
+
405
+ async def to_have_text(
406
+ self,
407
+ expected: Union[
408
+ Sequence[str],
409
+ Sequence[Pattern[str]],
410
+ Sequence[Union[Pattern[str], str]],
411
+ Pattern[str],
412
+ str,
413
+ ],
414
+ useInnerText: bool = None,
415
+ timeout: float = None,
416
+ ignoreCase: bool = None,
417
+ ) -> None:
418
+ __tracebackhide__ = True
419
+ if isinstance(expected, collections.abc.Sequence) and (
420
+ not isinstance(expected, str)
421
+ ):
422
+ expected_text = to_expected_text_values(
423
+ expected, normalize_white_space=True, ignoreCase=ignoreCase
424
+ )
425
+ await self._expect_impl(
426
+ "to.have.text.array",
427
+ FrameExpectOptions(
428
+ expectedText=expected_text,
429
+ useInnerText=useInnerText,
430
+ timeout=timeout,
431
+ ),
432
+ expected,
433
+ "Locator expected to have text",
434
+ )
435
+ else:
436
+ expected_text = to_expected_text_values(
437
+ [expected], normalize_white_space=True, ignoreCase=ignoreCase
438
+ )
439
+ await self._expect_impl(
440
+ "to.have.text",
441
+ FrameExpectOptions(
442
+ expectedText=expected_text,
443
+ useInnerText=useInnerText,
444
+ timeout=timeout,
445
+ ),
446
+ expected,
447
+ "Locator expected to have text",
448
+ )
449
+
450
+ async def not_to_have_text(
451
+ self,
452
+ expected: Union[
453
+ Sequence[str],
454
+ Sequence[Pattern[str]],
455
+ Sequence[Union[Pattern[str], str]],
456
+ Pattern[str],
457
+ str,
458
+ ],
459
+ useInnerText: bool = None,
460
+ timeout: float = None,
461
+ ignoreCase: bool = None,
462
+ ) -> None:
463
+ __tracebackhide__ = True
464
+ await self._not.to_have_text(expected, useInnerText, timeout, ignoreCase)
465
+
466
+ async def to_be_attached(
467
+ self, attached: bool = None, timeout: float = None
468
+ ) -> None:
469
+ __tracebackhide__ = True
470
+ await self._expect_impl(
471
+ (
472
+ "to.be.attached"
473
+ if attached is None or attached is True
474
+ else "to.be.detached"
475
+ ),
476
+ FrameExpectOptions(timeout=timeout),
477
+ None,
478
+ "Locator expected to be attached",
479
+ )
480
+
481
+ async def to_be_checked(self, timeout: float = None, checked: bool = None) -> None:
482
+ __tracebackhide__ = True
483
+ await self._expect_impl(
484
+ (
485
+ "to.be.checked"
486
+ if checked is None or checked is True
487
+ else "to.be.unchecked"
488
+ ),
489
+ FrameExpectOptions(timeout=timeout),
490
+ None,
491
+ "Locator expected to be checked",
492
+ )
493
+
494
+ async def not_to_be_attached(
495
+ self, attached: bool = None, timeout: float = None
496
+ ) -> None:
497
+ __tracebackhide__ = True
498
+ await self._not.to_be_attached(attached=attached, timeout=timeout)
499
+
500
+ async def not_to_be_checked(self, timeout: float = None) -> None:
501
+ __tracebackhide__ = True
502
+ await self._not.to_be_checked(timeout)
503
+
504
+ async def to_be_disabled(self, timeout: float = None) -> None:
505
+ __tracebackhide__ = True
506
+ await self._expect_impl(
507
+ "to.be.disabled",
508
+ FrameExpectOptions(timeout=timeout),
509
+ None,
510
+ "Locator expected to be disabled",
511
+ )
512
+
513
+ async def not_to_be_disabled(self, timeout: float = None) -> None:
514
+ __tracebackhide__ = True
515
+ await self._not.to_be_disabled(timeout)
516
+
517
+ async def to_be_editable(
518
+ self, editable: bool = None, timeout: float = None
519
+ ) -> None:
520
+ __tracebackhide__ = True
521
+ if editable is None:
522
+ editable = True
523
+ await self._expect_impl(
524
+ "to.be.editable" if editable else "to.be.readonly",
525
+ FrameExpectOptions(timeout=timeout),
526
+ None,
527
+ "Locator expected to be editable",
528
+ )
529
+
530
+ async def not_to_be_editable(
531
+ self, editable: bool = None, timeout: float = None
532
+ ) -> None:
533
+ __tracebackhide__ = True
534
+ await self._not.to_be_editable(editable, timeout)
535
+
536
+ async def to_be_empty(self, timeout: float = None) -> None:
537
+ __tracebackhide__ = True
538
+ await self._expect_impl(
539
+ "to.be.empty",
540
+ FrameExpectOptions(timeout=timeout),
541
+ None,
542
+ "Locator expected to be empty",
543
+ )
544
+
545
+ async def not_to_be_empty(self, timeout: float = None) -> None:
546
+ __tracebackhide__ = True
547
+ await self._not.to_be_empty(timeout)
548
+
549
+ async def to_be_enabled(self, enabled: bool = None, timeout: float = None) -> None:
550
+ __tracebackhide__ = True
551
+ if enabled is None:
552
+ enabled = True
553
+ await self._expect_impl(
554
+ "to.be.enabled" if enabled else "to.be.disabled",
555
+ FrameExpectOptions(timeout=timeout),
556
+ None,
557
+ "Locator expected to be enabled",
558
+ )
559
+
560
+ async def not_to_be_enabled(
561
+ self, enabled: bool = None, timeout: float = None
562
+ ) -> None:
563
+ __tracebackhide__ = True
564
+ await self._not.to_be_enabled(enabled, timeout)
565
+
566
+ async def to_be_hidden(self, timeout: float = None) -> None:
567
+ __tracebackhide__ = True
568
+ await self._expect_impl(
569
+ "to.be.hidden",
570
+ FrameExpectOptions(timeout=timeout),
571
+ None,
572
+ "Locator expected to be hidden",
573
+ )
574
+
575
+ async def not_to_be_hidden(self, timeout: float = None) -> None:
576
+ __tracebackhide__ = True
577
+ await self._not.to_be_hidden(timeout)
578
+
579
+ async def to_be_visible(self, visible: bool = None, timeout: float = None) -> None:
580
+ __tracebackhide__ = True
581
+ if visible is None:
582
+ visible = True
583
+ await self._expect_impl(
584
+ "to.be.visible" if visible else "to.be.hidden",
585
+ FrameExpectOptions(timeout=timeout),
586
+ None,
587
+ "Locator expected to be visible",
588
+ )
589
+
590
+ async def not_to_be_visible(
591
+ self, visible: bool = None, timeout: float = None
592
+ ) -> None:
593
+ __tracebackhide__ = True
594
+ await self._not.to_be_visible(visible, timeout)
595
+
596
+ async def to_be_focused(self, timeout: float = None) -> None:
597
+ __tracebackhide__ = True
598
+ await self._expect_impl(
599
+ "to.be.focused",
600
+ FrameExpectOptions(timeout=timeout),
601
+ None,
602
+ "Locator expected to be focused",
603
+ )
604
+
605
+ async def not_to_be_focused(self, timeout: float = None) -> None:
606
+ __tracebackhide__ = True
607
+ await self._not.to_be_focused(timeout)
608
+
609
+ async def to_be_in_viewport(
610
+ self, ratio: float = None, timeout: float = None
611
+ ) -> None:
612
+ __tracebackhide__ = True
613
+ await self._expect_impl(
614
+ "to.be.in.viewport",
615
+ FrameExpectOptions(timeout=timeout, expectedNumber=ratio),
616
+ None,
617
+ "Locator expected to be in viewport",
618
+ )
619
+
620
+ async def not_to_be_in_viewport(
621
+ self, ratio: float = None, timeout: float = None
622
+ ) -> None:
623
+ __tracebackhide__ = True
624
+ await self._not.to_be_in_viewport(ratio=ratio, timeout=timeout)
625
+
626
+ async def to_have_accessible_description(
627
+ self,
628
+ description: Union[str, Pattern[str]],
629
+ ignoreCase: bool = None,
630
+ timeout: float = None,
631
+ ) -> None:
632
+ __tracebackhide__ = True
633
+ expected_values = to_expected_text_values([description], ignoreCase=ignoreCase)
634
+ await self._expect_impl(
635
+ "to.have.accessible.description",
636
+ FrameExpectOptions(expectedText=expected_values, timeout=timeout),
637
+ None,
638
+ "Locator expected to have accessible description",
639
+ )
640
+
641
+ async def not_to_have_accessible_description(
642
+ self,
643
+ name: Union[str, Pattern[str]],
644
+ ignoreCase: bool = None,
645
+ timeout: float = None,
646
+ ) -> None:
647
+ __tracebackhide__ = True
648
+ await self._not.to_have_accessible_description(name, ignoreCase, timeout)
649
+
650
+ async def to_have_accessible_name(
651
+ self,
652
+ name: Union[str, Pattern[str]],
653
+ ignoreCase: bool = None,
654
+ timeout: float = None,
655
+ ) -> None:
656
+ __tracebackhide__ = True
657
+ expected_values = to_expected_text_values([name], ignoreCase=ignoreCase)
658
+ await self._expect_impl(
659
+ "to.have.accessible.name",
660
+ FrameExpectOptions(expectedText=expected_values, timeout=timeout),
661
+ None,
662
+ "Locator expected to have accessible name",
663
+ )
664
+
665
+ async def not_to_have_accessible_name(
666
+ self,
667
+ name: Union[str, Pattern[str]],
668
+ ignoreCase: bool = None,
669
+ timeout: float = None,
670
+ ) -> None:
671
+ __tracebackhide__ = True
672
+ await self._not.to_have_accessible_name(name, ignoreCase, timeout)
673
+
674
+ async def to_have_role(self, role: AriaRole, timeout: float = None) -> None:
675
+ __tracebackhide__ = True
676
+ if isinstance(role, Pattern):
677
+ raise Error('"role" argument in to_have_role must be a string')
678
+ expected_values = to_expected_text_values([role])
679
+ await self._expect_impl(
680
+ "to.have.role",
681
+ FrameExpectOptions(expectedText=expected_values, timeout=timeout),
682
+ None,
683
+ "Locator expected to have accessible role",
684
+ )
685
+
686
+ async def not_to_have_role(self, role: AriaRole, timeout: float = None) -> None:
687
+ __tracebackhide__ = True
688
+ await self._not.to_have_role(role, timeout)
689
+
690
+
691
+ class APIResponseAssertions:
692
+
693
+ def __init__(
694
+ self,
695
+ response: APIResponse,
696
+ timeout: float = None,
697
+ is_not: bool = False,
698
+ message: Optional[str] = None,
699
+ ) -> None:
700
+ self._loop = response._loop
701
+ self._dispatcher_fiber = response._dispatcher_fiber
702
+ self._timeout = timeout
703
+ self._is_not = is_not
704
+ self._actual = response
705
+ self._custom_message = message
706
+
707
+ @property
708
+ def _not(self) -> "APIResponseAssertions":
709
+ return APIResponseAssertions(
710
+ self._actual, self._timeout, not self._is_not, self._custom_message
711
+ )
712
+
713
+ async def to_be_ok(self) -> None:
714
+ __tracebackhide__ = True
715
+ if self._is_not is not self._actual.ok:
716
+ return
717
+ message = f"Response status expected to be within [200..299] range, was '{self._actual.status}'"
718
+ if self._is_not:
719
+ message = message.replace("expected to", "expected not to")
720
+ out_message = self._custom_message or message
721
+ out_message += format_call_log(await self._actual._fetch_log())
722
+ content_type = self._actual.headers.get("content-type")
723
+ is_text_encoding = content_type and is_textual_mime_type(content_type)
724
+ text = await self._actual.text() if is_text_encoding else None
725
+ if text is not None:
726
+ out_message += f"\n Response Text:\n{text[:1000]}"
727
+ raise AssertionError(out_message)
728
+
729
+ async def not_to_be_ok(self) -> None:
730
+ __tracebackhide__ = True
731
+ await self._not.to_be_ok()
732
+
733
+
734
+ def expected_regex(
735
+ pattern: Pattern[str],
736
+ match_substring: bool,
737
+ normalize_white_space: bool,
738
+ ignoreCase: Optional[bool] = None,
739
+ ) -> ExpectedTextValue:
740
+ expected = ExpectedTextValue(
741
+ regexSource=pattern.pattern,
742
+ regexFlags=escape_regex_flags(pattern),
743
+ matchSubstring=match_substring,
744
+ normalizeWhiteSpace=normalize_white_space,
745
+ ignoreCase=ignoreCase,
746
+ )
747
+ if expected["ignoreCase"] is None:
748
+ del expected["ignoreCase"]
749
+ return expected
750
+
751
+
752
+ def to_expected_text_values(
753
+ items: Union[
754
+ Sequence[Pattern[str]], Sequence[str], Sequence[Union[str, Pattern[str]]]
755
+ ],
756
+ match_substring: bool = False,
757
+ normalize_white_space: bool = False,
758
+ ignoreCase: Optional[bool] = None,
759
+ ) -> Sequence[ExpectedTextValue]:
760
+ out: List[ExpectedTextValue] = []
761
+ assert isinstance(items, list)
762
+ for item in items:
763
+ if isinstance(item, str):
764
+ o = ExpectedTextValue(
765
+ string=item,
766
+ matchSubstring=match_substring,
767
+ normalizeWhiteSpace=normalize_white_space,
768
+ ignoreCase=ignoreCase,
769
+ )
770
+ if o["ignoreCase"] is None:
771
+ del o["ignoreCase"]
772
+ out.append(o)
773
+ elif isinstance(item, Pattern):
774
+ out.append(
775
+ expected_regex(item, match_substring, normalize_white_space, ignoreCase)
776
+ )
777
+ else:
778
+ raise Error("value must be a string or regular expression")
779
+ return out