osn-selenium 0.0.0__py3-none-any.whl → 1.1.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 (635) hide show
  1. osn_selenium/_base_models.py +41 -0
  2. osn_selenium/_cdp_import.py +253 -0
  3. osn_selenium/_functions.py +84 -0
  4. osn_selenium/_typehints.py +19 -0
  5. osn_selenium/abstract/executors/cdp/__init__.py +435 -0
  6. osn_selenium/abstract/executors/cdp/accessibility.py +62 -0
  7. osn_selenium/abstract/executors/cdp/animation.py +47 -0
  8. osn_selenium/abstract/executors/cdp/audits.py +39 -0
  9. osn_selenium/abstract/executors/cdp/autofill.py +34 -0
  10. osn_selenium/abstract/executors/cdp/background_service.py +22 -0
  11. osn_selenium/abstract/executors/cdp/bluetooth_emulation.py +95 -0
  12. osn_selenium/abstract/executors/cdp/browser.py +122 -0
  13. osn_selenium/abstract/executors/cdp/cache_storage.py +49 -0
  14. osn_selenium/abstract/executors/cdp/cast.py +31 -0
  15. osn_selenium/abstract/executors/cdp/console.py +18 -0
  16. osn_selenium/abstract/executors/cdp/css.py +197 -0
  17. osn_selenium/abstract/executors/cdp/debugger.py +198 -0
  18. osn_selenium/abstract/executors/cdp/device_access.py +22 -0
  19. osn_selenium/abstract/executors/cdp/device_orientation.py +14 -0
  20. osn_selenium/abstract/executors/cdp/dom.py +305 -0
  21. osn_selenium/abstract/executors/cdp/dom_debugger.py +57 -0
  22. osn_selenium/abstract/executors/cdp/dom_snapshot.py +42 -0
  23. osn_selenium/abstract/executors/cdp/dom_storage.py +31 -0
  24. osn_selenium/abstract/executors/cdp/emulation.py +259 -0
  25. osn_selenium/abstract/executors/cdp/event_breakpoints.py +18 -0
  26. osn_selenium/abstract/executors/cdp/extensions.py +31 -0
  27. osn_selenium/abstract/executors/cdp/fed_cm.py +35 -0
  28. osn_selenium/abstract/executors/cdp/fetch.py +76 -0
  29. osn_selenium/abstract/executors/cdp/file_system.py +11 -0
  30. osn_selenium/abstract/executors/cdp/headless_experimental.py +30 -0
  31. osn_selenium/abstract/executors/cdp/heap_profiler.py +73 -0
  32. osn_selenium/abstract/executors/cdp/indexed_db.py +99 -0
  33. osn_selenium/abstract/executors/cdp/input.py +158 -0
  34. osn_selenium/abstract/executors/cdp/inspector.py +14 -0
  35. osn_selenium/abstract/executors/cdp/io.py +24 -0
  36. osn_selenium/abstract/executors/cdp/layer_tree.py +61 -0
  37. osn_selenium/abstract/executors/cdp/log.py +27 -0
  38. osn_selenium/abstract/executors/cdp/media.py +14 -0
  39. osn_selenium/abstract/executors/cdp/memory.py +61 -0
  40. osn_selenium/abstract/executors/cdp/network.py +252 -0
  41. osn_selenium/abstract/executors/cdp/overlay.py +166 -0
  42. osn_selenium/abstract/executors/cdp/page.py +347 -0
  43. osn_selenium/abstract/executors/cdp/performance.py +28 -0
  44. osn_selenium/abstract/executors/cdp/performance_timeline.py +11 -0
  45. osn_selenium/abstract/executors/cdp/preload.py +14 -0
  46. osn_selenium/abstract/executors/cdp/profiler.py +54 -0
  47. osn_selenium/abstract/executors/cdp/pwa.py +46 -0
  48. osn_selenium/abstract/executors/cdp/runtime.py +176 -0
  49. osn_selenium/abstract/executors/cdp/schema.py +11 -0
  50. osn_selenium/abstract/executors/cdp/security.py +26 -0
  51. osn_selenium/abstract/executors/cdp/service_worker.py +54 -0
  52. osn_selenium/abstract/executors/cdp/storage.py +175 -0
  53. osn_selenium/abstract/executors/cdp/system_info.py +24 -0
  54. osn_selenium/abstract/executors/cdp/target.py +125 -0
  55. osn_selenium/abstract/executors/cdp/tethering.py +14 -0
  56. osn_selenium/abstract/executors/cdp/tracing.py +48 -0
  57. osn_selenium/abstract/executors/cdp/web_audio.py +19 -0
  58. osn_selenium/abstract/executors/cdp/web_authn.py +76 -0
  59. osn_selenium/abstract/executors/cdp.py +63 -0
  60. osn_selenium/abstract/executors/javascript.py +203 -0
  61. osn_selenium/abstract/instances/action_chains/__init__.py +12 -0
  62. osn_selenium/abstract/instances/action_chains/base.py +25 -0
  63. osn_selenium/abstract/instances/action_chains/click.py +93 -0
  64. osn_selenium/abstract/instances/action_chains/drag_and_drop.py +46 -0
  65. osn_selenium/abstract/instances/action_chains/hm_keyboard.py +44 -0
  66. osn_selenium/abstract/instances/action_chains/hm_move.py +104 -0
  67. osn_selenium/abstract/instances/action_chains/hm_scroll.py +75 -0
  68. osn_selenium/abstract/instances/action_chains/keyboard.py +79 -0
  69. osn_selenium/abstract/instances/action_chains/move.py +60 -0
  70. osn_selenium/abstract/instances/action_chains/scroll.py +61 -0
  71. osn_selenium/abstract/instances/action_chains/utils.py +44 -0
  72. osn_selenium/abstract/instances/alert.py +67 -0
  73. osn_selenium/abstract/instances/browser.py +76 -0
  74. osn_selenium/abstract/instances/browsing_context.py +310 -0
  75. osn_selenium/abstract/instances/dialog.py +107 -0
  76. osn_selenium/abstract/instances/fedcm.py +133 -0
  77. osn_selenium/abstract/instances/mobile.py +79 -0
  78. osn_selenium/abstract/instances/network.py +100 -0
  79. osn_selenium/abstract/instances/permissions.py +52 -0
  80. osn_selenium/abstract/instances/script.py +109 -0
  81. osn_selenium/abstract/instances/shadow_root.py +81 -0
  82. osn_selenium/abstract/instances/storage.py +98 -0
  83. osn_selenium/abstract/instances/switch_to.py +104 -0
  84. osn_selenium/abstract/instances/web_driver_wait.py +57 -0
  85. osn_selenium/abstract/instances/web_element.py +395 -0
  86. osn_selenium/abstract/instances/web_extension.py +70 -0
  87. osn_selenium/abstract/webdriver/blink/__init__.py +18 -0
  88. osn_selenium/abstract/webdriver/blink/base.py +80 -0
  89. osn_selenium/abstract/webdriver/blink/casting.py +82 -0
  90. osn_selenium/abstract/webdriver/blink/features.py +51 -0
  91. osn_selenium/abstract/webdriver/blink/lifecycle.py +76 -0
  92. osn_selenium/abstract/webdriver/blink/logging.py +40 -0
  93. osn_selenium/abstract/webdriver/blink/network.py +45 -0
  94. osn_selenium/abstract/webdriver/blink/settings.py +68 -0
  95. osn_selenium/abstract/webdriver/chrome/__init__.py +18 -0
  96. osn_selenium/abstract/webdriver/chrome/base.py +36 -0
  97. osn_selenium/abstract/webdriver/chrome/lifecycle.py +92 -0
  98. osn_selenium/abstract/webdriver/chrome/settings.py +110 -0
  99. osn_selenium/abstract/webdriver/core/__init__.py +16 -0
  100. osn_selenium/abstract/webdriver/core/actions.py +58 -0
  101. osn_selenium/abstract/webdriver/core/auth.py +145 -0
  102. osn_selenium/abstract/webdriver/core/base.py +298 -0
  103. osn_selenium/abstract/webdriver/core/capture.py +84 -0
  104. osn_selenium/abstract/webdriver/core/components.py +82 -0
  105. osn_selenium/abstract/webdriver/core/devtools.py +69 -0
  106. osn_selenium/abstract/webdriver/core/element.py +55 -0
  107. osn_selenium/abstract/webdriver/core/file.py +82 -0
  108. osn_selenium/abstract/webdriver/core/lifecycle.py +103 -0
  109. osn_selenium/abstract/webdriver/core/navigation.py +65 -0
  110. osn_selenium/abstract/webdriver/core/script.py +88 -0
  111. osn_selenium/abstract/webdriver/core/settings.py +43 -0
  112. osn_selenium/abstract/webdriver/core/storage.py +81 -0
  113. osn_selenium/abstract/webdriver/core/timeouts.py +101 -0
  114. osn_selenium/abstract/webdriver/core/window.py +237 -0
  115. osn_selenium/abstract/webdriver/edge/__init__.py +18 -0
  116. osn_selenium/abstract/webdriver/edge/base.py +36 -0
  117. osn_selenium/abstract/webdriver/edge/lifecycle.py +92 -0
  118. osn_selenium/abstract/webdriver/edge/settings.py +110 -0
  119. osn_selenium/abstract/webdriver/yandex/__init__.py +18 -0
  120. osn_selenium/abstract/webdriver/yandex/base.py +18 -0
  121. osn_selenium/abstract/webdriver/yandex/lifecycle.py +92 -0
  122. osn_selenium/abstract/webdriver/yandex/settings.py +110 -0
  123. osn_selenium/base_mixin.py +122 -0
  124. osn_selenium/browsers_handler/__init__.py +47 -17
  125. osn_selenium/browsers_handler/_linux.py +226 -0
  126. osn_selenium/browsers_handler/_windows.py +21 -14
  127. osn_selenium/browsers_handler/{types.py → models.py} +5 -2
  128. osn_selenium/dev_tools/_decorators.py +149 -0
  129. osn_selenium/dev_tools/_exception_helpers.py +116 -0
  130. osn_selenium/dev_tools/_functions.py +174 -0
  131. osn_selenium/dev_tools/_system_utils.py +35 -0
  132. osn_selenium/dev_tools/_typehints.py +35 -0
  133. osn_selenium/dev_tools/_validators.py +227 -0
  134. osn_selenium/dev_tools/_wrappers.py +92 -0
  135. osn_selenium/dev_tools/domains/__init__.py +7 -40
  136. osn_selenium/dev_tools/domains/abstract.py +98 -254
  137. osn_selenium/dev_tools/domains/fetch.py +229 -906
  138. osn_selenium/dev_tools/domains_default/fetch.py +40 -28
  139. osn_selenium/dev_tools/filters.py +40 -0
  140. osn_selenium/dev_tools/logger/main.py +214 -0
  141. osn_selenium/dev_tools/logger/models.py +232 -0
  142. osn_selenium/dev_tools/logger/target.py +278 -0
  143. osn_selenium/dev_tools/manager/__init__.py +16 -0
  144. osn_selenium/dev_tools/manager/base.py +124 -0
  145. osn_selenium/dev_tools/manager/lifecycle.py +236 -0
  146. osn_selenium/dev_tools/manager/logging.py +153 -0
  147. osn_selenium/dev_tools/manager/settings.py +89 -0
  148. osn_selenium/dev_tools/manager/targets.py +175 -0
  149. osn_selenium/dev_tools/models.py +49 -0
  150. osn_selenium/dev_tools/settings.py +139 -0
  151. osn_selenium/dev_tools/target/__init__.py +16 -0
  152. osn_selenium/dev_tools/target/base.py +427 -0
  153. osn_selenium/dev_tools/target/detach.py +54 -0
  154. osn_selenium/dev_tools/target/discovery.py +112 -0
  155. osn_selenium/dev_tools/target/events.py +120 -0
  156. osn_selenium/dev_tools/target/fingerprint.py +126 -0
  157. osn_selenium/dev_tools/target/lifecycle.py +184 -0
  158. osn_selenium/dev_tools/target/logging.py +163 -0
  159. osn_selenium/exceptions/__init__.py +1 -0
  160. osn_selenium/exceptions/base.py +9 -0
  161. osn_selenium/exceptions/configuration.py +84 -0
  162. osn_selenium/exceptions/dependencies.py +60 -0
  163. osn_selenium/exceptions/devtools.py +114 -0
  164. osn_selenium/exceptions/flags.py +45 -0
  165. osn_selenium/exceptions/instance.py +92 -0
  166. osn_selenium/exceptions/javascript.py +31 -0
  167. osn_selenium/exceptions/logic.py +31 -0
  168. osn_selenium/exceptions/path.py +77 -0
  169. osn_selenium/exceptions/platform.py +33 -0
  170. osn_selenium/exceptions/protocol.py +86 -0
  171. osn_selenium/exceptions/webdriver.py +44 -0
  172. osn_selenium/exceptions/window.py +63 -0
  173. osn_selenium/executors/__init__.py +1 -0
  174. osn_selenium/executors/sync/__init__.py +1 -0
  175. osn_selenium/executors/sync/cdp/__init__.py +550 -0
  176. osn_selenium/executors/sync/cdp/accessibility.py +74 -0
  177. osn_selenium/executors/sync/cdp/animation.py +50 -0
  178. osn_selenium/executors/sync/cdp/audits.py +48 -0
  179. osn_selenium/executors/sync/cdp/autofill.py +39 -0
  180. osn_selenium/executors/sync/cdp/background_service.py +30 -0
  181. osn_selenium/executors/sync/cdp/bluetooth_emulation.py +101 -0
  182. osn_selenium/executors/sync/cdp/browser.py +131 -0
  183. osn_selenium/executors/sync/cdp/cache_storage.py +66 -0
  184. osn_selenium/executors/sync/cdp/cast.py +38 -0
  185. osn_selenium/executors/sync/cdp/console.py +24 -0
  186. osn_selenium/executors/sync/cdp/css.py +187 -0
  187. osn_selenium/executors/sync/cdp/debugger.py +206 -0
  188. osn_selenium/executors/sync/cdp/device_access.py +27 -0
  189. osn_selenium/executors/sync/cdp/device_orientation.py +24 -0
  190. osn_selenium/executors/sync/cdp/dom.py +310 -0
  191. osn_selenium/executors/sync/cdp/dom_debugger.py +56 -0
  192. osn_selenium/executors/sync/cdp/dom_snapshot.py +58 -0
  193. osn_selenium/executors/sync/cdp/dom_storage.py +38 -0
  194. osn_selenium/executors/sync/cdp/emulation.py +270 -0
  195. osn_selenium/executors/sync/cdp/event_breakpoints.py +27 -0
  196. osn_selenium/executors/sync/cdp/extensions.py +39 -0
  197. osn_selenium/executors/sync/cdp/fed_cm.py +45 -0
  198. osn_selenium/executors/sync/cdp/fetch.py +96 -0
  199. osn_selenium/executors/sync/cdp/file_system.py +18 -0
  200. osn_selenium/executors/sync/cdp/headless_experimental.py +44 -0
  201. osn_selenium/executors/sync/cdp/heap_profiler.py +89 -0
  202. osn_selenium/executors/sync/cdp/indexed_db.py +142 -0
  203. osn_selenium/executors/sync/cdp/input.py +233 -0
  204. osn_selenium/executors/sync/cdp/inspector.py +21 -0
  205. osn_selenium/executors/sync/cdp/io.py +33 -0
  206. osn_selenium/executors/sync/cdp/layer_tree.py +71 -0
  207. osn_selenium/executors/sync/cdp/log.py +35 -0
  208. osn_selenium/executors/sync/cdp/media.py +21 -0
  209. osn_selenium/executors/sync/cdp/memory.py +62 -0
  210. osn_selenium/executors/sync/cdp/network.py +287 -0
  211. osn_selenium/executors/sync/cdp/overlay.py +174 -0
  212. osn_selenium/executors/sync/cdp/page.py +365 -0
  213. osn_selenium/executors/sync/cdp/performance.py +33 -0
  214. osn_selenium/executors/sync/cdp/performance_timeline.py +26 -0
  215. osn_selenium/executors/sync/cdp/preload.py +21 -0
  216. osn_selenium/executors/sync/cdp/profiler.py +58 -0
  217. osn_selenium/executors/sync/cdp/pwa.py +55 -0
  218. osn_selenium/executors/sync/cdp/runtime.py +221 -0
  219. osn_selenium/executors/sync/cdp/schema.py +23 -0
  220. osn_selenium/executors/sync/cdp/security.py +30 -0
  221. osn_selenium/executors/sync/cdp/service_worker.py +56 -0
  222. osn_selenium/executors/sync/cdp/storage.py +151 -0
  223. osn_selenium/executors/sync/cdp/system_info.py +30 -0
  224. osn_selenium/executors/sync/cdp/target.py +147 -0
  225. osn_selenium/executors/sync/cdp/tethering.py +21 -0
  226. osn_selenium/executors/sync/cdp/tracing.py +62 -0
  227. osn_selenium/executors/sync/cdp/web_audio.py +24 -0
  228. osn_selenium/executors/sync/cdp/web_authn.py +82 -0
  229. osn_selenium/executors/sync/cdp.py +100 -0
  230. osn_selenium/executors/sync/javascript.py +79 -0
  231. osn_selenium/executors/trio_threads/__init__.py +1 -0
  232. osn_selenium/executors/trio_threads/cdp/__init__.py +771 -0
  233. osn_selenium/executors/trio_threads/cdp/accessibility.py +87 -0
  234. osn_selenium/executors/trio_threads/cdp/animation.py +63 -0
  235. osn_selenium/executors/trio_threads/cdp/audits.py +57 -0
  236. osn_selenium/executors/trio_threads/cdp/autofill.py +52 -0
  237. osn_selenium/executors/trio_threads/cdp/background_service.py +40 -0
  238. osn_selenium/executors/trio_threads/cdp/bluetooth_emulation.py +111 -0
  239. osn_selenium/executors/trio_threads/cdp/browser.py +140 -0
  240. osn_selenium/executors/trio_threads/cdp/cache_storage.py +79 -0
  241. osn_selenium/executors/trio_threads/cdp/cast.py +47 -0
  242. osn_selenium/executors/trio_threads/cdp/console.py +33 -0
  243. osn_selenium/executors/trio_threads/cdp/css.py +196 -0
  244. osn_selenium/executors/trio_threads/cdp/debugger.py +219 -0
  245. osn_selenium/executors/trio_threads/cdp/device_access.py +40 -0
  246. osn_selenium/executors/trio_threads/cdp/device_orientation.py +34 -0
  247. osn_selenium/executors/trio_threads/cdp/dom.py +319 -0
  248. osn_selenium/executors/trio_threads/cdp/dom_debugger.py +69 -0
  249. osn_selenium/executors/trio_threads/cdp/dom_snapshot.py +71 -0
  250. osn_selenium/executors/trio_threads/cdp/dom_storage.py +51 -0
  251. osn_selenium/executors/trio_threads/cdp/emulation.py +283 -0
  252. osn_selenium/executors/trio_threads/cdp/event_breakpoints.py +37 -0
  253. osn_selenium/executors/trio_threads/cdp/extensions.py +52 -0
  254. osn_selenium/executors/trio_threads/cdp/fed_cm.py +54 -0
  255. osn_selenium/executors/trio_threads/cdp/fetch.py +105 -0
  256. osn_selenium/executors/trio_threads/cdp/file_system.py +31 -0
  257. osn_selenium/executors/trio_threads/cdp/headless_experimental.py +54 -0
  258. osn_selenium/executors/trio_threads/cdp/heap_profiler.py +102 -0
  259. osn_selenium/executors/trio_threads/cdp/indexed_db.py +155 -0
  260. osn_selenium/executors/trio_threads/cdp/input.py +242 -0
  261. osn_selenium/executors/trio_threads/cdp/inspector.py +34 -0
  262. osn_selenium/executors/trio_threads/cdp/io.py +42 -0
  263. osn_selenium/executors/trio_threads/cdp/layer_tree.py +84 -0
  264. osn_selenium/executors/trio_threads/cdp/log.py +44 -0
  265. osn_selenium/executors/trio_threads/cdp/media.py +30 -0
  266. osn_selenium/executors/trio_threads/cdp/memory.py +71 -0
  267. osn_selenium/executors/trio_threads/cdp/network.py +296 -0
  268. osn_selenium/executors/trio_threads/cdp/overlay.py +183 -0
  269. osn_selenium/executors/trio_threads/cdp/page.py +374 -0
  270. osn_selenium/executors/trio_threads/cdp/performance.py +46 -0
  271. osn_selenium/executors/trio_threads/cdp/performance_timeline.py +36 -0
  272. osn_selenium/executors/trio_threads/cdp/preload.py +30 -0
  273. osn_selenium/executors/trio_threads/cdp/profiler.py +71 -0
  274. osn_selenium/executors/trio_threads/cdp/pwa.py +64 -0
  275. osn_selenium/executors/trio_threads/cdp/runtime.py +230 -0
  276. osn_selenium/executors/trio_threads/cdp/schema.py +32 -0
  277. osn_selenium/executors/trio_threads/cdp/security.py +43 -0
  278. osn_selenium/executors/trio_threads/cdp/service_worker.py +69 -0
  279. osn_selenium/executors/trio_threads/cdp/storage.py +162 -0
  280. osn_selenium/executors/trio_threads/cdp/system_info.py +43 -0
  281. osn_selenium/executors/trio_threads/cdp/target.py +156 -0
  282. osn_selenium/executors/trio_threads/cdp/tethering.py +34 -0
  283. osn_selenium/executors/trio_threads/cdp/tracing.py +71 -0
  284. osn_selenium/executors/trio_threads/cdp/web_audio.py +37 -0
  285. osn_selenium/executors/trio_threads/cdp/web_authn.py +95 -0
  286. osn_selenium/executors/trio_threads/cdp.py +104 -0
  287. osn_selenium/executors/trio_threads/javascript.py +90 -0
  288. osn_selenium/executors/unified/__init__.py +1 -0
  289. osn_selenium/executors/unified/cdp/__init__.py +1 -0
  290. osn_selenium/executors/unified/cdp/accessibility.py +81 -0
  291. osn_selenium/executors/unified/cdp/animation.py +50 -0
  292. osn_selenium/executors/unified/cdp/audits.py +45 -0
  293. osn_selenium/executors/unified/cdp/autofill.py +41 -0
  294. osn_selenium/executors/unified/cdp/background_service.py +24 -0
  295. osn_selenium/executors/unified/cdp/bluetooth_emulation.py +132 -0
  296. osn_selenium/executors/unified/cdp/browser.py +143 -0
  297. osn_selenium/executors/unified/cdp/cache_storage.py +69 -0
  298. osn_selenium/executors/unified/cdp/cast.py +32 -0
  299. osn_selenium/executors/unified/cdp/console.py +18 -0
  300. osn_selenium/executors/unified/cdp/css.py +237 -0
  301. osn_selenium/executors/unified/cdp/debugger.py +243 -0
  302. osn_selenium/executors/unified/cdp/device_access.py +21 -0
  303. osn_selenium/executors/unified/cdp/device_orientation.py +18 -0
  304. osn_selenium/executors/unified/cdp/dom.py +380 -0
  305. osn_selenium/executors/unified/cdp/dom_debugger.py +65 -0
  306. osn_selenium/executors/unified/cdp/dom_snapshot.py +58 -0
  307. osn_selenium/executors/unified/cdp/dom_storage.py +38 -0
  308. osn_selenium/executors/unified/cdp/emulation.py +312 -0
  309. osn_selenium/executors/unified/cdp/event_breakpoints.py +24 -0
  310. osn_selenium/executors/unified/cdp/extensions.py +45 -0
  311. osn_selenium/executors/unified/cdp/fed_cm.py +51 -0
  312. osn_selenium/executors/unified/cdp/fetch.py +111 -0
  313. osn_selenium/executors/unified/cdp/file_system.py +15 -0
  314. osn_selenium/executors/unified/cdp/headless_experimental.py +38 -0
  315. osn_selenium/executors/unified/cdp/heap_profiler.py +101 -0
  316. osn_selenium/executors/unified/cdp/indexed_db.py +157 -0
  317. osn_selenium/executors/unified/cdp/input.py +254 -0
  318. osn_selenium/executors/unified/cdp/inspector.py +15 -0
  319. osn_selenium/executors/unified/cdp/io.py +29 -0
  320. osn_selenium/executors/unified/cdp/layer_tree.py +71 -0
  321. osn_selenium/executors/unified/cdp/log.py +29 -0
  322. osn_selenium/executors/unified/cdp/media.py +15 -0
  323. osn_selenium/executors/unified/cdp/memory.py +59 -0
  324. osn_selenium/executors/unified/cdp/network.py +323 -0
  325. osn_selenium/executors/unified/cdp/overlay.py +209 -0
  326. osn_selenium/executors/unified/cdp/page.py +410 -0
  327. osn_selenium/executors/unified/cdp/performance.py +27 -0
  328. osn_selenium/executors/unified/cdp/performance_timeline.py +17 -0
  329. osn_selenium/executors/unified/cdp/preload.py +15 -0
  330. osn_selenium/executors/unified/cdp/profiler.py +55 -0
  331. osn_selenium/executors/unified/cdp/pwa.py +55 -0
  332. osn_selenium/executors/unified/cdp/runtime.py +245 -0
  333. osn_selenium/executors/unified/cdp/schema.py +17 -0
  334. osn_selenium/executors/unified/cdp/security.py +27 -0
  335. osn_selenium/executors/unified/cdp/service_worker.py +62 -0
  336. osn_selenium/executors/unified/cdp/storage.py +178 -0
  337. osn_selenium/executors/unified/cdp/system_info.py +24 -0
  338. osn_selenium/executors/unified/cdp/target.py +165 -0
  339. osn_selenium/executors/unified/cdp/tethering.py +15 -0
  340. osn_selenium/executors/unified/cdp/tracing.py +62 -0
  341. osn_selenium/executors/unified/cdp/web_audio.py +18 -0
  342. osn_selenium/executors/unified/cdp/web_authn.py +103 -0
  343. osn_selenium/executors/unified/javascript.py +104 -0
  344. osn_selenium/flags/__init__.py +1 -0
  345. osn_selenium/flags/_functions.py +45 -0
  346. osn_selenium/flags/_typehints.py +34 -0
  347. osn_selenium/flags/_validators.py +101 -0
  348. osn_selenium/{webdrivers/BaseDriver/flags.py → flags/base.py} +159 -245
  349. osn_selenium/{webdrivers/Blink/flags.py → flags/blink.py} +130 -374
  350. osn_selenium/flags/chrome.py +259 -0
  351. osn_selenium/flags/edge.py +259 -0
  352. osn_selenium/flags/models/__init__.py +1 -0
  353. osn_selenium/flags/models/base.py +130 -0
  354. osn_selenium/flags/models/blink.py +263 -0
  355. osn_selenium/{webdrivers/Chrome/flags.py → flags/models/chrome.py} +25 -75
  356. osn_selenium/{webdrivers/Edge/flags.py → flags/models/edge.py} +25 -75
  357. osn_selenium/flags/models/values.py +44 -0
  358. osn_selenium/{webdrivers/Yandex/flags.py → flags/models/yandex.py} +26 -76
  359. osn_selenium/flags/yandex.py +259 -0
  360. osn_selenium/instances/__init__.py +1 -0
  361. osn_selenium/instances/_functions.py +242 -0
  362. osn_selenium/instances/_typehints.py +148 -0
  363. osn_selenium/instances/_utils.py +143 -0
  364. osn_selenium/instances/convert.py +287 -0
  365. osn_selenium/instances/protocols.py +105 -0
  366. osn_selenium/instances/sync/__init__.py +1 -0
  367. osn_selenium/instances/sync/action_chains/__init__.py +32 -0
  368. osn_selenium/instances/sync/action_chains/base.py +74 -0
  369. osn_selenium/instances/sync/action_chains/click.py +61 -0
  370. osn_selenium/instances/sync/action_chains/drag_and_drop.py +45 -0
  371. osn_selenium/instances/sync/action_chains/hm_keyboard.py +37 -0
  372. osn_selenium/instances/sync/action_chains/hm_move.py +81 -0
  373. osn_selenium/instances/sync/action_chains/hm_scroll.py +60 -0
  374. osn_selenium/instances/sync/action_chains/keyboard.py +55 -0
  375. osn_selenium/instances/sync/action_chains/move.py +46 -0
  376. osn_selenium/instances/sync/action_chains/scroll.py +43 -0
  377. osn_selenium/instances/sync/action_chains/utils.py +30 -0
  378. osn_selenium/instances/sync/alert.py +69 -0
  379. osn_selenium/instances/sync/browser.py +72 -0
  380. osn_selenium/instances/sync/browsing_context.py +193 -0
  381. osn_selenium/instances/sync/dialog.py +81 -0
  382. osn_selenium/instances/sync/fedcm.py +92 -0
  383. osn_selenium/instances/sync/mobile.py +75 -0
  384. osn_selenium/instances/sync/network.py +90 -0
  385. osn_selenium/instances/sync/permissions.py +80 -0
  386. osn_selenium/instances/sync/script.py +77 -0
  387. osn_selenium/instances/sync/shadow_root.py +113 -0
  388. osn_selenium/instances/sync/storage.py +91 -0
  389. osn_selenium/instances/sync/switch_to.py +92 -0
  390. osn_selenium/instances/sync/web_driver_wait.py +83 -0
  391. osn_selenium/instances/sync/web_element.py +179 -0
  392. osn_selenium/instances/sync/web_extension.py +77 -0
  393. osn_selenium/instances/trio_threads/__init__.py +1 -0
  394. osn_selenium/instances/trio_threads/action_chains/__init__.py +32 -0
  395. osn_selenium/instances/trio_threads/action_chains/base.py +88 -0
  396. osn_selenium/instances/trio_threads/action_chains/click.py +71 -0
  397. osn_selenium/instances/trio_threads/action_chains/drag_and_drop.py +49 -0
  398. osn_selenium/instances/trio_threads/action_chains/hm_keyboard.py +41 -0
  399. osn_selenium/instances/trio_threads/action_chains/hm_move.py +91 -0
  400. osn_selenium/instances/trio_threads/action_chains/hm_scroll.py +66 -0
  401. osn_selenium/instances/trio_threads/action_chains/keyboard.py +63 -0
  402. osn_selenium/instances/trio_threads/action_chains/move.py +52 -0
  403. osn_selenium/instances/trio_threads/action_chains/scroll.py +49 -0
  404. osn_selenium/instances/trio_threads/action_chains/utils.py +32 -0
  405. osn_selenium/instances/trio_threads/alert.py +87 -0
  406. osn_selenium/instances/trio_threads/browser.py +90 -0
  407. osn_selenium/instances/trio_threads/browsing_context.py +216 -0
  408. osn_selenium/instances/trio_threads/dialog.py +99 -0
  409. osn_selenium/instances/trio_threads/fedcm.py +110 -0
  410. osn_selenium/instances/trio_threads/mobile.py +93 -0
  411. osn_selenium/instances/trio_threads/network.py +108 -0
  412. osn_selenium/instances/trio_threads/permissions.py +102 -0
  413. osn_selenium/instances/trio_threads/script.py +95 -0
  414. osn_selenium/instances/trio_threads/shadow_root.py +154 -0
  415. osn_selenium/instances/trio_threads/storage.py +109 -0
  416. osn_selenium/instances/trio_threads/switch_to.py +124 -0
  417. osn_selenium/instances/trio_threads/web_driver_wait.py +101 -0
  418. osn_selenium/instances/trio_threads/web_element.py +217 -0
  419. osn_selenium/instances/trio_threads/web_extension.py +99 -0
  420. osn_selenium/instances/unified/__init__.py +1 -0
  421. osn_selenium/instances/unified/action_chains/__init__.py +22 -0
  422. osn_selenium/instances/unified/action_chains/base.py +31 -0
  423. osn_selenium/instances/unified/action_chains/click.py +27 -0
  424. osn_selenium/instances/unified/action_chains/drag_and_drop.py +24 -0
  425. osn_selenium/instances/unified/action_chains/hm_keyboard.py +30 -0
  426. osn_selenium/instances/unified/action_chains/hm_move.py +66 -0
  427. osn_selenium/instances/unified/action_chains/hm_scroll.py +79 -0
  428. osn_selenium/instances/unified/action_chains/keyboard.py +24 -0
  429. osn_selenium/instances/unified/action_chains/move.py +24 -0
  430. osn_selenium/instances/unified/action_chains/scroll.py +21 -0
  431. osn_selenium/instances/unified/action_chains/utils.py +19 -0
  432. osn_selenium/instances/unified/alert.py +29 -0
  433. osn_selenium/instances/unified/browser.py +33 -0
  434. osn_selenium/instances/unified/browsing_context.py +151 -0
  435. osn_selenium/instances/unified/dialog.py +42 -0
  436. osn_selenium/instances/unified/fedcm.py +48 -0
  437. osn_selenium/instances/unified/mobile.py +36 -0
  438. osn_selenium/instances/unified/network.py +50 -0
  439. osn_selenium/instances/unified/permissions.py +43 -0
  440. osn_selenium/instances/unified/script.py +38 -0
  441. osn_selenium/instances/unified/shadow_root.py +46 -0
  442. osn_selenium/instances/unified/storage.py +48 -0
  443. osn_selenium/instances/unified/switch_to.py +49 -0
  444. osn_selenium/instances/unified/web_driver_wait.py +45 -0
  445. osn_selenium/instances/unified/web_element.py +145 -0
  446. osn_selenium/instances/unified/web_extension.py +38 -0
  447. osn_selenium/javascript/__init__.py +1 -0
  448. osn_selenium/javascript/_functions.py +63 -0
  449. osn_selenium/javascript/fingerprint/__init__.py +120 -0
  450. osn_selenium/javascript/fingerprint/_decorators.py +41 -0
  451. osn_selenium/javascript/fingerprint/_detect/__init__.py +1 -0
  452. osn_selenium/javascript/fingerprint/_detect/functions.py +253 -0
  453. osn_selenium/javascript/fingerprint/_detect/templates.py +128 -0
  454. osn_selenium/javascript/fingerprint/_functions.py +35 -0
  455. osn_selenium/javascript/fingerprint/_typehints.py +27 -0
  456. osn_selenium/javascript/fingerprint/registry/__init__.py +7 -0
  457. osn_selenium/javascript/fingerprint/registry/_core_functions.py +236 -0
  458. osn_selenium/javascript/fingerprint/registry/_functions.py +923 -0
  459. osn_selenium/javascript/fingerprint/registry/_typehints.py +6 -0
  460. osn_selenium/javascript/fingerprint/registry/_utils.py +6 -0
  461. osn_selenium/javascript/fingerprint/registry/models.py +41 -0
  462. osn_selenium/javascript/fingerprint/spoof/__init__.py +1 -0
  463. osn_selenium/javascript/fingerprint/spoof/_functions.py +172 -0
  464. osn_selenium/javascript/fingerprint/spoof/_templates.py +134 -0
  465. osn_selenium/javascript/fingerprint/spoof/_typehints.py +22 -0
  466. osn_selenium/javascript/fingerprint/spoof/core_rules.py +141 -0
  467. osn_selenium/javascript/fingerprint/spoof/noise.py +51 -0
  468. osn_selenium/javascript/fingerprint/spoof/rules.py +313 -0
  469. osn_selenium/javascript/functions.py +44 -0
  470. osn_selenium/javascript/models.py +35 -0
  471. osn_selenium/javascript/scripts/start_fingerprint_detection.js +56 -0
  472. osn_selenium/models.py +94 -0
  473. osn_selenium/trio_threads_mixin.py +159 -0
  474. osn_selenium/webdrivers/_args_helpers.py +181 -0
  475. osn_selenium/webdrivers/_bridges.py +57 -0
  476. osn_selenium/webdrivers/_decorators.py +83 -0
  477. osn_selenium/webdrivers/_executable_tables/__init__.py +1 -0
  478. osn_selenium/webdrivers/_executable_tables/functions.py +113 -0
  479. osn_selenium/webdrivers/_executable_tables/models.py +19 -0
  480. osn_selenium/webdrivers/_typehints.py +10 -0
  481. osn_selenium/webdrivers/protocols.py +50 -0
  482. osn_selenium/webdrivers/sync/__init__.py +1 -0
  483. osn_selenium/webdrivers/sync/blink/__init__.py +124 -0
  484. osn_selenium/webdrivers/sync/blink/base.py +140 -0
  485. osn_selenium/webdrivers/sync/blink/casting.py +34 -0
  486. osn_selenium/webdrivers/sync/blink/features.py +28 -0
  487. osn_selenium/webdrivers/sync/blink/lifecycle.py +66 -0
  488. osn_selenium/webdrivers/sync/blink/logging.py +25 -0
  489. osn_selenium/webdrivers/sync/blink/network.py +28 -0
  490. osn_selenium/webdrivers/sync/blink/settings.py +63 -0
  491. osn_selenium/webdrivers/sync/chrome/__init__.py +102 -0
  492. osn_selenium/webdrivers/sync/chrome/base.py +118 -0
  493. osn_selenium/webdrivers/sync/chrome/lifecycle.py +63 -0
  494. osn_selenium/webdrivers/sync/chrome/settings.py +58 -0
  495. osn_selenium/webdrivers/sync/core/__init__.py +100 -0
  496. osn_selenium/webdrivers/sync/core/actions.py +59 -0
  497. osn_selenium/webdrivers/sync/core/auth.py +77 -0
  498. osn_selenium/webdrivers/sync/core/base.py +175 -0
  499. osn_selenium/webdrivers/sync/core/capture.py +37 -0
  500. osn_selenium/webdrivers/sync/core/comonents.py +57 -0
  501. osn_selenium/webdrivers/sync/core/devtools.py +47 -0
  502. osn_selenium/webdrivers/sync/core/element.py +42 -0
  503. osn_selenium/webdrivers/sync/core/file.py +40 -0
  504. osn_selenium/webdrivers/sync/core/lifecycle.py +59 -0
  505. osn_selenium/webdrivers/sync/core/navigation.py +36 -0
  506. osn_selenium/webdrivers/sync/core/script.py +53 -0
  507. osn_selenium/webdrivers/sync/core/settings.py +35 -0
  508. osn_selenium/webdrivers/sync/core/storage.py +48 -0
  509. osn_selenium/webdrivers/sync/core/timeouts.py +59 -0
  510. osn_selenium/webdrivers/sync/core/window.py +99 -0
  511. osn_selenium/webdrivers/sync/edge/__init__.py +102 -0
  512. osn_selenium/webdrivers/sync/edge/base.py +114 -0
  513. osn_selenium/webdrivers/sync/edge/lifecycle.py +63 -0
  514. osn_selenium/webdrivers/sync/edge/settings.py +58 -0
  515. osn_selenium/webdrivers/sync/yandex/__init__.py +102 -0
  516. osn_selenium/webdrivers/sync/yandex/base.py +111 -0
  517. osn_selenium/webdrivers/sync/yandex/lifecycle.py +63 -0
  518. osn_selenium/webdrivers/sync/yandex/settings.py +58 -0
  519. osn_selenium/webdrivers/trio_threads/__init__.py +1 -0
  520. osn_selenium/webdrivers/trio_threads/blink/__init__.py +134 -0
  521. osn_selenium/webdrivers/trio_threads/blink/base.py +143 -0
  522. osn_selenium/webdrivers/trio_threads/blink/casting.py +35 -0
  523. osn_selenium/webdrivers/trio_threads/blink/features.py +29 -0
  524. osn_selenium/webdrivers/trio_threads/blink/lifecycle.py +66 -0
  525. osn_selenium/webdrivers/trio_threads/blink/logging.py +26 -0
  526. osn_selenium/webdrivers/trio_threads/blink/network.py +29 -0
  527. osn_selenium/webdrivers/trio_threads/blink/settings.py +63 -0
  528. osn_selenium/webdrivers/trio_threads/chrome/__init__.py +114 -0
  529. osn_selenium/webdrivers/trio_threads/chrome/base.py +119 -0
  530. osn_selenium/webdrivers/trio_threads/chrome/lifecycle.py +63 -0
  531. osn_selenium/webdrivers/trio_threads/chrome/settings.py +63 -0
  532. osn_selenium/webdrivers/trio_threads/core/__init__.py +115 -0
  533. osn_selenium/webdrivers/trio_threads/core/actions.py +72 -0
  534. osn_selenium/webdrivers/trio_threads/core/auth.py +88 -0
  535. osn_selenium/webdrivers/trio_threads/core/base.py +199 -0
  536. osn_selenium/webdrivers/trio_threads/core/capture.py +38 -0
  537. osn_selenium/webdrivers/trio_threads/core/comonents.py +92 -0
  538. osn_selenium/webdrivers/trio_threads/core/devtools.py +53 -0
  539. osn_selenium/webdrivers/trio_threads/core/element.py +58 -0
  540. osn_selenium/webdrivers/trio_threads/core/file.py +45 -0
  541. osn_selenium/webdrivers/trio_threads/core/lifecycle.py +60 -0
  542. osn_selenium/webdrivers/trio_threads/core/navigation.py +41 -0
  543. osn_selenium/webdrivers/trio_threads/core/script.py +59 -0
  544. osn_selenium/webdrivers/trio_threads/core/settings.py +36 -0
  545. osn_selenium/webdrivers/trio_threads/core/storage.py +54 -0
  546. osn_selenium/webdrivers/trio_threads/core/timeouts.py +60 -0
  547. osn_selenium/webdrivers/trio_threads/core/window.py +105 -0
  548. osn_selenium/webdrivers/trio_threads/edge/__init__.py +114 -0
  549. osn_selenium/webdrivers/trio_threads/edge/base.py +115 -0
  550. osn_selenium/webdrivers/trio_threads/edge/lifecycle.py +63 -0
  551. osn_selenium/webdrivers/trio_threads/edge/settings.py +63 -0
  552. osn_selenium/webdrivers/trio_threads/yandex/__init__.py +114 -0
  553. osn_selenium/webdrivers/trio_threads/yandex/base.py +112 -0
  554. osn_selenium/webdrivers/trio_threads/yandex/lifecycle.py +63 -0
  555. osn_selenium/webdrivers/trio_threads/yandex/settings.py +63 -0
  556. osn_selenium/webdrivers/unified/__init__.py +1 -0
  557. osn_selenium/webdrivers/unified/blink/__init__.py +1 -0
  558. osn_selenium/webdrivers/unified/blink/base.py +135 -0
  559. osn_selenium/webdrivers/unified/blink/casting.py +30 -0
  560. osn_selenium/webdrivers/unified/blink/features.py +22 -0
  561. osn_selenium/webdrivers/unified/blink/lifecycle.py +114 -0
  562. osn_selenium/webdrivers/unified/blink/logging.py +18 -0
  563. osn_selenium/webdrivers/unified/blink/network.py +22 -0
  564. osn_selenium/webdrivers/unified/blink/settings.py +86 -0
  565. osn_selenium/webdrivers/unified/chrome/__init__.py +1 -0
  566. osn_selenium/webdrivers/unified/chrome/base.py +58 -0
  567. osn_selenium/webdrivers/unified/chrome/lifecycle.py +88 -0
  568. osn_selenium/webdrivers/unified/chrome/settings.py +48 -0
  569. osn_selenium/webdrivers/unified/core/__init__.py +1 -0
  570. osn_selenium/webdrivers/unified/core/actions.py +43 -0
  571. osn_selenium/webdrivers/unified/core/auth.py +70 -0
  572. osn_selenium/webdrivers/unified/core/base.py +139 -0
  573. osn_selenium/webdrivers/unified/core/capture.py +32 -0
  574. osn_selenium/webdrivers/unified/core/components.py +32 -0
  575. osn_selenium/webdrivers/unified/core/devtools.py +35 -0
  576. osn_selenium/webdrivers/unified/core/element.py +24 -0
  577. osn_selenium/webdrivers/unified/core/file.py +35 -0
  578. osn_selenium/webdrivers/unified/core/lifecycle.py +84 -0
  579. osn_selenium/webdrivers/unified/core/navigation.py +31 -0
  580. osn_selenium/webdrivers/unified/core/script.py +32 -0
  581. osn_selenium/webdrivers/unified/core/settings.py +44 -0
  582. osn_selenium/webdrivers/unified/core/storage.py +37 -0
  583. osn_selenium/webdrivers/unified/core/timeouts.py +56 -0
  584. osn_selenium/webdrivers/unified/core/window.py +135 -0
  585. osn_selenium/webdrivers/unified/edge/__init__.py +1 -0
  586. osn_selenium/webdrivers/unified/edge/base.py +56 -0
  587. osn_selenium/webdrivers/unified/edge/lifecycle.py +88 -0
  588. osn_selenium/webdrivers/unified/edge/settings.py +48 -0
  589. osn_selenium/webdrivers/unified/yandex/__init__.py +1 -0
  590. osn_selenium/webdrivers/unified/yandex/base.py +58 -0
  591. osn_selenium/webdrivers/unified/yandex/lifecycle.py +58 -0
  592. osn_selenium/webdrivers/unified/yandex/settings.py +48 -0
  593. osn_selenium-1.1.0.dist-info/METADATA +252 -0
  594. osn_selenium-1.1.0.dist-info/RECORD +615 -0
  595. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/WHEEL +1 -1
  596. osn_selenium/captcha_workers/__init__.py +0 -26
  597. osn_selenium/dev_tools/_types.py +0 -22
  598. osn_selenium/dev_tools/errors.py +0 -89
  599. osn_selenium/dev_tools/logger.py +0 -558
  600. osn_selenium/dev_tools/manager.py +0 -1551
  601. osn_selenium/dev_tools/utils.py +0 -509
  602. osn_selenium/errors.py +0 -16
  603. osn_selenium/types.py +0 -118
  604. osn_selenium/webdrivers/BaseDriver/_utils.py +0 -37
  605. osn_selenium/webdrivers/BaseDriver/protocols.py +0 -2135
  606. osn_selenium/webdrivers/BaseDriver/trio_wrapper.py +0 -71
  607. osn_selenium/webdrivers/BaseDriver/webdriver.py +0 -2626
  608. osn_selenium/webdrivers/Blink/protocols.py +0 -330
  609. osn_selenium/webdrivers/Blink/webdriver.py +0 -637
  610. osn_selenium/webdrivers/Chrome/protocols.py +0 -228
  611. osn_selenium/webdrivers/Chrome/webdriver.py +0 -394
  612. osn_selenium/webdrivers/Edge/protocols.py +0 -228
  613. osn_selenium/webdrivers/Edge/webdriver.py +0 -394
  614. osn_selenium/webdrivers/Yandex/protocols.py +0 -211
  615. osn_selenium/webdrivers/Yandex/webdriver.py +0 -350
  616. osn_selenium/webdrivers/_functions.py +0 -504
  617. osn_selenium/webdrivers/types.py +0 -390
  618. osn_selenium-0.0.0.dist-info/METADATA +0 -710
  619. osn_selenium-0.0.0.dist-info/RECORD +0 -57
  620. /osn_selenium/{webdrivers/BaseDriver → abstract}/__init__.py +0 -0
  621. /osn_selenium/{webdrivers/Blink → abstract/executors}/__init__.py +0 -0
  622. /osn_selenium/{webdrivers/Chrome → abstract/instances}/__init__.py +0 -0
  623. /osn_selenium/{webdrivers/Edge → abstract/webdriver}/__init__.py +0 -0
  624. /osn_selenium/{webdrivers/Yandex → dev_tools/logger}/__init__.py +0 -0
  625. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/check_element_in_viewport.js +0 -0
  626. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_document_scroll_size.js +0 -0
  627. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_css.js +0 -0
  628. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_element_rect_in_viewport.js +0 -0
  629. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_random_element_point_in_viewport.js +0 -0
  630. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_position.js +0 -0
  631. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_rect.js +0 -0
  632. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/get_viewport_size.js +0 -0
  633. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/open_new_tab.js +0 -0
  634. /osn_selenium/{webdrivers/js_scripts → javascript/scripts}/stop_window_loading.js +0 -0
  635. {osn_selenium-0.0.0.dist-info → osn_selenium-1.1.0.dist-info}/top_level.txt +0 -0
