osn-selenium 1.1.0__py3-none-any.whl → 1.2.0__py3-none-any.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 (418) hide show
  1. osn_selenium/_decorators.py +57 -0
  2. osn_selenium/_trio_threads_helpers.py +157 -0
  3. osn_selenium/_typehints.py +1 -1
  4. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  5. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  6. osn_selenium/abstract/webdriver/core/base.py +0 -14
  7. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  8. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/script.py +5 -4
  10. osn_selenium/abstract/webdriver/core/window.py +11 -11
  11. osn_selenium/dev_tools/_decorators.py +1 -42
  12. osn_selenium/dev_tools/_functions.py +2 -4
  13. osn_selenium/dev_tools/domains/__init__.py +1 -1
  14. osn_selenium/dev_tools/domains/fetch.py +5 -7
  15. osn_selenium/dev_tools/domains_default/fetch.py +1 -1
  16. osn_selenium/dev_tools/logger/main.py +9 -9
  17. osn_selenium/dev_tools/logger/target.py +7 -7
  18. osn_selenium/dev_tools/manager/base.py +10 -19
  19. osn_selenium/dev_tools/manager/lifecycle.py +83 -74
  20. osn_selenium/dev_tools/manager/logging.py +1 -1
  21. osn_selenium/dev_tools/manager/targets.py +13 -5
  22. osn_selenium/dev_tools/settings.py +4 -4
  23. osn_selenium/dev_tools/target/base.py +18 -11
  24. osn_selenium/dev_tools/target/discovery.py +1 -1
  25. osn_selenium/dev_tools/target/events.py +2 -2
  26. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  27. osn_selenium/dev_tools/target/lifecycle.py +103 -43
  28. osn_selenium/dev_tools/target/logging.py +1 -1
  29. osn_selenium/exceptions/__init__.py +0 -1
  30. osn_selenium/exceptions/base.py +28 -1
  31. osn_selenium/exceptions/bidi_bridge.py +59 -0
  32. osn_selenium/exceptions/configuration.py +1 -8
  33. osn_selenium/exceptions/dependencies.py +2 -2
  34. osn_selenium/exceptions/devtools.py +9 -39
  35. osn_selenium/exceptions/experimental.py +26 -0
  36. osn_selenium/exceptions/flags.py +0 -2
  37. osn_selenium/exceptions/instance.py +1 -9
  38. osn_selenium/exceptions/javascript.py +0 -2
  39. osn_selenium/exceptions/logic.py +0 -2
  40. osn_selenium/exceptions/path.py +1 -9
  41. osn_selenium/exceptions/platform.py +0 -2
  42. osn_selenium/exceptions/protocol.py +0 -3
  43. osn_selenium/exceptions/webdriver.py +1 -7
  44. osn_selenium/exceptions/window.py +1 -8
  45. osn_selenium/executors/sync/cdp.py +0 -5
  46. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  47. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  48. osn_selenium/executors/trio_threads/cdp.py +0 -5
  49. osn_selenium/flags/base.py +6 -4
  50. osn_selenium/flags/blink.py +2 -2
  51. osn_selenium/flags/chrome.py +6 -6
  52. osn_selenium/flags/edge.py +6 -6
  53. osn_selenium/instances/convert.py +44 -3
  54. osn_selenium/instances/protocols.py +47 -1
  55. osn_selenium/instances/sync/browsing_context.py +2 -2
  56. osn_selenium/instances/sync/script.py +7 -2
  57. osn_selenium/instances/sync/web_element.py +1 -1
  58. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  59. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  60. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  61. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  62. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  63. osn_selenium/instances/trio_threads/browsing_context.py +2 -2
  64. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  65. osn_selenium/instances/trio_threads/network.py +1 -1
  66. osn_selenium/instances/trio_threads/script.py +7 -2
  67. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  68. osn_selenium/instances/unified/browsing_context.py +2 -2
  69. osn_selenium/instances/unified/script.py +2 -2
  70. osn_selenium/instances/unified/web_element.py +3 -5
  71. osn_selenium/javascript/fingerprint/__init__.py +2 -1
  72. osn_selenium/trio_bidi/__init__.py +1 -0
  73. osn_selenium/trio_bidi/_context_vars.py +12 -0
  74. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  75. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  76. osn_selenium/trio_bidi/_file_functions.py +28 -0
  77. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  78. osn_selenium/trio_bidi/_models.py +199 -0
  79. osn_selenium/trio_bidi/_typehints.py +20 -0
  80. osn_selenium/trio_bidi/connection_pool.py +587 -0
  81. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  82. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  83. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  84. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  85. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  86. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  87. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  88. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  89. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  90. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  91. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  92. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  93. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  94. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  95. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  96. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  97. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  98. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  99. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  100. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  101. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  102. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  103. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  104. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  105. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  106. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  107. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  108. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  109. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  110. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  111. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  112. osn_selenium/trio_bidi/mixin.py +186 -0
  113. osn_selenium/trio_bidi/remote_connection.py +164 -0
  114. osn_selenium/trio_threads_mixin.py +22 -68
  115. osn_selenium/webdrivers/_args_helpers.py +118 -5
  116. osn_selenium/webdrivers/_typehints.py +9 -3
  117. osn_selenium/webdrivers/protocols.py +81 -1
  118. osn_selenium/webdrivers/sync/blink/base.py +10 -0
  119. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  120. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  121. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  122. osn_selenium/webdrivers/sync/core/base.py +3 -11
  123. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  124. osn_selenium/webdrivers/sync/core/file.py +3 -2
  125. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  126. osn_selenium/webdrivers/sync/core/script.py +3 -2
  127. osn_selenium/webdrivers/sync/core/window.py +3 -3
  128. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  129. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  130. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  131. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  132. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  133. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  134. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  135. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  136. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  137. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  138. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  139. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  140. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  141. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  142. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  143. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  144. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  145. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  146. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  147. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  148. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  149. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  150. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  151. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  152. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  153. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  154. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  155. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  156. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  157. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  158. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  159. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  160. osn_selenium/webdrivers/trio_threads/blink/__init__.py +7 -1
  161. osn_selenium/webdrivers/trio_threads/blink/base.py +14 -0
  162. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  163. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  164. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  165. osn_selenium/webdrivers/trio_threads/core/__init__.py +0 -10
  166. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  167. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  168. osn_selenium/webdrivers/trio_threads/core/base.py +4 -16
  169. osn_selenium/webdrivers/trio_threads/core/capture.py +3 -2
  170. osn_selenium/webdrivers/trio_threads/core/file.py +3 -2
  171. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +44 -10
  172. osn_selenium/webdrivers/trio_threads/core/script.py +3 -2
  173. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  174. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  175. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  176. osn_selenium/webdrivers/trio_threads/core/window.py +4 -4
  177. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  178. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  179. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  180. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  181. osn_selenium/webdrivers/unified/blink/base.py +5 -1
  182. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  183. osn_selenium/webdrivers/unified/chrome/base.py +5 -1
  184. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  185. osn_selenium/webdrivers/unified/core/base.py +16 -10
  186. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  187. osn_selenium/webdrivers/unified/core/components.py +12 -7
  188. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  189. osn_selenium/webdrivers/unified/core/file.py +3 -2
  190. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  191. osn_selenium/webdrivers/unified/core/script.py +5 -3
  192. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  193. osn_selenium/webdrivers/unified/core/window.py +9 -8
  194. osn_selenium/webdrivers/unified/edge/base.py +5 -1
  195. osn_selenium/webdrivers/unified/yandex/base.py +5 -1
  196. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +3 -2
  197. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  198. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  199. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  200. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  201. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  202. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  203. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  204. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  205. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  206. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  207. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  208. osn_selenium/abstract/executors/cdp/console.py +0 -18
  209. osn_selenium/abstract/executors/cdp/css.py +0 -197
  210. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  211. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  212. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  213. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  214. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  215. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  216. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  217. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  218. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  219. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  220. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  221. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  222. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  223. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  224. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  225. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  226. osn_selenium/abstract/executors/cdp/input.py +0 -158
  227. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  228. osn_selenium/abstract/executors/cdp/io.py +0 -24
  229. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  230. osn_selenium/abstract/executors/cdp/log.py +0 -27
  231. osn_selenium/abstract/executors/cdp/media.py +0 -14
  232. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  233. osn_selenium/abstract/executors/cdp/network.py +0 -252
  234. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  235. osn_selenium/abstract/executors/cdp/page.py +0 -347
  236. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  237. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  238. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  239. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  240. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  241. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  242. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  243. osn_selenium/abstract/executors/cdp/security.py +0 -26
  244. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  245. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  246. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  247. osn_selenium/abstract/executors/cdp/target.py +0 -125
  248. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  249. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  250. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  251. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  252. osn_selenium/base_mixin.py +0 -122
  253. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  254. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  255. osn_selenium/executors/sync/cdp/animation.py +0 -50
  256. osn_selenium/executors/sync/cdp/audits.py +0 -48
  257. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  258. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  259. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  260. osn_selenium/executors/sync/cdp/browser.py +0 -131
  261. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  262. osn_selenium/executors/sync/cdp/cast.py +0 -38
  263. osn_selenium/executors/sync/cdp/console.py +0 -24
  264. osn_selenium/executors/sync/cdp/css.py +0 -187
  265. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  266. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  267. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  268. osn_selenium/executors/sync/cdp/dom.py +0 -310
  269. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  270. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  271. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  272. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  273. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  274. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  275. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  276. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  277. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  278. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  279. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  280. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  281. osn_selenium/executors/sync/cdp/input.py +0 -233
  282. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  283. osn_selenium/executors/sync/cdp/io.py +0 -33
  284. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  285. osn_selenium/executors/sync/cdp/log.py +0 -35
  286. osn_selenium/executors/sync/cdp/media.py +0 -21
  287. osn_selenium/executors/sync/cdp/memory.py +0 -62
  288. osn_selenium/executors/sync/cdp/network.py +0 -287
  289. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  290. osn_selenium/executors/sync/cdp/page.py +0 -365
  291. osn_selenium/executors/sync/cdp/performance.py +0 -33
  292. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  293. osn_selenium/executors/sync/cdp/preload.py +0 -21
  294. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  295. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  296. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  297. osn_selenium/executors/sync/cdp/schema.py +0 -23
  298. osn_selenium/executors/sync/cdp/security.py +0 -30
  299. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  300. osn_selenium/executors/sync/cdp/storage.py +0 -151
  301. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  302. osn_selenium/executors/sync/cdp/target.py +0 -147
  303. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  304. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  305. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  306. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  307. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  308. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  309. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  310. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  311. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  312. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  313. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  314. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  315. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  316. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  317. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  318. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  319. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  320. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  321. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  322. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  323. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  324. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  325. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  326. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  327. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  328. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  329. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  330. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  331. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  332. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  333. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  334. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  335. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  336. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  337. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  338. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  339. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  340. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  341. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  342. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  343. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  344. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  345. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  346. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  347. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  348. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  349. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  350. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  351. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  352. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  353. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  354. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  355. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  356. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  357. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  358. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  359. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  360. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  361. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  362. osn_selenium/executors/unified/cdp/animation.py +0 -50
  363. osn_selenium/executors/unified/cdp/audits.py +0 -45
  364. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  365. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  366. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  367. osn_selenium/executors/unified/cdp/browser.py +0 -143
  368. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  369. osn_selenium/executors/unified/cdp/cast.py +0 -32
  370. osn_selenium/executors/unified/cdp/console.py +0 -18
  371. osn_selenium/executors/unified/cdp/css.py +0 -237
  372. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  373. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  374. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  375. osn_selenium/executors/unified/cdp/dom.py +0 -380
  376. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  377. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  378. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  379. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  380. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  381. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  382. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  383. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  384. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  385. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  386. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  387. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  388. osn_selenium/executors/unified/cdp/input.py +0 -254
  389. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  390. osn_selenium/executors/unified/cdp/io.py +0 -29
  391. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  392. osn_selenium/executors/unified/cdp/log.py +0 -29
  393. osn_selenium/executors/unified/cdp/media.py +0 -15
  394. osn_selenium/executors/unified/cdp/memory.py +0 -59
  395. osn_selenium/executors/unified/cdp/network.py +0 -323
  396. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  397. osn_selenium/executors/unified/cdp/page.py +0 -410
  398. osn_selenium/executors/unified/cdp/performance.py +0 -27
  399. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  400. osn_selenium/executors/unified/cdp/preload.py +0 -15
  401. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  402. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  403. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  404. osn_selenium/executors/unified/cdp/schema.py +0 -17
  405. osn_selenium/executors/unified/cdp/security.py +0 -27
  406. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  407. osn_selenium/executors/unified/cdp/storage.py +0 -178
  408. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  409. osn_selenium/executors/unified/cdp/target.py +0 -165
  410. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  411. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  412. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  413. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  414. osn_selenium-1.1.0.dist-info/RECORD +0 -615
  415. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  416. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  417. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +0 -0
  418. {osn_selenium-1.1.0.dist-info → osn_selenium-1.2.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,81 @@
1
+ from typing import Any, Dict
2
+ from selenium.webdriver.remote.command import Command
3
+ from osn_selenium.trio_bidi._typehints import (
4
+ MAP_RESPONSE_FUNCTION_TYPEHINT,
5
+ REQUEST_PARAMS_TYPEHINT
6
+ )
7
+ from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import (
8
+ map_js_primitive_response,
9
+ map_void_response
10
+ )
11
+
12
+
13
+ __all__ = ["MAPPED_RESPONSE_ALERT_COMMANDS"]
14
+
15
+
16
+ def _map_w3c_set_alert_value_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
17
+ """
18
+ Maps BiDi response for setting alert value to W3C void response.
19
+
20
+ Args:
21
+ bidi_result (Dict[str, Any]): BiDi response result.
22
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
23
+
24
+ Returns:
25
+ Dict[str, Any]: W3C void response.
26
+ """
27
+
28
+ return map_void_response(bidi_result=bidi_result, request_params=request_params)
29
+
30
+
31
+ def _map_w3c_get_alert_text_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
32
+ """
33
+ Maps BiDi response for alert text to W3C primitive response.
34
+
35
+ Args:
36
+ bidi_result (Dict[str, Any]): BiDi response result.
37
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
38
+
39
+ Returns:
40
+ Dict[str, Any]: W3C response with the alert text.
41
+ """
42
+
43
+ return map_js_primitive_response(bidi_result=bidi_result, request_params=request_params)
44
+
45
+
46
+ def _map_w3c_dismiss_alert_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
47
+ """
48
+ Maps BiDi response for dismissing alert to W3C void response.
49
+
50
+ Args:
51
+ bidi_result (Dict[str, Any]): BiDi response result.
52
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
53
+
54
+ Returns:
55
+ Dict[str, Any]: W3C void response.
56
+ """
57
+
58
+ return map_void_response(bidi_result=bidi_result, request_params=request_params)
59
+
60
+
61
+ def _map_w3c_accept_alert_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
62
+ """
63
+ Maps BiDi response for accepting alert to W3C void response.
64
+
65
+ Args:
66
+ bidi_result (Dict[str, Any]): BiDi response result.
67
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
68
+
69
+ Returns:
70
+ Dict[str, Any]: W3C void response.
71
+ """
72
+
73
+ return map_void_response(bidi_result=bidi_result, request_params=request_params)
74
+
75
+
76
+ MAPPED_RESPONSE_ALERT_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {
77
+ Command.W3C_GET_ALERT_TEXT: _map_w3c_get_alert_text_response,
78
+ Command.W3C_ACCEPT_ALERT: _map_w3c_accept_alert_response,
79
+ Command.W3C_DISMISS_ALERT: _map_w3c_dismiss_alert_response,
80
+ Command.W3C_SET_ALERT_VALUE: _map_w3c_set_alert_value_response,
81
+ }
@@ -0,0 +1,183 @@
1
+ from typing import Any, Dict
2
+ from osn_selenium.trio_bidi._internal_mappings import (
3
+ OSN_SWITCH_CONTEXT_KEY
4
+ )
5
+ from osn_selenium.trio_bidi._typehints import (
6
+ CURRENT_BROWSING_CONTEXT_TYPEHINT
7
+ )
8
+ from osn_selenium.trio_bidi.mapping._utils import (
9
+ ELEMENT_KEY,
10
+ SHADOW_ROOT_KEY
11
+ )
12
+
13
+
14
+ __all__ = [
15
+ "build_w3c_element",
16
+ "build_w3c_shadow_root",
17
+ "convert_bidi_to_w3c_js",
18
+ "inject_osn_switch_context_to_response",
19
+ "map_js_primitive_response",
20
+ "map_js_response",
21
+ "map_rect_response",
22
+ "map_void_response"
23
+ ]
24
+
25
+
26
+ def map_void_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
27
+ """
28
+ Returns a standard W3C void response (value: null).
29
+
30
+ Args:
31
+ bidi_result (Dict[str, Any]): BiDi result dictionary.
32
+ request_params (Any): Original request parameters.
33
+
34
+ Returns:
35
+ Dict[str, Any]: W3C response with null value.
36
+ """
37
+
38
+ return {"value": None}
39
+
40
+
41
+ def map_rect_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
42
+ """
43
+ Maps BiDi geometric result to W3C rect format.
44
+
45
+ Args:
46
+ bidi_result (Dict[str, Any]): BiDi result containing geometry data.
47
+ request_params (Any): Original request parameters.
48
+
49
+ Returns:
50
+ Dict[str, Any]: W3C response with x, y, width, height.
51
+ """
52
+
53
+ return {
54
+ "value": {
55
+ "x": bidi_result.get("x", 0),
56
+ "y": bidi_result.get("y", 0),
57
+ "width": bidi_result.get("width", 0),
58
+ "height": bidi_result.get("height", 0)
59
+ }
60
+ }
61
+
62
+
63
+ def convert_bidi_to_w3c_js(bidi_value: Dict[str, Any]) -> Any:
64
+ """
65
+ Recursively converts a BiDi RemoteValue/LocalValue into a Python representation compatible with W3C.
66
+
67
+ Args:
68
+ bidi_value (Dict[str, Any]): The BiDi value dictionary to convert.
69
+
70
+ Returns:
71
+ Any: The converted value (dict, list, primitive, or element reference).
72
+ """
73
+
74
+ if not isinstance(bidi_value, dict):
75
+ return bidi_value
76
+
77
+ rv_type = bidi_value.get("type")
78
+
79
+ if rv_type in ("string", "number", "boolean"):
80
+ return bidi_value.get("value")
81
+
82
+ if rv_type == "null":
83
+ return None
84
+
85
+ if rv_type == "window":
86
+ return bidi_value.get("value", {}).get("context")
87
+
88
+ if rv_type == "node":
89
+ shared_id = bidi_value.get("sharedId") or bidi_value.get("value", {}).get("sharedId")
90
+ return {ELEMENT_KEY: shared_id}
91
+
92
+ if rv_type == "array":
93
+ return [convert_bidi_to_w3c_js(item) for item in bidi_value.get("value", [])]
94
+
95
+ if rv_type == "object":
96
+ result = {}
97
+
98
+ for pair in bidi_value.get("value", []):
99
+ k = convert_bidi_to_w3c_js(pair[0])
100
+ v = convert_bidi_to_w3c_js(pair[1])
101
+
102
+ result[k] = v
103
+
104
+ return result
105
+
106
+ return None
107
+
108
+
109
+ def map_js_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
110
+ """
111
+ Maps any BiDi RemoteValue to a W3C compatible Python object.
112
+
113
+ Args:
114
+ bidi_result (Dict[str, Any]): BiDi result containing 'result'.
115
+ request_params (Any): Original request parameters.
116
+
117
+ Returns:
118
+ Dict[str, Any]: W3C response with converted value.
119
+ """
120
+
121
+ remote_value = bidi_result.get("result", {})
122
+
123
+ return {"value": convert_bidi_to_w3c_js(bidi_value=remote_value)}
124
+
125
+
126
+ def map_js_primitive_response(bidi_result: Dict[str, Any], request_params: Any) -> Dict[str, Any]:
127
+ """
128
+ Maps a BiDi script result containing a simple value to W3C format.
129
+
130
+ Args:
131
+ bidi_result (Dict[str, Any]): BiDi result containing 'result.value'.
132
+ request_params (Any): Original request parameters.
133
+
134
+ Returns:
135
+ Dict[str, Any]: W3C response with the primitive value.
136
+ """
137
+
138
+ return {"value": bidi_result.get("result", {}).get("value")}
139
+
140
+
141
+ def inject_osn_switch_context_to_response(response: Dict[str, Any], context_id: CURRENT_BROWSING_CONTEXT_TYPEHINT) -> Dict[str, Any]:
142
+ """
143
+ Injects a special key into the response to notify the driver of a context switch.
144
+
145
+ Args:
146
+ response (Dict[str, Any]): The W3C response dictionary.
147
+ context_id (CURRENT_BROWSING_CONTEXT_TYPEHINT): The target browsing context ID.
148
+
149
+ Returns:
150
+ Dict[str, Any]: Modified response dictionary.
151
+ """
152
+
153
+ response[OSN_SWITCH_CONTEXT_KEY] = context_id
154
+
155
+ return response
156
+
157
+
158
+ def build_w3c_shadow_root(id_: str) -> Dict[str, Any]:
159
+ """
160
+ Wraps a shared ID into a W3C shadow root reference.
161
+
162
+ Args:
163
+ id_ (str): The shadow root shared ID.
164
+
165
+ Returns:
166
+ Dict[str, Any]: W3C shadow root dictionary.
167
+ """
168
+
169
+ return {SHADOW_ROOT_KEY: id_}
170
+
171
+
172
+ def build_w3c_element(id_: str) -> Dict[str, Any]:
173
+ """
174
+ Wraps a shared ID into a W3C element reference.
175
+
176
+ Args:
177
+ id_ (str): The element shared ID.
178
+
179
+ Returns:
180
+ Dict[str, Any]: W3C element dictionary.
181
+ """
182
+
183
+ return {ELEMENT_KEY: id_}
@@ -0,0 +1,153 @@
1
+ from typing import (
2
+ Any,
3
+ Dict,
4
+ Optional,
5
+ Tuple
6
+ )
7
+ from selenium.webdriver.remote.errorhandler import ErrorCode
8
+ from osn_selenium.trio_bidi._typehints import (
9
+ REQUEST_PARAMS_TYPEHINT
10
+ )
11
+ from osn_selenium.trio_bidi._error_mappings import (
12
+ create_w3c_error_response
13
+ )
14
+
15
+
16
+ __all__ = [
17
+ "validate_element_exceptions",
18
+ "validate_javascript_error",
19
+ "validate_no_such_element"
20
+ ]
21
+
22
+
23
+ def validate_no_such_element(nodes: Any, request_params: REQUEST_PARAMS_TYPEHINT) -> Optional[Dict[str, Any]]:
24
+ """
25
+ Checks if nodes list is empty and returns a NO_SUCH_ELEMENT error if so.
26
+
27
+ Args:
28
+ nodes (Any): The collection of nodes found.
29
+ request_params (Optional[Dict[str, Any]]): Original request parameters for message details.
30
+
31
+ Returns:
32
+ Optional[Dict[str, Any]]: W3C error response if empty, else None.
33
+ """
34
+
35
+ if not nodes:
36
+ using = request_params.get("using", "unknown")
37
+ value = request_params.get("value", "unknown")
38
+
39
+ message = f"no such element: Unable to locate element: {{\"method\":\"{using}\",\"selector\":\"{value}\"}}"
40
+ status_code, error_string = ErrorCode.NO_SUCH_ELEMENT
41
+
42
+ return create_w3c_error_response(status_code=status_code, error_string=error_string, message=message)
43
+
44
+ return None
45
+
46
+
47
+ def _get_js_exception_details(bidi_result: Dict[str, Any]) -> Tuple[Optional[str], str]:
48
+ """
49
+ Extracts text and stacktrace from a BiDi exception result.
50
+
51
+ Args:
52
+ bidi_result (Dict[str, Any]): The BiDi response object.
53
+
54
+ Returns:
55
+ Tuple[Optional[str], str]: Lowercased error message and formatted stacktrace string.
56
+ """
57
+
58
+ if bidi_result.get("type") != "exception":
59
+ return None, ""
60
+
61
+ details = bidi_result.get("exceptionDetails", {})
62
+ text = details.get("text", "")
63
+
64
+ stack_frames = details.get("stackTrace", {}).get("callFrames", [])
65
+ stack_lines = []
66
+
67
+ for frame in stack_frames:
68
+ func = frame.get("functionName") or "anonymous"
69
+ url = frame.get("url") or "unknown"
70
+ line = frame.get("lineNumber", 0)
71
+ col = frame.get("columnNumber", 0)
72
+
73
+ stack_lines.append(f" at {func} ({url}:{line}:{col})")
74
+
75
+ return text.lower(), "\n".join(stack_lines)
76
+
77
+
78
+ def validate_javascript_error(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Optional[Dict[str, Any]]:
79
+ """
80
+ Checks for script exceptions in BiDi result and converts them to JAVASCRIPT_ERROR.
81
+
82
+ Args:
83
+ bidi_result (Dict[str, Any]): Result from script evaluation.
84
+ request_params (Optional[Dict[str, Any]]): Original request parameters.
85
+
86
+ Returns:
87
+ Optional[Dict[str, Any]]: W3C error response if exception occurred, else None.
88
+ """
89
+
90
+ error_text, stack = _get_js_exception_details(bidi_result=bidi_result)
91
+
92
+ if error_text:
93
+ status_code, error_string = ErrorCode.JAVASCRIPT_ERROR
94
+ message = f"javascript error: {error_text}"
95
+
96
+ return create_w3c_error_response(
97
+ status_code=status_code,
98
+ error_string=error_string,
99
+ message=message,
100
+ stacktrace=stack
101
+ )
102
+
103
+ return None
104
+
105
+
106
+ def validate_element_exceptions(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Optional[Dict[str, Any]]:
107
+ """
108
+ Validates script execution results for element-specific exceptions (stale, not interactable, etc.).
109
+
110
+ Args:
111
+ bidi_result (Dict[str, Any]): Result from script evaluation.
112
+ request_params (Optional[Dict[str, Any]]): Original request parameters.
113
+
114
+ Returns:
115
+ Optional[Dict[str, Any]]: W3C error response if an element-related error occurred, else None.
116
+ """
117
+
118
+ error_text, stack = _get_js_exception_details(bidi_result=bidi_result)
119
+
120
+ if not error_text:
121
+ return None
122
+
123
+ mapping = {
124
+ "stale element reference": ErrorCode.STALE_ELEMENT_REFERENCE,
125
+ "no such shadow root": ErrorCode.NO_SUCH_SHADOW_ROOT,
126
+ "element not interactable": ErrorCode.ELEMENT_NOT_INTERACTABLE,
127
+ "invalid element state": ErrorCode.INVALID_ELEMENT_STATE,
128
+ "element not selectable": ErrorCode.ELEMENT_IS_NOT_SELECTABLE,
129
+ "element click intercepted": ErrorCode.ELEMENT_CLICK_INTERCEPTED,
130
+ "invalid element coordinates": ErrorCode.INVALID_ELEMENT_COORDINATES,
131
+ }
132
+
133
+ for key, code_info in mapping.items():
134
+ if key in error_text:
135
+ raw_msg = bidi_result["result"]["exceptionDetails"]["text"]
136
+
137
+ if key == "stale element reference":
138
+ message = "stale element reference: element is not attached to the page document"
139
+ else:
140
+ message = raw_msg
141
+
142
+ return create_w3c_error_response(
143
+ status_code=code_info[0]
144
+ if isinstance(code_info, list)
145
+ else 13,
146
+ error_string=code_info[1]
147
+ if isinstance(code_info, list)
148
+ else code_info[0],
149
+ message=message,
150
+ stacktrace=stack,
151
+ )
152
+
153
+ return validate_javascript_error(bidi_result, request_params)
@@ -0,0 +1,71 @@
1
+ from typing import Any, Dict
2
+ from selenium.webdriver.remote.command import Command
3
+ from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import (
4
+ map_js_primitive_response
5
+ )
6
+ from osn_selenium.trio_bidi._typehints import (
7
+ MAP_RESPONSE_FUNCTION_TYPEHINT,
8
+ REQUEST_PARAMS_TYPEHINT
9
+ )
10
+ from osn_selenium.trio_bidi.mapping.response_functions._args_validators import (
11
+ validate_javascript_error
12
+ )
13
+
14
+
15
+ __all__ = ["MAPPED_RESPONSE_CAPTURE_COMMANDS"]
16
+
17
+
18
+ def _map_screenshot_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
19
+ """
20
+ Extracts base64 screenshot data from BiDi result.
21
+
22
+ Args:
23
+ bidi_result (Dict[str, Any]): BiDi response containing 'data'.
24
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
25
+
26
+ Returns:
27
+ Dict[str, Any]: W3C response with base64 data.
28
+ """
29
+
30
+ return {"value": bidi_result.get("data")}
31
+
32
+
33
+ def _map_print_page_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
34
+ """
35
+ Extracts base64 PDF data from BiDi print result.
36
+
37
+ Args:
38
+ bidi_result (Dict[str, Any]): BiDi response containing 'data'.
39
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
40
+
41
+ Returns:
42
+ Dict[str, Any]: W3C response with base64 data.
43
+ """
44
+
45
+ return {"value": bidi_result.get("data")}
46
+
47
+
48
+ def _map_get_page_source_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
49
+ """
50
+ Maps BiDi script evaluation result to page source string.
51
+
52
+ Args:
53
+ bidi_result (Dict[str, Any]): BiDi response with JS evaluation result.
54
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
55
+
56
+ Returns:
57
+ Dict[str, Any]: W3C response with HTML string.
58
+ """
59
+
60
+ javascript_error_validation = validate_javascript_error(bidi_result=bidi_result, request_params=request_params)
61
+ if javascript_error_validation is not None:
62
+ return javascript_error_validation
63
+
64
+ return map_js_primitive_response(bidi_result, request_params)
65
+
66
+
67
+ MAPPED_RESPONSE_CAPTURE_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {
68
+ Command.SCREENSHOT: _map_screenshot_response,
69
+ Command.GET_PAGE_SOURCE: _map_get_page_source_response,
70
+ Command.PRINT_PAGE: _map_print_page_response,
71
+ }
@@ -0,0 +1,26 @@
1
+ from typing import Any, Dict
2
+ from osn_selenium.trio_bidi._typehints import (
3
+ MAP_RESPONSE_FUNCTION_TYPEHINT,
4
+ REQUEST_PARAMS_TYPEHINT
5
+ )
6
+
7
+
8
+ __all__ = ["MAPPED_RESPONSE_CDP_COMMANDS"]
9
+
10
+
11
+ def _execute_cdp_command(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
12
+ """
13
+ Maps the result of a CDP command back to the W3C response format.
14
+
15
+ Args:
16
+ bidi_result (Dict[str, Any]): The result received from BiDi.
17
+ request_params (Optional[Dict[str, Any]]): The original request parameters.
18
+
19
+ Returns:
20
+ Dict[str, Any]: The W3C-compatible result wrapper.
21
+ """
22
+
23
+ return {"value": bidi_result.get("result")}
24
+
25
+
26
+ MAPPED_RESPONSE_CDP_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {"executeCdpCommand": _execute_cdp_command}
@@ -0,0 +1,58 @@
1
+ from typing import Any, Dict
2
+ from selenium.webdriver.remote.command import Command
3
+ from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import build_w3c_element
4
+ from osn_selenium.trio_bidi._typehints import (
5
+ MAP_RESPONSE_FUNCTION_TYPEHINT,
6
+ REQUEST_PARAMS_TYPEHINT
7
+ )
8
+ from osn_selenium.trio_bidi.mapping.response_functions._args_validators import (
9
+ validate_no_such_element
10
+ )
11
+
12
+
13
+ __all__ = ["MAPPED_RESPONSE_ELEMENT_COMMANDS"]
14
+
15
+
16
+ def _map_find_elements_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
17
+ """
18
+ Converts BiDi nodes into a list of W3C element references.
19
+
20
+ Args:
21
+ bidi_result (Dict[str, Any]): BiDi result containing 'nodes'.
22
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
23
+
24
+ Returns:
25
+ Dict[str, Any]: W3C response containing a list of element dicts.
26
+ """
27
+
28
+ nodes = bidi_result.get("nodes", [])
29
+ value = [build_w3c_element(node["sharedId"]) for node in nodes]
30
+
31
+ return {"value": value}
32
+
33
+
34
+ def _map_find_element_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
35
+ """
36
+ Converts BiDi first node into a single W3C element reference, validating existence.
37
+
38
+ Args:
39
+ bidi_result (Dict[str, Any]): BiDi result containing 'nodes'.
40
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
41
+
42
+ Returns:
43
+ Dict[str, Any]: W3C response containing an element dict or error.
44
+ """
45
+
46
+ nodes = bidi_result.get("nodes", [])
47
+
48
+ no_such_element_validation = validate_no_such_element(nodes=nodes, request_params=request_params)
49
+ if no_such_element_validation is not None:
50
+ return no_such_element_validation
51
+
52
+ return {"value": build_w3c_element(nodes[0]["sharedId"])}
53
+
54
+
55
+ MAPPED_RESPONSE_ELEMENT_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {
56
+ Command.FIND_ELEMENT: _map_find_element_response,
57
+ Command.FIND_ELEMENTS: _map_find_elements_response
58
+ }
@@ -0,0 +1,30 @@
1
+ from typing import Any, Dict
2
+ from selenium.webdriver.remote.command import Command
3
+ from osn_selenium.trio_bidi.mapping.response_functions._args_helpers import (
4
+ map_js_primitive_response
5
+ )
6
+ from osn_selenium.trio_bidi._typehints import (
7
+ MAP_RESPONSE_FUNCTION_TYPEHINT,
8
+ REQUEST_PARAMS_TYPEHINT
9
+ )
10
+
11
+
12
+ __all__ = ["MAPPED_RESPONSE_FILE_COMMANDS"]
13
+
14
+
15
+ def _map_upload_file_response(bidi_result: Dict[str, Any], request_params: REQUEST_PARAMS_TYPEHINT) -> Dict[str, Any]:
16
+ """
17
+ Maps BiDi file upload result to W3C response format.
18
+
19
+ Args:
20
+ bidi_result (Dict[str, Any]): BiDi internal response.
21
+ request_params (REQUEST_PARAMS_TYPEHINT): Original request parameters.
22
+
23
+ Returns:
24
+ Dict[str, Any]: W3C response with the file path.
25
+ """
26
+
27
+ return map_js_primitive_response(bidi_result=bidi_result, request_params=request_params)
28
+
29
+
30
+ MAPPED_RESPONSE_FILE_COMMANDS: Dict[str, MAP_RESPONSE_FUNCTION_TYPEHINT] = {Command.UPLOAD_FILE: _map_upload_file_response}