osn-selenium 1.0.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 (475) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_decorators.py +57 -0
  4. osn_selenium/_trio_threads_helpers.py +157 -0
  5. osn_selenium/_typehints.py +1 -1
  6. osn_selenium/abstract/executors/cdp.py +63 -0
  7. osn_selenium/abstract/webdriver/blink/base.py +14 -0
  8. osn_selenium/abstract/webdriver/blink/lifecycle.py +8 -8
  9. osn_selenium/abstract/webdriver/core/base.py +0 -14
  10. osn_selenium/abstract/webdriver/core/capture.py +4 -3
  11. osn_selenium/abstract/webdriver/core/lifecycle.py +8 -8
  12. osn_selenium/abstract/webdriver/core/script.py +5 -4
  13. osn_selenium/abstract/webdriver/core/window.py +11 -11
  14. osn_selenium/browsers_handler/models.py +1 -1
  15. osn_selenium/dev_tools/_decorators.py +19 -51
  16. osn_selenium/dev_tools/_functions.py +2 -4
  17. osn_selenium/dev_tools/_typehints.py +5 -2
  18. osn_selenium/dev_tools/_wrappers.py +0 -3
  19. osn_selenium/dev_tools/domains/__init__.py +2 -2
  20. osn_selenium/dev_tools/domains/abstract.py +1 -1
  21. osn_selenium/dev_tools/domains/fetch.py +6 -8
  22. osn_selenium/dev_tools/domains_default/fetch.py +2 -2
  23. osn_selenium/dev_tools/filters.py +1 -1
  24. osn_selenium/dev_tools/logger/main.py +9 -21
  25. osn_selenium/dev_tools/logger/models.py +1 -1
  26. osn_selenium/dev_tools/logger/target.py +49 -29
  27. osn_selenium/dev_tools/manager/base.py +10 -42
  28. osn_selenium/dev_tools/manager/lifecycle.py +84 -75
  29. osn_selenium/dev_tools/manager/logging.py +1 -1
  30. osn_selenium/dev_tools/manager/targets.py +13 -5
  31. osn_selenium/dev_tools/models.py +1 -1
  32. osn_selenium/dev_tools/settings.py +9 -5
  33. osn_selenium/dev_tools/target/base.py +30 -34
  34. osn_selenium/dev_tools/target/discovery.py +1 -1
  35. osn_selenium/dev_tools/target/events.py +2 -2
  36. osn_selenium/dev_tools/target/fingerprint.py +1 -1
  37. osn_selenium/dev_tools/target/lifecycle.py +103 -38
  38. osn_selenium/dev_tools/target/logging.py +11 -3
  39. osn_selenium/exceptions/__init__.py +0 -1
  40. osn_selenium/exceptions/base.py +28 -1
  41. osn_selenium/exceptions/bidi_bridge.py +59 -0
  42. osn_selenium/exceptions/configuration.py +1 -8
  43. osn_selenium/exceptions/dependencies.py +60 -0
  44. osn_selenium/exceptions/devtools.py +9 -39
  45. osn_selenium/exceptions/experimental.py +26 -0
  46. osn_selenium/exceptions/flags.py +0 -2
  47. osn_selenium/exceptions/instance.py +1 -9
  48. osn_selenium/exceptions/javascript.py +0 -2
  49. osn_selenium/exceptions/logic.py +0 -2
  50. osn_selenium/exceptions/path.py +1 -9
  51. osn_selenium/exceptions/platform.py +0 -2
  52. osn_selenium/exceptions/protocol.py +0 -3
  53. osn_selenium/exceptions/webdriver.py +1 -7
  54. osn_selenium/exceptions/window.py +1 -8
  55. osn_selenium/executors/sync/cdp.py +95 -0
  56. osn_selenium/executors/trio_bidi/cdp.py +101 -0
  57. osn_selenium/executors/trio_bidi/javascript.py +101 -0
  58. osn_selenium/executors/trio_threads/cdp.py +99 -0
  59. osn_selenium/executors/trio_threads/javascript.py +1 -1
  60. osn_selenium/executors/unified/javascript.py +0 -4
  61. osn_selenium/flags/base.py +7 -13
  62. osn_selenium/flags/blink.py +2 -8
  63. osn_selenium/flags/chrome.py +6 -6
  64. osn_selenium/flags/edge.py +6 -6
  65. osn_selenium/flags/models/base.py +4 -4
  66. osn_selenium/flags/models/blink.py +1 -1
  67. osn_selenium/flags/models/values.py +1 -1
  68. osn_selenium/instances/convert.py +44 -3
  69. osn_selenium/instances/protocols.py +47 -1
  70. osn_selenium/instances/sync/action_chains/__init__.py +6 -0
  71. osn_selenium/instances/sync/browsing_context.py +2 -2
  72. osn_selenium/instances/sync/script.py +7 -2
  73. osn_selenium/instances/sync/shadow_root.py +30 -8
  74. osn_selenium/instances/sync/web_element.py +1 -1
  75. osn_selenium/instances/trio_bidi/__init__.py +1 -0
  76. osn_selenium/instances/trio_bidi/shadow_root.py +180 -0
  77. osn_selenium/instances/trio_bidi/switch_to.py +143 -0
  78. osn_selenium/instances/trio_bidi/web_driver_wait.py +124 -0
  79. osn_selenium/instances/trio_bidi/web_element.py +239 -0
  80. osn_selenium/instances/trio_threads/action_chains/__init__.py +6 -0
  81. osn_selenium/instances/trio_threads/action_chains/base.py +1 -1
  82. osn_selenium/instances/trio_threads/alert.py +1 -1
  83. osn_selenium/instances/trio_threads/browser.py +1 -1
  84. osn_selenium/instances/trio_threads/browsing_context.py +3 -3
  85. osn_selenium/instances/trio_threads/dialog.py +1 -1
  86. osn_selenium/instances/trio_threads/fedcm.py +1 -1
  87. osn_selenium/instances/trio_threads/mobile.py +1 -1
  88. osn_selenium/instances/trio_threads/network.py +1 -1
  89. osn_selenium/instances/trio_threads/permissions.py +1 -1
  90. osn_selenium/instances/trio_threads/script.py +8 -3
  91. osn_selenium/instances/trio_threads/shadow_root.py +46 -15
  92. osn_selenium/instances/trio_threads/storage.py +1 -1
  93. osn_selenium/instances/trio_threads/switch_to.py +1 -1
  94. osn_selenium/instances/trio_threads/web_driver_wait.py +1 -1
  95. osn_selenium/instances/trio_threads/web_element.py +1 -1
  96. osn_selenium/instances/trio_threads/web_extension.py +1 -1
  97. osn_selenium/instances/unified/browsing_context.py +2 -2
  98. osn_selenium/instances/unified/script.py +2 -2
  99. osn_selenium/instances/unified/web_element.py +3 -5
  100. osn_selenium/javascript/fingerprint/__init__.py +3 -2
  101. osn_selenium/javascript/fingerprint/registry/models.py +1 -1
  102. osn_selenium/javascript/fingerprint/spoof/core_rules.py +1 -1
  103. osn_selenium/javascript/fingerprint/spoof/noise.py +1 -1
  104. osn_selenium/javascript/models.py +1 -1
  105. osn_selenium/models.py +2 -47
  106. osn_selenium/trio_bidi/__init__.py +1 -0
  107. osn_selenium/trio_bidi/_context_vars.py +12 -0
  108. osn_selenium/trio_bidi/_error_mappings.py +123 -0
  109. osn_selenium/trio_bidi/_error_redirects.py +194 -0
  110. osn_selenium/trio_bidi/_file_functions.py +28 -0
  111. osn_selenium/trio_bidi/_internal_mappings.py +10 -0
  112. osn_selenium/trio_bidi/_models.py +199 -0
  113. osn_selenium/trio_bidi/_typehints.py +20 -0
  114. osn_selenium/trio_bidi/connection_pool.py +587 -0
  115. osn_selenium/trio_bidi/mapping/__init__.py +1 -0
  116. osn_selenium/trio_bidi/mapping/_constants.py +14 -0
  117. osn_selenium/trio_bidi/mapping/_js_snippets.py +285 -0
  118. osn_selenium/trio_bidi/mapping/_utils.py +4 -0
  119. osn_selenium/trio_bidi/mapping/request_functions/__init__.py +87 -0
  120. osn_selenium/trio_bidi/mapping/request_functions/_alert.py +102 -0
  121. osn_selenium/trio_bidi/mapping/request_functions/_args_helpers.py +225 -0
  122. osn_selenium/trio_bidi/mapping/request_functions/_capture.py +71 -0
  123. osn_selenium/trio_bidi/mapping/request_functions/_cdp.py +40 -0
  124. osn_selenium/trio_bidi/mapping/request_functions/_element.py +55 -0
  125. osn_selenium/trio_bidi/mapping/request_functions/_file.py +32 -0
  126. osn_selenium/trio_bidi/mapping/request_functions/_navigation.py +147 -0
  127. osn_selenium/trio_bidi/mapping/request_functions/_script.py +85 -0
  128. osn_selenium/trio_bidi/mapping/request_functions/_shadow_root.py +65 -0
  129. osn_selenium/trio_bidi/mapping/request_functions/_switch_to.py +59 -0
  130. osn_selenium/trio_bidi/mapping/request_functions/_web_element.py +448 -0
  131. osn_selenium/trio_bidi/mapping/request_functions/_window.py +125 -0
  132. osn_selenium/trio_bidi/mapping/response_functions/__init__.py +86 -0
  133. osn_selenium/trio_bidi/mapping/response_functions/_alert.py +81 -0
  134. osn_selenium/trio_bidi/mapping/response_functions/_args_helpers.py +183 -0
  135. osn_selenium/trio_bidi/mapping/response_functions/_args_validators.py +153 -0
  136. osn_selenium/trio_bidi/mapping/response_functions/_capture.py +71 -0
  137. osn_selenium/trio_bidi/mapping/response_functions/_cdp.py +26 -0
  138. osn_selenium/trio_bidi/mapping/response_functions/_element.py +58 -0
  139. osn_selenium/trio_bidi/mapping/response_functions/_file.py +30 -0
  140. osn_selenium/trio_bidi/mapping/response_functions/_navigation.py +120 -0
  141. osn_selenium/trio_bidi/mapping/response_functions/_script.py +57 -0
  142. osn_selenium/trio_bidi/mapping/response_functions/_shadow_root.py +58 -0
  143. osn_selenium/trio_bidi/mapping/response_functions/_switch_to.py +57 -0
  144. osn_selenium/trio_bidi/mapping/response_functions/_web_element.py +368 -0
  145. osn_selenium/trio_bidi/mapping/response_functions/_window.py +119 -0
  146. osn_selenium/trio_bidi/mixin.py +186 -0
  147. osn_selenium/trio_bidi/remote_connection.py +164 -0
  148. osn_selenium/{base_mixin.py → trio_threads_mixin.py} +31 -40
  149. osn_selenium/webdrivers/_args_helpers.py +120 -7
  150. osn_selenium/webdrivers/_bridges.py +2 -2
  151. osn_selenium/webdrivers/_executable_tables/models.py +1 -1
  152. osn_selenium/webdrivers/_typehints.py +9 -3
  153. osn_selenium/webdrivers/protocols.py +81 -1
  154. osn_selenium/webdrivers/sync/blink/__init__.py +11 -1
  155. osn_selenium/webdrivers/sync/blink/base.py +23 -1
  156. osn_selenium/webdrivers/sync/blink/lifecycle.py +26 -8
  157. osn_selenium/webdrivers/sync/chrome/__init__.py +36 -1
  158. osn_selenium/webdrivers/sync/chrome/base.py +13 -1
  159. osn_selenium/webdrivers/sync/chrome/lifecycle.py +23 -5
  160. osn_selenium/webdrivers/sync/chrome/settings.py +6 -1
  161. osn_selenium/webdrivers/sync/core/__init__.py +10 -1
  162. osn_selenium/webdrivers/sync/core/base.py +18 -18
  163. osn_selenium/webdrivers/sync/core/capture.py +3 -2
  164. osn_selenium/webdrivers/sync/core/file.py +3 -2
  165. osn_selenium/webdrivers/sync/core/lifecycle.py +44 -10
  166. osn_selenium/webdrivers/sync/core/script.py +3 -2
  167. osn_selenium/webdrivers/sync/core/window.py +3 -3
  168. osn_selenium/webdrivers/sync/edge/__init__.py +36 -1
  169. osn_selenium/webdrivers/sync/edge/base.py +13 -1
  170. osn_selenium/webdrivers/sync/edge/lifecycle.py +23 -5
  171. osn_selenium/webdrivers/sync/edge/settings.py +6 -1
  172. osn_selenium/webdrivers/sync/yandex/__init__.py +36 -1
  173. osn_selenium/webdrivers/sync/yandex/base.py +13 -1
  174. osn_selenium/webdrivers/sync/yandex/lifecycle.py +23 -5
  175. osn_selenium/webdrivers/sync/yandex/settings.py +6 -1
  176. osn_selenium/webdrivers/trio_bidi/__init__.py +1 -0
  177. osn_selenium/webdrivers/trio_bidi/blink/__init__.py +132 -0
  178. osn_selenium/webdrivers/trio_bidi/blink/base.py +167 -0
  179. osn_selenium/webdrivers/trio_bidi/blink/lifecycle.py +89 -0
  180. osn_selenium/webdrivers/trio_bidi/blink/settings.py +63 -0
  181. osn_selenium/webdrivers/trio_bidi/chrome/__init__.py +114 -0
  182. osn_selenium/webdrivers/trio_bidi/chrome/base.py +127 -0
  183. osn_selenium/webdrivers/trio_bidi/chrome/lifecycle.py +85 -0
  184. osn_selenium/webdrivers/trio_bidi/chrome/settings.py +63 -0
  185. osn_selenium/webdrivers/trio_bidi/core/__init__.py +95 -0
  186. osn_selenium/webdrivers/trio_bidi/core/actions.py +70 -0
  187. osn_selenium/webdrivers/trio_bidi/core/base.py +200 -0
  188. osn_selenium/webdrivers/trio_bidi/core/capture.py +39 -0
  189. osn_selenium/webdrivers/trio_bidi/core/devtools.py +49 -0
  190. osn_selenium/webdrivers/trio_bidi/core/element.py +64 -0
  191. osn_selenium/webdrivers/trio_bidi/core/lifecycle.py +135 -0
  192. osn_selenium/webdrivers/trio_bidi/core/navigation.py +37 -0
  193. osn_selenium/webdrivers/trio_bidi/core/script.py +56 -0
  194. osn_selenium/webdrivers/trio_bidi/core/settings.py +36 -0
  195. osn_selenium/webdrivers/trio_bidi/core/window.py +134 -0
  196. osn_selenium/webdrivers/trio_bidi/edge/__init__.py +114 -0
  197. osn_selenium/webdrivers/trio_bidi/edge/base.py +123 -0
  198. osn_selenium/webdrivers/trio_bidi/edge/lifecycle.py +85 -0
  199. osn_selenium/webdrivers/trio_bidi/edge/settings.py +63 -0
  200. osn_selenium/webdrivers/trio_bidi/yandex/__init__.py +114 -0
  201. osn_selenium/webdrivers/trio_bidi/yandex/base.py +120 -0
  202. osn_selenium/webdrivers/trio_bidi/yandex/lifecycle.py +85 -0
  203. osn_selenium/webdrivers/trio_bidi/yandex/settings.py +63 -0
  204. osn_selenium/webdrivers/trio_threads/blink/__init__.py +18 -2
  205. osn_selenium/webdrivers/trio_threads/blink/base.py +25 -1
  206. osn_selenium/webdrivers/trio_threads/blink/casting.py +1 -1
  207. osn_selenium/webdrivers/trio_threads/blink/features.py +1 -1
  208. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +26 -8
  209. osn_selenium/webdrivers/trio_threads/blink/logging.py +1 -1
  210. osn_selenium/webdrivers/trio_threads/blink/network.py +1 -1
  211. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +34 -1
  212. osn_selenium/webdrivers/trio_threads/chrome/base.py +14 -2
  213. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +23 -5
  214. osn_selenium/webdrivers/trio_threads/chrome/settings.py +1 -1
  215. osn_selenium/webdrivers/trio_threads/core/__init__.py +10 -14
  216. osn_selenium/webdrivers/trio_threads/core/actions.py +1 -1
  217. osn_selenium/webdrivers/trio_threads/core/auth.py +1 -1
  218. osn_selenium/webdrivers/trio_threads/core/base.py +18 -22
  219. osn_selenium/webdrivers/trio_threads/core/capture.py +4 -3
  220. osn_selenium/webdrivers/trio_threads/core/comonents.py +1 -1
  221. osn_selenium/webdrivers/trio_threads/core/devtools.py +1 -1
  222. osn_selenium/webdrivers/trio_threads/core/element.py +1 -1
  223. osn_selenium/webdrivers/trio_threads/core/file.py +5 -4
  224. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +45 -11
  225. osn_selenium/webdrivers/trio_threads/core/navigation.py +1 -1
  226. osn_selenium/webdrivers/trio_threads/core/script.py +4 -3
  227. osn_selenium/webdrivers/trio_threads/core/settings.py +1 -1
  228. osn_selenium/webdrivers/trio_threads/core/storage.py +1 -1
  229. osn_selenium/webdrivers/trio_threads/core/timeouts.py +1 -1
  230. osn_selenium/webdrivers/trio_threads/core/window.py +6 -6
  231. osn_selenium/webdrivers/trio_threads/edge/__init__.py +34 -1
  232. osn_selenium/webdrivers/trio_threads/edge/base.py +14 -2
  233. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +23 -5
  234. osn_selenium/webdrivers/trio_threads/edge/settings.py +1 -1
  235. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +34 -1
  236. osn_selenium/webdrivers/trio_threads/yandex/base.py +14 -2
  237. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +23 -5
  238. osn_selenium/webdrivers/trio_threads/yandex/settings.py +1 -1
  239. osn_selenium/webdrivers/unified/blink/base.py +9 -1
  240. osn_selenium/webdrivers/unified/blink/lifecycle.py +4 -2
  241. osn_selenium/webdrivers/unified/chrome/base.py +9 -1
  242. osn_selenium/webdrivers/unified/core/auth.py +4 -2
  243. osn_selenium/webdrivers/unified/core/base.py +19 -6
  244. osn_selenium/webdrivers/unified/core/capture.py +3 -2
  245. osn_selenium/webdrivers/unified/core/components.py +12 -7
  246. osn_selenium/webdrivers/unified/core/devtools.py +2 -1
  247. osn_selenium/webdrivers/unified/core/file.py +3 -2
  248. osn_selenium/webdrivers/unified/core/lifecycle.py +5 -3
  249. osn_selenium/webdrivers/unified/core/script.py +5 -3
  250. osn_selenium/webdrivers/unified/core/storage.py +2 -1
  251. osn_selenium/webdrivers/unified/core/window.py +9 -8
  252. osn_selenium/webdrivers/unified/edge/base.py +9 -1
  253. osn_selenium/webdrivers/unified/yandex/base.py +9 -1
  254. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/METADATA +24 -10
  255. osn_selenium-1.2.0.dist-info/RECORD +480 -0
  256. {osn_selenium-1.0.0.dist-info → osn_selenium-1.2.0.dist-info}/WHEEL +1 -1
  257. osn_selenium/abstract/executors/cdp/__init__.py +0 -435
  258. osn_selenium/abstract/executors/cdp/accessibility.py +0 -62
  259. osn_selenium/abstract/executors/cdp/animation.py +0 -47
  260. osn_selenium/abstract/executors/cdp/audits.py +0 -39
  261. osn_selenium/abstract/executors/cdp/autofill.py +0 -34
  262. osn_selenium/abstract/executors/cdp/background_service.py +0 -22
  263. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +0 -95
  264. osn_selenium/abstract/executors/cdp/browser.py +0 -122
  265. osn_selenium/abstract/executors/cdp/cache_storage.py +0 -49
  266. osn_selenium/abstract/executors/cdp/cast.py +0 -31
  267. osn_selenium/abstract/executors/cdp/console.py +0 -18
  268. osn_selenium/abstract/executors/cdp/css.py +0 -197
  269. osn_selenium/abstract/executors/cdp/debugger.py +0 -198
  270. osn_selenium/abstract/executors/cdp/device_access.py +0 -22
  271. osn_selenium/abstract/executors/cdp/device_orientation.py +0 -14
  272. osn_selenium/abstract/executors/cdp/dom.py +0 -305
  273. osn_selenium/abstract/executors/cdp/dom_debugger.py +0 -57
  274. osn_selenium/abstract/executors/cdp/dom_snapshot.py +0 -42
  275. osn_selenium/abstract/executors/cdp/dom_storage.py +0 -31
  276. osn_selenium/abstract/executors/cdp/emulation.py +0 -259
  277. osn_selenium/abstract/executors/cdp/event_breakpoints.py +0 -18
  278. osn_selenium/abstract/executors/cdp/extensions.py +0 -31
  279. osn_selenium/abstract/executors/cdp/fed_cm.py +0 -35
  280. osn_selenium/abstract/executors/cdp/fetch.py +0 -76
  281. osn_selenium/abstract/executors/cdp/file_system.py +0 -11
  282. osn_selenium/abstract/executors/cdp/headless_experimental.py +0 -30
  283. osn_selenium/abstract/executors/cdp/heap_profiler.py +0 -73
  284. osn_selenium/abstract/executors/cdp/indexed_db.py +0 -99
  285. osn_selenium/abstract/executors/cdp/input.py +0 -158
  286. osn_selenium/abstract/executors/cdp/inspector.py +0 -14
  287. osn_selenium/abstract/executors/cdp/io.py +0 -24
  288. osn_selenium/abstract/executors/cdp/layer_tree.py +0 -61
  289. osn_selenium/abstract/executors/cdp/log.py +0 -27
  290. osn_selenium/abstract/executors/cdp/media.py +0 -14
  291. osn_selenium/abstract/executors/cdp/memory.py +0 -61
  292. osn_selenium/abstract/executors/cdp/network.py +0 -252
  293. osn_selenium/abstract/executors/cdp/overlay.py +0 -166
  294. osn_selenium/abstract/executors/cdp/page.py +0 -347
  295. osn_selenium/abstract/executors/cdp/performance.py +0 -28
  296. osn_selenium/abstract/executors/cdp/performance_timeline.py +0 -11
  297. osn_selenium/abstract/executors/cdp/preload.py +0 -14
  298. osn_selenium/abstract/executors/cdp/profiler.py +0 -54
  299. osn_selenium/abstract/executors/cdp/pwa.py +0 -46
  300. osn_selenium/abstract/executors/cdp/runtime.py +0 -176
  301. osn_selenium/abstract/executors/cdp/schema.py +0 -11
  302. osn_selenium/abstract/executors/cdp/security.py +0 -26
  303. osn_selenium/abstract/executors/cdp/service_worker.py +0 -54
  304. osn_selenium/abstract/executors/cdp/storage.py +0 -175
  305. osn_selenium/abstract/executors/cdp/system_info.py +0 -24
  306. osn_selenium/abstract/executors/cdp/target.py +0 -125
  307. osn_selenium/abstract/executors/cdp/tethering.py +0 -14
  308. osn_selenium/abstract/executors/cdp/tracing.py +0 -48
  309. osn_selenium/abstract/executors/cdp/web_audio.py +0 -19
  310. osn_selenium/abstract/executors/cdp/web_authn.py +0 -76
  311. osn_selenium/executors/sync/cdp/__init__.py +0 -550
  312. osn_selenium/executors/sync/cdp/accessibility.py +0 -74
  313. osn_selenium/executors/sync/cdp/animation.py +0 -50
  314. osn_selenium/executors/sync/cdp/audits.py +0 -48
  315. osn_selenium/executors/sync/cdp/autofill.py +0 -39
  316. osn_selenium/executors/sync/cdp/background_service.py +0 -30
  317. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +0 -101
  318. osn_selenium/executors/sync/cdp/browser.py +0 -131
  319. osn_selenium/executors/sync/cdp/cache_storage.py +0 -66
  320. osn_selenium/executors/sync/cdp/cast.py +0 -38
  321. osn_selenium/executors/sync/cdp/console.py +0 -24
  322. osn_selenium/executors/sync/cdp/css.py +0 -187
  323. osn_selenium/executors/sync/cdp/debugger.py +0 -206
  324. osn_selenium/executors/sync/cdp/device_access.py +0 -27
  325. osn_selenium/executors/sync/cdp/device_orientation.py +0 -24
  326. osn_selenium/executors/sync/cdp/dom.py +0 -310
  327. osn_selenium/executors/sync/cdp/dom_debugger.py +0 -56
  328. osn_selenium/executors/sync/cdp/dom_snapshot.py +0 -58
  329. osn_selenium/executors/sync/cdp/dom_storage.py +0 -38
  330. osn_selenium/executors/sync/cdp/emulation.py +0 -270
  331. osn_selenium/executors/sync/cdp/event_breakpoints.py +0 -27
  332. osn_selenium/executors/sync/cdp/extensions.py +0 -39
  333. osn_selenium/executors/sync/cdp/fed_cm.py +0 -45
  334. osn_selenium/executors/sync/cdp/fetch.py +0 -96
  335. osn_selenium/executors/sync/cdp/file_system.py +0 -18
  336. osn_selenium/executors/sync/cdp/headless_experimental.py +0 -44
  337. osn_selenium/executors/sync/cdp/heap_profiler.py +0 -89
  338. osn_selenium/executors/sync/cdp/indexed_db.py +0 -142
  339. osn_selenium/executors/sync/cdp/input.py +0 -233
  340. osn_selenium/executors/sync/cdp/inspector.py +0 -21
  341. osn_selenium/executors/sync/cdp/io.py +0 -33
  342. osn_selenium/executors/sync/cdp/layer_tree.py +0 -71
  343. osn_selenium/executors/sync/cdp/log.py +0 -35
  344. osn_selenium/executors/sync/cdp/media.py +0 -21
  345. osn_selenium/executors/sync/cdp/memory.py +0 -62
  346. osn_selenium/executors/sync/cdp/network.py +0 -287
  347. osn_selenium/executors/sync/cdp/overlay.py +0 -174
  348. osn_selenium/executors/sync/cdp/page.py +0 -365
  349. osn_selenium/executors/sync/cdp/performance.py +0 -33
  350. osn_selenium/executors/sync/cdp/performance_timeline.py +0 -26
  351. osn_selenium/executors/sync/cdp/preload.py +0 -21
  352. osn_selenium/executors/sync/cdp/profiler.py +0 -58
  353. osn_selenium/executors/sync/cdp/pwa.py +0 -55
  354. osn_selenium/executors/sync/cdp/runtime.py +0 -221
  355. osn_selenium/executors/sync/cdp/schema.py +0 -23
  356. osn_selenium/executors/sync/cdp/security.py +0 -30
  357. osn_selenium/executors/sync/cdp/service_worker.py +0 -56
  358. osn_selenium/executors/sync/cdp/storage.py +0 -151
  359. osn_selenium/executors/sync/cdp/system_info.py +0 -30
  360. osn_selenium/executors/sync/cdp/target.py +0 -147
  361. osn_selenium/executors/sync/cdp/tethering.py +0 -21
  362. osn_selenium/executors/sync/cdp/tracing.py +0 -62
  363. osn_selenium/executors/sync/cdp/web_audio.py +0 -24
  364. osn_selenium/executors/sync/cdp/web_authn.py +0 -82
  365. osn_selenium/executors/trio_threads/cdp/__init__.py +0 -771
  366. osn_selenium/executors/trio_threads/cdp/accessibility.py +0 -87
  367. osn_selenium/executors/trio_threads/cdp/animation.py +0 -63
  368. osn_selenium/executors/trio_threads/cdp/audits.py +0 -57
  369. osn_selenium/executors/trio_threads/cdp/autofill.py +0 -52
  370. osn_selenium/executors/trio_threads/cdp/background_service.py +0 -40
  371. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +0 -111
  372. osn_selenium/executors/trio_threads/cdp/browser.py +0 -140
  373. osn_selenium/executors/trio_threads/cdp/cache_storage.py +0 -79
  374. osn_selenium/executors/trio_threads/cdp/cast.py +0 -47
  375. osn_selenium/executors/trio_threads/cdp/console.py +0 -33
  376. osn_selenium/executors/trio_threads/cdp/css.py +0 -196
  377. osn_selenium/executors/trio_threads/cdp/debugger.py +0 -219
  378. osn_selenium/executors/trio_threads/cdp/device_access.py +0 -40
  379. osn_selenium/executors/trio_threads/cdp/device_orientation.py +0 -34
  380. osn_selenium/executors/trio_threads/cdp/dom.py +0 -319
  381. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +0 -69
  382. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +0 -71
  383. osn_selenium/executors/trio_threads/cdp/dom_storage.py +0 -51
  384. osn_selenium/executors/trio_threads/cdp/emulation.py +0 -283
  385. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +0 -37
  386. osn_selenium/executors/trio_threads/cdp/extensions.py +0 -52
  387. osn_selenium/executors/trio_threads/cdp/fed_cm.py +0 -54
  388. osn_selenium/executors/trio_threads/cdp/fetch.py +0 -105
  389. osn_selenium/executors/trio_threads/cdp/file_system.py +0 -31
  390. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +0 -54
  391. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +0 -102
  392. osn_selenium/executors/trio_threads/cdp/indexed_db.py +0 -155
  393. osn_selenium/executors/trio_threads/cdp/input.py +0 -242
  394. osn_selenium/executors/trio_threads/cdp/inspector.py +0 -34
  395. osn_selenium/executors/trio_threads/cdp/io.py +0 -42
  396. osn_selenium/executors/trio_threads/cdp/layer_tree.py +0 -84
  397. osn_selenium/executors/trio_threads/cdp/log.py +0 -44
  398. osn_selenium/executors/trio_threads/cdp/media.py +0 -30
  399. osn_selenium/executors/trio_threads/cdp/memory.py +0 -71
  400. osn_selenium/executors/trio_threads/cdp/network.py +0 -296
  401. osn_selenium/executors/trio_threads/cdp/overlay.py +0 -183
  402. osn_selenium/executors/trio_threads/cdp/page.py +0 -374
  403. osn_selenium/executors/trio_threads/cdp/performance.py +0 -46
  404. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +0 -36
  405. osn_selenium/executors/trio_threads/cdp/preload.py +0 -30
  406. osn_selenium/executors/trio_threads/cdp/profiler.py +0 -71
  407. osn_selenium/executors/trio_threads/cdp/pwa.py +0 -64
  408. osn_selenium/executors/trio_threads/cdp/runtime.py +0 -230
  409. osn_selenium/executors/trio_threads/cdp/schema.py +0 -32
  410. osn_selenium/executors/trio_threads/cdp/security.py +0 -43
  411. osn_selenium/executors/trio_threads/cdp/service_worker.py +0 -69
  412. osn_selenium/executors/trio_threads/cdp/storage.py +0 -162
  413. osn_selenium/executors/trio_threads/cdp/system_info.py +0 -43
  414. osn_selenium/executors/trio_threads/cdp/target.py +0 -156
  415. osn_selenium/executors/trio_threads/cdp/tethering.py +0 -34
  416. osn_selenium/executors/trio_threads/cdp/tracing.py +0 -71
  417. osn_selenium/executors/trio_threads/cdp/web_audio.py +0 -37
  418. osn_selenium/executors/trio_threads/cdp/web_authn.py +0 -95
  419. osn_selenium/executors/unified/cdp/accessibility.py +0 -81
  420. osn_selenium/executors/unified/cdp/animation.py +0 -50
  421. osn_selenium/executors/unified/cdp/audits.py +0 -45
  422. osn_selenium/executors/unified/cdp/autofill.py +0 -41
  423. osn_selenium/executors/unified/cdp/background_service.py +0 -24
  424. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +0 -132
  425. osn_selenium/executors/unified/cdp/browser.py +0 -143
  426. osn_selenium/executors/unified/cdp/cache_storage.py +0 -69
  427. osn_selenium/executors/unified/cdp/cast.py +0 -32
  428. osn_selenium/executors/unified/cdp/console.py +0 -18
  429. osn_selenium/executors/unified/cdp/css.py +0 -237
  430. osn_selenium/executors/unified/cdp/debugger.py +0 -243
  431. osn_selenium/executors/unified/cdp/device_access.py +0 -21
  432. osn_selenium/executors/unified/cdp/device_orientation.py +0 -18
  433. osn_selenium/executors/unified/cdp/dom.py +0 -380
  434. osn_selenium/executors/unified/cdp/dom_debugger.py +0 -65
  435. osn_selenium/executors/unified/cdp/dom_snapshot.py +0 -58
  436. osn_selenium/executors/unified/cdp/dom_storage.py +0 -38
  437. osn_selenium/executors/unified/cdp/emulation.py +0 -312
  438. osn_selenium/executors/unified/cdp/event_breakpoints.py +0 -24
  439. osn_selenium/executors/unified/cdp/extensions.py +0 -45
  440. osn_selenium/executors/unified/cdp/fed_cm.py +0 -51
  441. osn_selenium/executors/unified/cdp/fetch.py +0 -111
  442. osn_selenium/executors/unified/cdp/file_system.py +0 -15
  443. osn_selenium/executors/unified/cdp/headless_experimental.py +0 -38
  444. osn_selenium/executors/unified/cdp/heap_profiler.py +0 -101
  445. osn_selenium/executors/unified/cdp/indexed_db.py +0 -157
  446. osn_selenium/executors/unified/cdp/input.py +0 -254
  447. osn_selenium/executors/unified/cdp/inspector.py +0 -15
  448. osn_selenium/executors/unified/cdp/io.py +0 -29
  449. osn_selenium/executors/unified/cdp/layer_tree.py +0 -71
  450. osn_selenium/executors/unified/cdp/log.py +0 -29
  451. osn_selenium/executors/unified/cdp/media.py +0 -15
  452. osn_selenium/executors/unified/cdp/memory.py +0 -59
  453. osn_selenium/executors/unified/cdp/network.py +0 -323
  454. osn_selenium/executors/unified/cdp/overlay.py +0 -209
  455. osn_selenium/executors/unified/cdp/page.py +0 -410
  456. osn_selenium/executors/unified/cdp/performance.py +0 -27
  457. osn_selenium/executors/unified/cdp/performance_timeline.py +0 -17
  458. osn_selenium/executors/unified/cdp/preload.py +0 -15
  459. osn_selenium/executors/unified/cdp/profiler.py +0 -55
  460. osn_selenium/executors/unified/cdp/pwa.py +0 -55
  461. osn_selenium/executors/unified/cdp/runtime.py +0 -245
  462. osn_selenium/executors/unified/cdp/schema.py +0 -17
  463. osn_selenium/executors/unified/cdp/security.py +0 -27
  464. osn_selenium/executors/unified/cdp/service_worker.py +0 -62
  465. osn_selenium/executors/unified/cdp/storage.py +0 -178
  466. osn_selenium/executors/unified/cdp/system_info.py +0 -24
  467. osn_selenium/executors/unified/cdp/target.py +0 -165
  468. osn_selenium/executors/unified/cdp/tethering.py +0 -15
  469. osn_selenium/executors/unified/cdp/tracing.py +0 -62
  470. osn_selenium/executors/unified/cdp/web_audio.py +0 -18
  471. osn_selenium/executors/unified/cdp/web_authn.py +0 -103
  472. osn_selenium-1.0.0.dist-info/RECORD +0 -608
  473. /osn_selenium/{dev_tools/_exception_helpers.py → _exception_helpers.py} +0 -0
  474. /osn_selenium/executors/{unified/cdp → trio_bidi}/__init__.py +0 -0
  475. {osn_selenium-1.0.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}