@@ -1,132 +1,44 @@
1
+ from copy import deepcopy
2
+ from osn_selenium._base_models import DictModel
1
3
  from typing import (
2
4
  Any,
3
- Optional,
4
- TypedDict,
5
- Union
5
+ Dict,
6
+ List,
7
+ Optional
6
8
  )
7
- from osn_selenium.webdrivers.types import (
8
- FlagDefinition,
9
- FlagNotDefined,
10
- FlagType,
11
- _any_webdriver_option_type
9
+ from osn_selenium.flags._functions import argument_to_flag
10
+ from osn_selenium.exceptions.logic import (
11
+ AbstractImplementationError
12
+ )
13
+ from osn_selenium.flags._typehints import (
14
+ ANY_WEBDRIVER_OPTION_TYPEHINT
15
+ )
16
+ from osn_selenium.exceptions.flags import (
17
+ FlagNotDefinedError,
18
+ FlagTypeNotDefinedError
19
+ )
20
+ from osn_selenium.flags.models.values import (
21
+ ArgumentValue,
22
+ AttributeValue,
23
+ ExperimentalOptionValue
12
24
  )
13
- from osn_selenium.webdrivers._functions import (
25
+ from osn_selenium.flags._validators import (
14
26
  bool_adding_validation_function,
15
27
  optional_bool_adding_validation_function
16
28
  )
29
+ from osn_selenium.flags.models.base import (
30
+ BrowserArguments,
31
+ BrowserAttributes,
32
+ BrowserExperimentalOptions,
33
+ BrowserFlags,
34
+ FlagDefinition,
35
+ FlagNotDefined,
36
+ FlagType,
37
+ FlagTypeNotDefined
38
+ )
17
39
 
18
40
 
19
- class ArgumentValue(TypedDict):
20
- """
21
- Typed dictionary representing a single command-line argument and its value.
22
-
23
- Attributes:
24
- command_line (str): The command-line string for the argument.
25
- value (Any): The value associated with the argument.
26
- """
27
-
28
- command_line: str
29
- value: Any
30
-
31
-
32
- def _argument_to_flag(argument: ArgumentValue) -> str:
33
- """
34
- Formats a command-line argument from an ArgumentValue dictionary.
35
-
36
- If the command string contains '{value}', it will be replaced by the argument's value.
37
- Otherwise, the command string is returned as is.
38
-
39
- Args:
40
- argument (ArgumentValue): A dictionary containing the command-line string and its value.
41
-
42
- Returns:
43
- str: The formatted command-line argument string.
44
- """
45
-
46
- argument_command = argument["command_line"]
47
- argument_value = argument["value"]
48
-
49
- if "{value}" in argument_command:
50
- return argument_command.format(value=argument_value)
51
- else:
52
- return argument_command
53
-
54
-
55
- class ExperimentalOptionValue(TypedDict):
56
- """
57
- Typed dictionary representing a single experimental option and its value.
58
-
59
- Attributes:
60
- option_name (str): The name of the experimental option.
61
- value (Any): The value of the experimental option.
62
- """
63
-
64
- option_name: str
65
- value: Any
66
-
67
-
68
- class AttributeValue(TypedDict):
69
- """
70
- Typed dictionary representing a single WebDriver attribute and its value.
71
-
72
- Attributes:
73
- attribute_name (str): The name of the attribute.
74
- value (Any): The value of the attribute.
75
- """
76
-
77
- attribute_name: str
78
- value: Any
79
-
80
-
81
- class FlagTypeNotDefined:
82
- """A sentinel class to indicate that a flag type definition was not found."""
83
-
84
- pass
85
-
86
-
87
- class BrowserExperimentalOptions(TypedDict, total=False):
88
- """
89
- Typed dictionary for browser-agnostic experimental options.
90
- """
91
-
92
- pass
93
-
94
-
95
- class BrowserAttributes(TypedDict, total=False):
96
- """
97
- Typed dictionary for browser-agnostic WebDriver attributes.
98
-
99
- Attributes:
100
- enable_bidi (Optional[bool]): Enables/disables BiDi (Bidirectional) protocol mapper.
101
- """
102
-
103
- enable_bidi: Optional[bool]
104
-
105
-
106
- class BrowserArguments(TypedDict, total=False):
107
- """
108
- Typed dictionary for browser-agnostic command-line arguments.
109
-
110
- Attributes:
111
- se_downloads_enabled (bool): Enables/disables Selenium downloads.
112
- """
113
-
114
- se_downloads_enabled: bool
115
-
116
-
117
- class BrowserFlags(TypedDict, total=False):
118
- """
119
- Typed dictionary representing a collection of all flag types.
120
-
121
- Attributes:
122
- argument (BrowserArguments): Command-line arguments for the browser.
123
- experimental_option (BrowserExperimentalOptions): Experimental options for WebDriver.
124
- attribute (BrowserAttributes): WebDriver attributes.
125
- """
126
-
127
- argument: BrowserArguments
128
- experimental_option: BrowserExperimentalOptions
129
- attribute: BrowserAttributes
41
+ __all__ = ["BrowserFlagsManager"]
130
42
 
131
43
 
132
44
  class BrowserFlagsManager:
@@ -135,27 +47,19 @@ class BrowserFlagsManager:
135
47
 
136
48
  This class provides a structured way to define, set, and build browser options
137
49
  for various Selenium WebDriver instances.
138
-
139
- Attributes:
140
- _flags_types (dict[str, FlagType]): A dictionary mapping flag types to their handler functions.
141
- _flags_definitions (dict[str, FlagDefinition]): A dictionary of all available flag definitions.
142
- _flags_definitions_by_types (dict[str, dict[str, FlagDefinition]]): Flags definitions grouped by type.
143
- _arguments (dict[str, ArgumentValue]): Stores the configured command-line arguments.
144
- _experimental_options (dict[str, ExperimentalOptionValue]): Stores the configured experimental options.
145
- _attributes (dict[str, AttributeValue]): Stores the configured WebDriver attributes.
146
50
  """
147
51
 
148
52
  def __init__(
149
53
  self,
150
- flags_types: Optional[dict[str, FlagType]] = None,
151
- flags_definitions: Optional[dict[str, FlagDefinition]] = None
54
+ flags_types: Optional[Dict[str, FlagType]] = None,
55
+ flags_definitions: Optional[Dict[str, FlagDefinition]] = None
152
56
  ):
153
57
  """
154
58
  Initializes the BrowserFlagsManager.
155
59
 
156
60
  Args:
157
- flags_types (Optional[dict[str, FlagType]]): Custom flag types and their corresponding functions.
158
- flags_definitions (Optional[dict[str, FlagDefinition]]): Custom flag definitions to add or override.
61
+ flags_types (Optional[Dict[str, FlagType]]): Custom flag types and their corresponding functions.
62
+ flags_definitions (Optional[Dict[str, FlagDefinition]]): Custom flag definitions to add or override.
159
63
  """
160
64
 
161
65
  inner_flags_types = {
@@ -165,8 +69,8 @@ class BrowserFlagsManager:
165
69
  set_flags_function=self.set_arguments,
166
70
  update_flags_function=self.update_arguments,
167
71
  clear_flags_function=self.clear_arguments,
168
- build_options_function=self.build_options_arguments,
169
- build_start_args_function=self.build_start_args_arguments
72
+ build_options_function=self._build_options_arguments,
73
+ build_start_args_function=self._build_start_args_arguments
170
74
  ),
171
75
  "experimental_option": FlagType(
172
76
  set_flag_function=self.set_experimental_option,
@@ -174,8 +78,8 @@ class BrowserFlagsManager:
174
78
  set_flags_function=self.set_experimental_options,
175
79
  update_flags_function=self.update_experimental_options,
176
80
  clear_flags_function=self.clear_experimental_options,
177
- build_options_function=self.build_options_experimental_options,
178
- build_start_args_function=lambda: []
81
+ build_options_function=self._build_options_experimental_options,
82
+ build_start_args_function=lambda: [],
179
83
  ),
180
84
  "attribute": FlagType(
181
85
  set_flag_function=self.set_attribute,
@@ -183,8 +87,8 @@ class BrowserFlagsManager:
183
87
  set_flags_function=self.set_attributes,
184
88
  update_flags_function=self.update_attributes,
185
89
  clear_flags_function=self.clear_attributes,
186
- build_options_function=self.build_options_attributes,
187
- build_start_args_function=lambda: []
90
+ build_options_function=self._build_options_attributes,
91
+ build_start_args_function=lambda: [],
188
92
  ),
189
93
  }
190
94
 
@@ -214,33 +118,33 @@ class BrowserFlagsManager:
214
118
  self._flags_types = inner_flags_types
215
119
  self._flags_definitions = inner_flags_definitions
216
120
 
217
- self._flags_definitions_by_types: dict[str, dict[str, FlagDefinition]] = {
121
+ self._flags_definitions_by_types: Dict[str, Dict[str, FlagDefinition]] = {
218
122
  option_type: dict(
219
- filter(lambda di: di[1]["type"] == option_type, self._flags_definitions.items())
123
+ filter(lambda di: di[1].type == option_type, self._flags_definitions.items())
220
124
  )
221
125
  for option_type in self._flags_types.keys()
222
126
  }
223
127
 
224
- self._arguments: dict[str, ArgumentValue] = {}
225
- self._experimental_options: dict[str, ExperimentalOptionValue] = {}
226
- self._attributes: dict[str, AttributeValue] = {}
128
+ self._arguments: Dict[str, ArgumentValue] = {}
129
+ self._experimental_options: Dict[str, ExperimentalOptionValue] = {}
130
+ self._attributes: Dict[str, AttributeValue] = {}
227
131
 
228
- def build_options_attributes(self, options: _any_webdriver_option_type) -> _any_webdriver_option_type:
132
+ def _build_options_attributes(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
229
133
  """
230
134
  Applies configured attributes to the WebDriver options object.
231
135
 
232
136
  Only attributes with `mode` set to 'webdriver_option' or 'both' are applied.
233
137
 
234
138
  Args:
235
- options (_any_webdriver_option_type): The WebDriver options object to modify.
139
+ options (any_webdriver_option_type): The WebDriver options object to modify.
236
140
 
237
141
  Returns:
238
- _any_webdriver_option_type: The modified WebDriver options object.
142
+ any_webdriver_option_type: The modified WebDriver options object.
239
143
  """
240
144
 
241
145
  for name, value in self._attributes.items():
242
- if self._flags_definitions_by_types["attribute"][name]["mode"] in ["webdriver_option", "both"]:
243
- setattr(options, value["attribute_name"], value["value"])
146
+ if self._flags_definitions_by_types["attribute"][name].mode in ["webdriver_option", "both"]:
147
+ setattr(options, value.attribute_name, value.value)
244
148
 
245
149
  return options
246
150
 
@@ -262,73 +166,70 @@ class BrowserFlagsManager:
262
166
 
263
167
  self._attributes.pop(attribute_name, None)
264
168
 
265
- def set_attribute(self, attribute: FlagDefinition, value: Any):
169
+ def set_attribute(self, attribute: FlagDefinition, value: DictModel):
266
170
  """
267
171
  Sets a browser attribute. If the attribute already exists, it is overwritten.
268
172
 
269
173
  Args:
270
174
  attribute (FlagDefinition): The definition of the attribute to set.
271
- value (Any): The value to assign to the attribute.
175
+ value (DictModel): The value to assign to the attribute.
272
176
  """
273
177
 
274
- attribute_name = attribute["name"]
275
- attribute_command = attribute["command"]
276
- adding_validation_function = attribute["adding_validation_function"]
178
+ attribute_name = attribute.name
179
+ attribute_command = attribute.command
180
+ adding_validation_function = attribute.adding_validation_function
277
181
 
278
182
  self.remove_attribute(attribute_name)
279
183
 
280
184
  if adding_validation_function(value):
281
185
  self._attributes[attribute_name] = AttributeValue(attribute_name=attribute_command, value=value)
282
186
 
283
- def update_attributes(self, attributes: Union[BrowserAttributes, dict[str, Any]]):
187
+ def update_attributes(self, attributes: BrowserAttributes):
284
188
  """
285
189
  Updates browser attributes from a dictionary without clearing existing ones.
286
190
 
287
191
  Args:
288
- attributes (Union[BrowserAttributes, dict[str, Any]]): A dictionary of attributes to set or update.
192
+ attributes (BrowserAttributes): A dictionary of attributes to set or update.
289
193
 
290
194
  Raises:
291
- ValueError: If an unknown attribute key is provided.
195
+ FlagNotDefinedError: If an unknown attribute key is provided.
292
196
  """
293
197
 
294
- for key, value in attributes.items():
198
+ for key, value in attributes.model_dump(exclude_none=True).items():
295
199
  flag_definition = self._flags_definitions_by_types["attribute"].get(key, FlagNotDefined())
296
200
 
297
201
  if isinstance(flag_definition, FlagNotDefined):
298
- raise ValueError(f"Unknown attribute: {key}.")
202
+ raise FlagNotDefinedError(flag_name=key, flag_type="attributes")
299
203
 
300
- self.set_attribute(flag_definition, value)
204
+ self.set_attribute(flag_definition, getattr(attributes, key))
301
205
 
302
- def set_attributes(self, attributes: Union[BrowserAttributes, dict[str, Any]]):
206
+ def set_attributes(self, attributes: BrowserAttributes):
303
207
  """
304
208
  Clears existing and sets new browser attributes from a dictionary.
305
209
 
306
210
  Args:
307
- attributes (Union[BrowserAttributes, dict[str, Any]]): A dictionary of attributes to set.
308
-
309
- Raises:
310
- ValueError: If an unknown attribute key is provided.
211
+ attributes (BrowserAttributes): A dictionary of attributes to set.
311
212
  """
312
213
 
313
214
  self.clear_attributes()
314
215
  self.update_attributes(attributes)
315
216
 
316
- def build_options_experimental_options(self, options: _any_webdriver_option_type) -> _any_webdriver_option_type:
217
+ def _build_options_experimental_options(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
317
218
  """
318
219
  Adds configured experimental options to the WebDriver options object.
319
220
 
320
221
  Only options with `mode` set to 'webdriver_option' or 'both' are added.
321
222
 
322
223
  Args:
323
- options (_any_webdriver_option_type): The WebDriver options object to modify.
224
+ options (any_webdriver_option_type): The WebDriver options object to modify.
324
225
 
325
226
  Returns:
326
- _any_webdriver_option_type: The modified WebDriver options object.
227
+ any_webdriver_option_type: The modified WebDriver options object.
327
228
  """
328
229
 
329
230
  for name, value in self._experimental_options.items():
330
- if self._flags_definitions_by_types["experimental_option"][name]["mode"] in ["webdriver_option", "both"]:
331
- options.add_experimental_option(value["option_name"], value["value"])
231
+ if self._flags_definitions_by_types["experimental_option"][name].mode in ["webdriver_option", "both"]:
232
+ options.add_experimental_option(value.option_name, value.value)
332
233
 
333
234
  return options
334
235
 
@@ -351,95 +252,86 @@ class BrowserFlagsManager:
351
252
 
352
253
  self._experimental_options.pop(experimental_option_name, None)
353
254
 
354
- def set_experimental_option(self, experimental_option: FlagDefinition, value: Any):
255
+ def set_experimental_option(self, experimental_option: FlagDefinition, value: DictModel):
355
256
  """
356
257
  Sets an experimental browser option. If the option already exists, it is overwritten.
357
258
 
358
259
  Args:
359
260
  experimental_option (FlagDefinition): The definition of the experimental option to set.
360
- value (Any): The value to assign to the option.
261
+ value (DictModel): The value to assign to the option.
361
262
  """
362
263
 
363
- experimental_option_name = experimental_option["name"]
364
- experimental_option_command = experimental_option["command"]
365
- adding_validation_function = experimental_option["adding_validation_function"]
264
+ experimental_option_name = experimental_option.name
265
+ experimental_option_command = experimental_option.command
266
+ adding_validation_function = experimental_option.adding_validation_function
366
267
 
367
268
  self.remove_experimental_option(experimental_option_name)
368
269
 
369
270
  if adding_validation_function(value):
370
271
  self._experimental_options[experimental_option_name] = ExperimentalOptionValue(option_name=experimental_option_command, value=value)
371
272
 
372
- def update_experimental_options(
373
- self,
374
- experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
375
- ):
273
+ def update_experimental_options(self, experimental_options: BrowserExperimentalOptions):
376
274
  """
377
275
  Updates experimental options from a dictionary without clearing existing ones.
378
276
 
379
277
  Args:
380
- experimental_options (Union[BrowserExperimentalOptions, dict[str, Any]]): A dictionary of experimental options to set or update.
278
+ experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set or update.
381
279
 
382
280
  Raises:
383
- ValueError: If an unknown experimental option key is provided.
281
+ FlagNotDefinedError: If an unknown experimental option key is provided.
384
282
  """
385
283
 
386
- for key, value in experimental_options.items():
284
+ for key, value in experimental_options.model_dump(exclude_none=True).items():
387
285
  flag_definition = self._flags_definitions_by_types["experimental_option"].get(key, FlagNotDefined())
388
286
 
389
287
  if isinstance(flag_definition, FlagNotDefined):
390
- raise ValueError(f"Unknown experimental option: {key}.")
288
+ raise FlagNotDefinedError(flag_name=key, flag_type="experimental options")
391
289
 
392
- self.set_experimental_option(flag_definition, value)
290
+ self.set_experimental_option(flag_definition, getattr(experimental_options, key))
393
291
 
394
- def set_experimental_options(
395
- self,
396
- experimental_options: Union[BrowserExperimentalOptions, dict[str, Any]]
397
- ):
292
+ def set_experimental_options(self, experimental_options: BrowserExperimentalOptions):
398
293
  """
399
294
  Clears existing and sets new experimental options from a dictionary.
400
295
 
401
296
  Args:
402
- experimental_options (Union[BrowserExperimentalOptions, dict[str, Any]]): A dictionary of experimental options to set.
403
-
404
- Raises:
405
- ValueError: If an unknown experimental option key is provided.
297
+ experimental_options (BrowserExperimentalOptions): A dictionary of experimental options to set.
406
298
  """
407
299
 
408
300
  self.clear_experimental_options()
409
301
  self.update_experimental_options(experimental_options)
410
302
 
411
- def build_start_args_arguments(self) -> list[str]:
303
+ def _build_start_args_arguments(self) -> List[str]:
412
304
  """
413
- Builds a list of command-line arguments intended for browser startup.
305
+ Builds a List of command-line arguments intended for browser startup.
414
306
 
415
307
  Only arguments with `mode` set to 'startup_argument' or 'both' are included.
416
308
 
417
309
  Returns:
418
- list[str]: A list of formatted command-line argument strings.
310
+ List[str]: A List of formatted command-line argument strings.
419
311
  """
420
312
 
421
313
  return [
422
- _argument_to_flag(value)
314
+ argument_to_flag(value)
423
315
  for name, value in self._arguments.items()
424
- if self._flags_definitions_by_types["argument"][name]["mode"] in ["startup_argument", "both"]
316
+ if self._flags_definitions_by_types["argument"][name].mode in ["startup_argument", "both"]
425
317
  ]
426
318
 
427
- def build_options_arguments(self, options: _any_webdriver_option_type) -> _any_webdriver_option_type:
319
+ def _build_options_arguments(self, options: ANY_WEBDRIVER_OPTION_TYPEHINT) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
428
320
  """
429
321
  Adds configured command-line arguments to the WebDriver options object.
430
322
 
431
323
  Only arguments with `mode` set to 'webdriver_option' or 'both' are added.
432
324
 
433
325
  Args:
434
- options (_any_webdriver_option_type): The WebDriver options object to modify.
326
+ options (any_webdriver_option_type): The WebDriver options object to modify.
435
327
 
436
328
  Returns:
437
- _any_webdriver_option_type: The modified WebDriver options object.
329
+ any_webdriver_option_type: The modified WebDriver options object.
438
330
  """
439
331
 
440
332
  for name, value in self._arguments.items():
441
- if self._flags_definitions_by_types["argument"][name]["mode"] in ["webdriver_option", "both"]:
442
- options.add_argument(_argument_to_flag(value))
333
+ if self._flags_definitions_by_types["argument"][name].mode in ["webdriver_option", "both"]:
334
+ options.add_argument(argument_to_flag(value))
443
335
 
444
336
  return options
445
337
 
@@ -470,55 +362,76 @@ class BrowserFlagsManager:
470
362
  value (Any): The value for the argument. This may be a boolean for a simple flag or a string/number for a valued flag.
471
363
  """
472
364
 
473
- argument_name = argument["name"]
474
- argument_command = argument["command"]
475
- adding_validation_function = argument["adding_validation_function"]
365
+ argument_name = argument.name
366
+ argument_command = argument.command
367
+ adding_validation_function = argument.adding_validation_function
476
368
 
477
369
  self.remove_argument(argument_name)
478
370
 
479
371
  if adding_validation_function(value):
480
372
  self._arguments[argument_name] = ArgumentValue(command_line=argument_command, value=value)
481
373
 
482
- def update_arguments(self, arguments: Union[BrowserArguments, dict[str, Any]]):
374
+ def update_arguments(self, arguments: BrowserArguments):
483
375
  """
484
376
  Updates command-line arguments from a dictionary without clearing existing ones.
485
377
 
486
378
  Args:
487
- arguments (Union[BrowserArguments, dict[str, Any]]): A dictionary of arguments to set or update.
379
+ arguments (BrowserArguments): A dictionary of arguments to set or update.
488
380
 
489
381
  Raises:
490
- ValueError: If an unknown argument key is provided.
382
+ FlagNotDefinedError: If an unknown argument key is provided.
491
383
  """
492
384
 
493
- for key, value in arguments.items():
385
+ for key, value in arguments.model_dump(exclude_none=True).items():
494
386
  flag_definition = self._flags_definitions_by_types["argument"].get(key, FlagNotDefined())
495
387
 
496
388
  if isinstance(flag_definition, FlagNotDefined):
497
- raise ValueError(f"Unknown argument: {key}.")
389
+ raise FlagNotDefinedError(flag_name=key, flag_type="arguments")
498
390
 
499
- self.set_argument(flag_definition, value)
391
+ self.set_argument(flag_definition, getattr(arguments, key))
500
392
 
501
- def set_arguments(self, arguments: Union[BrowserArguments, dict[str, Any]]):
393
+ def set_arguments(self, arguments: BrowserArguments):
502
394
  """
503
395
  Clears existing and sets new command-line arguments from a dictionary.
504
396
 
505
397
  Args:
506
- arguments (Union[BrowserArguments, dict[str, Any]]): A dictionary of arguments to set.
507
-
508
- Raises:
509
- ValueError: If an unknown argument key is provided.
398
+ arguments (BrowserArguments): A dictionary of arguments to set.
510
399
  """
511
400
 
512
401
  self.clear_arguments()
513
402
  self.update_arguments(arguments)
514
403
 
404
+ @property
405
+ def arguments(self) -> Dict[str, ArgumentValue]:
406
+ return deepcopy(self._arguments)
407
+
408
+ @property
409
+ def attributes(self) -> Dict[str, AttributeValue]:
410
+ return deepcopy(self._attributes)
411
+
515
412
  def clear_flags(self):
516
413
  """Clears all configured flags of all types (arguments, options, attributes)."""
517
414
 
518
415
  for type_name, type_functions in self._flags_types.items():
519
- type_functions["clear_flags_function"]()
416
+ type_functions.clear_flags_function()
520
417
 
521
- def _renew_webdriver_options(self) -> _any_webdriver_option_type:
418
+ @property
419
+ def experimental_options(self) -> Dict[str, ExperimentalOptionValue]:
420
+ return deepcopy(self._experimental_options)
421
+
422
+ @property
423
+ def flags_definitions(self) -> Dict[str, FlagDefinition]:
424
+ return deepcopy(self._flags_definitions)
425
+
426
+ @property
427
+ def flags_definitions_by_types(self) -> Dict[str, Dict[str, FlagDefinition]]:
428
+ return deepcopy(self._flags_definitions_by_types)
429
+
430
+ @property
431
+ def flags_types(self) -> Dict[str, FlagType]:
432
+ return deepcopy(self._flags_types)
433
+
434
+ def _renew_webdriver_options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
522
435
  """
523
436
  Abstract method to renew WebDriver options. Must be implemented in child classes.
524
437
 
@@ -526,27 +439,30 @@ class BrowserFlagsManager:
526
439
  browser-specific WebDriver options instances (e.g., ChromeOptions, FirefoxOptions).
527
440
 
528
441
  Returns:
529
- _any_webdriver_option_type: A new instance of WebDriver options (e.g., ChromeOptions, FirefoxOptions).
442
+ any_webdriver_option_type: A new instance of WebDriver options (e.g., ChromeOptions, FirefoxOptions).
530
443
 
531
444
  Raises:
532
- NotImplementedError: If the method is not implemented in a subclass.
445
+ AbstractImplementationError: If the method is not implemented in a subclass.
533
446
  """
534
447
 
535
- raise NotImplementedError("This function must be implemented in child classes.")
448
+ raise AbstractImplementationError(
449
+ method_name="_renew_webdriver_options",
450
+ class_name=self.__class__.__name__
451
+ )
536
452
 
537
453
  @property
538
- def options(self) -> _any_webdriver_option_type:
454
+ def options(self) -> ANY_WEBDRIVER_OPTION_TYPEHINT:
539
455
  """
540
456
  Builds and returns a WebDriver options object with all configured flags applied.
541
457
 
542
458
  Returns:
543
- _any_webdriver_option_type: A configured WebDriver options object.
459
+ any_webdriver_option_type: A configured WebDriver options object.
544
460
  """
545
461
 
546
462
  options = self._renew_webdriver_options()
547
463
 
548
464
  for type_name, type_functions in self._flags_types.items():
549
- options = type_functions["build_options_function"](options)
465
+ options = type_functions.build_options_function(options)
550
466
 
551
467
  return options
552
468
 
@@ -562,16 +478,16 @@ class BrowserFlagsManager:
562
478
  option (WebdriverOption): The configuration object defining the option to be removed.
563
479
 
564
480
  Raises:
565
- ValueError: If the option type is not recognized.
481
+ FlagTypeNotDefinedError: If the option type is not recognized.
566
482
  """
567
483
 
568
484
  for type_name, type_functions in self._flags_types.items():
569
- if option["type"] == type_name:
570
- type_functions["remove_flag_function"](option["name"])
485
+ if option.type == type_name:
486
+ type_functions.remove_flag_function(option.name)
571
487
 
572
- raise ValueError(f"Unknown option type ({option}).")
488
+ raise FlagTypeNotDefinedError(flag_type=option.type)
573
489
 
574
- def set_flags(self, flags: Union[BrowserFlags, dict[str, dict[str, Any]]]):
490
+ def set_flags(self, flags: BrowserFlags):
575
491
  """
576
492
  Clears all existing flags and sets new ones from a comprehensive dictionary.
577
493
 
@@ -580,20 +496,20 @@ class BrowserFlagsManager:
580
496
  previously configured flags for that type.
581
497
 
582
498
  Args:
583
- flags (Union[BrowserFlags, dict[str, dict[str, Any]]]): A dictionary where keys are flag types
499
+ flags (BrowserFlags): A dictionary where keys are flag types
584
500
  and values are dictionaries of flags to set for that type.
585
501
 
586
502
  Raises:
587
- ValueError: If an unknown flag type is provided in the `flags` dictionary.
503
+ FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
588
504
  """
589
505
 
590
- for type_name, type_flags in flags.items():
506
+ for type_name, type_flags in flags.model_dump(exclude_none=True).items():
591
507
  flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
592
508
 
593
509
  if isinstance(flags_type_definition, FlagTypeNotDefined):
594
- raise ValueError(f"Unknown flag type: {type_name}.")
510
+ raise FlagTypeNotDefinedError(flag_type=type_name)
595
511
 
596
- flags_type_definition["set_flags_function"](type_flags)
512
+ flags_type_definition.set_flags_function(getattr(flags, type_name))
597
513
 
598
514
  def set_option(self, option: FlagDefinition, value: Any):
599
515
  """
@@ -608,18 +524,16 @@ class BrowserFlagsManager:
608
524
  value (Any): The value to be set for the option. The type and acceptable values depend on the specific browser option being configured.
609
525
 
610
526
  Raises:
611
- ValueError: If the option type is not recognized.
527
+ FlagTypeNotDefinedError: If the option type is not recognized.
612
528
  """
613
529
 
614
530
  for type_name, type_functions in self._flags_types.items():
615
- if option["type"] == type_name:
616
- type_functions["set_flag_function"](option, value)
531
+ if option.type == type_name:
532
+ type_functions.set_flag_function(option, value)
617
533
 
618
- raise ValueError(
619
- f"Unknown option type ({option}). Acceptable types are: {', '.join(self._flags_types.keys())}."
620
- )
534
+ raise FlagTypeNotDefinedError(flag_type=option.type)
621
535
 
622
- def update_flags(self, flags: Union[BrowserFlags, dict[str, dict[str, Any]]]):
536
+ def update_flags(self, flags: BrowserFlags):
623
537
  """
624
538
  Updates all flags from a comprehensive dictionary without clearing existing ones.
625
539
 
@@ -628,17 +542,17 @@ class BrowserFlagsManager:
628
542
  flags without affecting other existing flags.
629
543
 
630
544
  Args:
631
- flags (Union[BrowserFlags, dict[str, dict[str, Any]]]): A dictionary where keys are flag types
545
+ flags (BrowserFlags): A dictionary where keys are flag types
632
546
  and values are dictionaries of flags to update for that type.
633
547
 
634
548
  Raises:
635
- ValueError: If an unknown flag type is provided in the `flags` dictionary.
549
+ FlagTypeNotDefinedError: If an unknown flag type is provided in the `flags` dictionary.
636
550
  """
637
551
 
638
- for type_name, type_flags in flags.items():
552
+ for type_name, type_flags in flags.model_dump(exclude_none=True).items():
639
553
  flags_type_definition = self._flags_types.get(type_name, FlagTypeNotDefined())
640
554
 
641
555
  if isinstance(flags_type_definition, FlagTypeNotDefined):
642
- raise ValueError(f"Unknown flag type: {type_name}.")
556
+ raise FlagTypeNotDefinedError(flag_type=type_name)
643
557
 
644
- flags_type_definition["update_flags_function"](type_flags)
558
+ flags_type_definition.update_flags_function(getattr(flags, type_name))