seleniumbase 4.32.11__tar.gz → 4.32.12__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (393) hide show
  1. {seleniumbase-4.32.11/seleniumbase.egg-info → seleniumbase-4.32.12}/PKG-INFO +3 -3
  2. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/requirements.txt +2 -2
  3. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/sbase/steps.py +7 -0
  4. seleniumbase-4.32.12/seleniumbase/__version__.py +2 -0
  5. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/common/decorators.py +14 -6
  6. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_mkrec.py +3 -1
  7. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_recorder.py +3 -0
  8. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/browser_launcher.py +7 -2
  9. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/sb_cdp.py +110 -14
  10. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/base_case.py +51 -6
  11. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/__init__.py +1 -1
  12. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/cdp_util.py +5 -1
  13. {seleniumbase-4.32.11 → seleniumbase-4.32.12/seleniumbase.egg-info}/PKG-INFO +3 -3
  14. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase.egg-info/requires.txt +2 -2
  15. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/setup.py +2 -2
  16. seleniumbase-4.32.11/seleniumbase/__version__.py +0 -2
  17. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/.gitignore +7 -7
  18. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/LICENSE +0 -0
  19. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/MANIFEST.in +0 -0
  20. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/README.md +0 -0
  21. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/__init__.py +0 -0
  22. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/basic_test.py +0 -0
  23. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/__init__.py +0 -0
  24. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/features/__init__.py +0 -0
  25. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/features/environment.py +0 -0
  26. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/features/steps/__init__.py +0 -0
  27. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/features/steps/calculator.py +0 -0
  28. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/features/steps/fail_page.py +0 -0
  29. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/features/steps/imported.py +0 -0
  30. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
  31. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/__init__.py +0 -0
  32. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/base_test_case.py +0 -0
  33. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/boilerplate_test.py +0 -0
  34. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/classic_obj_test.py +0 -0
  35. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/page_objects.py +0 -0
  36. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/__init__.py +0 -0
  37. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
  38. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
  39. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/google_objects.py +0 -0
  40. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/google_test.py +0 -0
  41. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/sb_swag_test.py +0 -0
  42. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/swag_labs_test.py +0 -0
  43. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/samples/test_page_objects.py +0 -0
  44. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/boilerplates/sb_fixture_test.py +0 -0
  45. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/capabilities/mac_cap_file.py +0 -0
  46. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/capabilities/sample_cap_file_BS.py +0 -0
  47. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/capabilities/sample_cap_file_SL.py +0 -0
  48. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/capabilities/selenoid_cap_file.py +0 -0
  49. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/capabilities/win10_cap_file.py +0 -0
  50. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/chart_presentation.py +0 -0
  51. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/my_chart.py +0 -0
  52. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/pie_charts.py +0 -0
  53. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/test_area_chart.py +0 -0
  54. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/test_display_chart.py +0 -0
  55. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/test_line_chart.py +0 -0
  56. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/test_multi_series.py +0 -0
  57. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/chart_maker/test_save_chart.py +0 -0
  58. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/coffee_cart_tests.py +0 -0
  59. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/custom_settings.py +0 -0
  60. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/desktop_apps/recorder.py +0 -0
  61. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/dialog_boxes/dialog_box_tour.py +0 -0
  62. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/edge_test.py +0 -0
  63. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/github_test.py +0 -0
  64. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/gui_test_runner.py +0 -0
  65. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/hack_the_planet.py +0 -0
  66. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/handle_alert_test.py +0 -0
  67. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/iframe_tests.py +0 -0
  68. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/locale_code_test.py +0 -0
  69. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/master_qa/__init__.py +0 -0
  70. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/master_qa/basic_masterqa_test_0.py +0 -0
  71. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/master_qa/masterqa_test_1.py +0 -0
  72. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/__init__.py +0 -0
  73. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/protractor/__init__.py +0 -0
  74. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/protractor/example_test.py +0 -0
  75. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/protractor/input_test.py +0 -0
  76. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/protractor/mat_paginator_test.py +0 -0
  77. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/raw_selenium/__init__.py +0 -0
  78. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
  79. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
  80. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/raw_selenium/messy_raw.py +0 -0
  81. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/raw_selenium/refined_raw.py +0 -0
  82. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/migration/raw_selenium/simple_sbase.py +0 -0
  83. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/my_first_test.py +0 -0
  84. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/nth_child_test.py +0 -0
  85. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/offline_examples/__init__.py +0 -0
  86. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/offline_examples/load_html_test.py +0 -0
  87. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/offline_examples/test_demo_page.py +0 -0
  88. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/offline_examples/test_extended_driver.py +0 -0
  89. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/offline_examples/test_handle_alerts.py +0 -0
  90. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/offline_examples/test_request_fixture.py +0 -0
  91. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/offline_examples/test_user_agent.py +0 -0
  92. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/old_wordle_script.py +0 -0
  93. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/parameterized_test.py +0 -0
  94. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/performance_test.py +0 -0
  95. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/core_presentation.py +0 -0
  96. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/edge_presentation.py +0 -0
  97. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/fundamentals.py +0 -0
  98. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/multi_uc.py +0 -0
  99. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/my_presentation.py +0 -0
  100. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/py_virtual_envs.py +0 -0
  101. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/uc_presentation.py +0 -0
  102. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/presenter/uc_presentation_3.py +0 -0
  103. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/proxy_test.py +0 -0
  104. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/rate_limiting_test.py +0 -0
  105. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_ahrefs.py +0 -0
  106. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_antibot_login.py +0 -0
  107. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_bing_captcha.py +0 -0
  108. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_block.py +0 -0
  109. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_brotector_captcha.py +0 -0
  110. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_call.py +0 -0
  111. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_cdp_logging.py +0 -0
  112. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_cf.py +0 -0
  113. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_cookies.py +0 -0
  114. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_detection.py +0 -0
  115. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_driver_context.py +0 -0
  116. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_driver_manager.py +0 -0
  117. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_file_call.py +0 -0
  118. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_form_turnstile.py +0 -0
  119. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_games.py +0 -0
  120. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_gui_click.py +0 -0
  121. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_hobbit.py +0 -0
  122. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_login_context.py +0 -0
  123. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_login_driver.py +0 -0
  124. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_login_sb.py +0 -0
  125. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_main_call.py +0 -0
  126. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_mobile.py +0 -0
  127. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_multi_drivers.py +0 -0
  128. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_nopecha.py +0 -0
  129. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_order_tickets.py +0 -0
  130. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_parameter_script.py +0 -0
  131. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_performance_logs.py +0 -0
  132. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_pixelscan.py +0 -0
  133. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_pyautogui.py +0 -0
  134. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_recaptcha.py +0 -0
  135. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_robot.py +0 -0
  136. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_sb.py +0 -0
  137. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_test_scripts.py +0 -0
  138. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_turnstile.py +0 -0
  139. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/raw_uc_mode.py +0 -0
  140. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/sb_fixture_tests.py +0 -0
  141. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/shadow_root_test.py +0 -0
  142. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/swag_labs_user_tests.py +0 -0
  143. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_3d_apis.py +0 -0
  144. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_apple_site.py +0 -0
  145. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_assert_elements.py +0 -0
  146. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_calculator.py +0 -0
  147. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_canvas.py +0 -0
  148. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_cdp_ad_blocking.py +0 -0
  149. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_checkboxes.py +0 -0
  150. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_chinese_pdf.py +0 -0
  151. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_chromedriver.py +0 -0
  152. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_coffee_cart.py +0 -0
  153. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_console_logging.py +0 -0
  154. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_contains_selector.py +0 -0
  155. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_cycle_elements.py +0 -0
  156. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_decryption.py +0 -0
  157. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_deferred_asserts.py +0 -0
  158. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_demo_site.py +0 -0
  159. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_detect_404s.py +0 -0
  160. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_docs_site.py +0 -0
  161. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_double_click.py +0 -0
  162. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_download_files.py +0 -0
  163. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_download_images.py +0 -0
  164. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_drag_and_drop.py +0 -0
  165. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_error_page.py +0 -0
  166. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_event_firing.py +0 -0
  167. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_fail.py +0 -0
  168. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_geolocation.py +0 -0
  169. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_get_coffee.py +0 -0
  170. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_get_locale_code.py +0 -0
  171. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_get_pdf_text.py +0 -0
  172. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_get_user_agent.py +0 -0
  173. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_hack_search.py +0 -0
  174. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_highlight_elements.py +0 -0
  175. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_image_saving.py +0 -0
  176. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_inspect_html.py +0 -0
  177. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_login.py +0 -0
  178. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_markers.py +0 -0
  179. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_mfa_login.py +0 -0
  180. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_multiple_drivers.py +0 -0
  181. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_null.py +0 -0
  182. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_override_driver.py +0 -0
  183. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_override_sb_fixture.py +0 -0
  184. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_parse_soup.py +0 -0
  185. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_pdf_asserts.py +0 -0
  186. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_pytest_parametrize.py +0 -0
  187. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_repeat_tests.py +0 -0
  188. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_request_sb_fixture.py +0 -0
  189. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_save_screenshots.py +0 -0
  190. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_sb_fixture.py +0 -0
  191. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_scrape_bing.py +0 -0
  192. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_select_options.py +0 -0
  193. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_shadow_dom.py +0 -0
  194. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_show_file_choosers.py +0 -0
  195. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_simple_login.py +0 -0
  196. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_skype_site.py +0 -0
  197. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_suite.py +0 -0
  198. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_swag_labs.py +0 -0
  199. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_tinymce.py +0 -0
  200. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_todomvc.py +0 -0
  201. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_url_asserts.py +0 -0
  202. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_usefixtures.py +0 -0
  203. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_verify_chromedriver.py +0 -0
  204. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_window_switching.py +0 -0
  205. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_xfail.py +0 -0
  206. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/test_xkcd.py +0 -0
  207. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/time_limit_test.py +0 -0
  208. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/bootstrap_google_tour.py +0 -0
  209. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
  210. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/driverjs_maps_tour.py +0 -0
  211. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/google_tour.py +0 -0
  212. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/hopscotch_google_tour.py +0 -0
  213. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/introjs_google_tour.py +0 -0
  214. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/maps_introjs_tour.py +0 -0
  215. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/octocat_tour.py +0 -0
  216. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/recordings/__init__.py +0 -0
  217. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/recordings/shepherd_google_tour_rec.py +0 -0
  218. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/shepherd_google_tour.py +0 -0
  219. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/tour_examples/xkcd_tour.py +0 -0
  220. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/chinese_test_1.py +0 -0
  221. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/dutch_test_1.py +0 -0
  222. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/english_test_1.py +0 -0
  223. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/french_test_1.py +0 -0
  224. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/italian_test_1.py +0 -0
  225. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/japanese_test_1.py +0 -0
  226. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/korean_test_1.py +0 -0
  227. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/portuguese_test_1.py +0 -0
  228. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/russian_test_1.py +0 -0
  229. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/translations/spanish_test_1.py +0 -0
  230. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/uc_cdp_events.py +0 -0
  231. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/unit_tests/verify_framework.py +0 -0
  232. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/upgrade_chromedriver.py +0 -0
  233. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/upload_file_test.py +0 -0
  234. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/user_agent_test.py +0 -0
  235. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/verify_undetected.py +0 -0
  236. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/visual_testing/__init__.py +0 -0
  237. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/visual_testing/layout_test.py +0 -0
  238. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/visual_testing/python_home_test.py +0 -0
  239. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/visual_testing/test_layout_fail.py +0 -0
  240. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/visual_testing/xkcd_visual_test.py +0 -0
  241. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/wordle_test.py +0 -0
  242. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/xpath_test.py +0 -0
  243. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/examples/youtube_search_test.py +0 -0
  244. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/install.sh +0 -0
  245. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/__init__.py +0 -0
  246. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/behave/features/__init__.py +0 -0
  247. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/behave/features/environment.py +0 -0
  248. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/behave/features/steps/__init__.py +0 -0
  249. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/behave/features/steps/calculator.py +0 -0
  250. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/behave/features/steps/fail_page.py +0 -0
  251. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/behave/features/steps/real_world.py +0 -0
  252. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/behave/features/steps/swag_labs.py +0 -0
  253. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/brython/index.py +0 -0
  254. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/node_js/__init__.py +0 -0
  255. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/node_js/my_first_test.py +0 -0
  256. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/integrations/node_js/test_demo_site.py +0 -0
  257. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/mkdocs_build/prepare.py +0 -0
  258. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/pyproject.toml +0 -0
  259. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/pytest.ini +0 -0
  260. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/sbase/__init__.py +0 -0
  261. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/sbase/__main__.py +0 -0
  262. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/__init__.py +0 -0
  263. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/__main__.py +0 -0
  264. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/behave/__init__.py +0 -0
  265. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/behave/behave_helper.py +0 -0
  266. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/behave/behave_sb.py +0 -0
  267. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/behave/steps.py +0 -0
  268. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/common/__init__.py +0 -0
  269. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/common/encryption.py +0 -0
  270. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/common/exceptions.py +0 -0
  271. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/common/obfuscate.py +0 -0
  272. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/common/unobfuscate.py +0 -0
  273. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/config/__init__.py +0 -0
  274. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/config/ad_block_list.py +0 -0
  275. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/config/proxy_list.py +0 -0
  276. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/config/settings.py +0 -0
  277. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/__init__.py +0 -0
  278. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/logo_helper.py +0 -0
  279. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/rich_helper.py +0 -0
  280. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/run.py +0 -0
  281. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  282. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  283. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_commander.py +0 -0
  284. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_install.py +0 -0
  285. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  286. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  287. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  288. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  289. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  290. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/console_scripts/sb_print.py +0 -0
  291. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/__init__.py +0 -0
  292. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/application_manager.py +0 -0
  293. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/capabilities_parser.py +0 -0
  294. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/colored_traceback.py +0 -0
  295. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/create_db_tables.sql +0 -0
  296. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/detect_b_ver.py +0 -0
  297. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/download_helper.py +0 -0
  298. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/encoded_images.py +0 -0
  299. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/jqc_helper.py +0 -0
  300. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/log_helper.py +0 -0
  301. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/mysql.py +0 -0
  302. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/proxy_helper.py +0 -0
  303. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/recorder_helper.py +0 -0
  304. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/report_helper.py +0 -0
  305. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/s3_manager.py +0 -0
  306. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/sb_driver.py +0 -0
  307. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/session_helper.py +0 -0
  308. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/settings_parser.py +0 -0
  309. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/style_sheet.py +0 -0
  310. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/testcase_manager.py +0 -0
  311. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/tour_helper.py +0 -0
  312. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/core/visual_helper.py +0 -0
  313. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/drivers/__init__.py +0 -0
  314. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/extensions/__init__.py +0 -0
  315. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/extensions/ad_block.zip +0 -0
  316. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/extensions/disable_csp.zip +0 -0
  317. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/extensions/recorder.zip +0 -0
  318. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/extensions/sbase_ext.zip +0 -0
  319. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/__init__.py +0 -0
  320. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/constants.py +0 -0
  321. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  322. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/errors.py +0 -0
  323. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/js_utils.py +0 -0
  324. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/page_actions.py +0 -0
  325. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/page_utils.py +0 -0
  326. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/shared_utils.py +0 -0
  327. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/unittest_helper.py +0 -0
  328. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/words.py +0 -0
  329. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  330. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/js_code/__init__.py +0 -0
  331. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/js_code/active_css_js.py +0 -0
  332. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/js_code/live_js.py +0 -0
  333. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/js_code/recorder_js.py +0 -0
  334. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/masterqa/__init__.py +0 -0
  335. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/masterqa/master_qa.py +0 -0
  336. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/__init__.py +0 -0
  337. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/base_plugin.py +0 -0
  338. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/basic_test_info.py +0 -0
  339. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  340. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/driver_manager.py +0 -0
  341. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/page_source.py +0 -0
  342. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/pytest_plugin.py +0 -0
  343. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  344. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/sb_manager.py +0 -0
  345. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/screen_shots.py +0 -0
  346. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/plugins/selenium_plugin.py +0 -0
  347. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/resources/__init__.py +0 -0
  348. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/__init__.py +0 -0
  349. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/chinese.py +0 -0
  350. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/dutch.py +0 -0
  351. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/french.py +0 -0
  352. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/italian.py +0 -0
  353. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/japanese.py +0 -0
  354. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/korean.py +0 -0
  355. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/master_dict.py +0 -0
  356. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/portuguese.py +0 -0
  357. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/russian.py +0 -0
  358. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/spanish.py +0 -0
  359. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/translate/translator.py +0 -0
  360. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp.py +0 -0
  361. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  362. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  363. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  364. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  365. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  366. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  367. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  368. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/dprocess.py +0 -0
  369. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/options.py +0 -0
  370. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/patcher.py +0 -0
  371. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/reactor.py +0 -0
  372. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/undetected/webelement.py +0 -0
  373. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/__init__.py +0 -0
  374. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  375. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  376. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  377. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  378. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  379. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  380. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  381. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  382. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  383. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  384. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  385. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  386. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  387. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase.egg-info/SOURCES.txt +0 -0
  388. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase.egg-info/dependency_links.txt +0 -0
  389. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase.egg-info/entry_points.txt +0 -0
  390. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/seleniumbase.egg-info/top_level.txt +0 -0
  391. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/setup.cfg +0 -0
  392. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/site/prepare.py +0 -0
  393. {seleniumbase-4.32.11 → seleniumbase-4.32.12}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.32.11
3
+ Version: 4.32.12
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -59,7 +59,7 @@ Classifier: Topic :: Utilities
59
59
  Requires-Python: >=3.8
60
60
  Description-Content-Type: text/markdown
61
61
  License-File: LICENSE
62
- Requires-Dist: pip>=24.2
62
+ Requires-Dist: pip>=24.3.1
63
63
  Requires-Dist: packaging>=24.2
64
64
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
65
65
  Requires-Dist: setuptools>=75.5.0; python_version >= "3.10"
@@ -126,7 +126,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
126
126
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
127
127
  Provides-Extra: coverage
128
128
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
129
- Requires-Dist: coverage>=7.6.5; python_version >= "3.9" and extra == "coverage"
129
+ Requires-Dist: coverage>=7.6.7; python_version >= "3.9" and extra == "coverage"
130
130
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
131
131
  Requires-Dist: pytest-cov>=6.0.0; python_version >= "3.9" and extra == "coverage"
132
132
  Provides-Extra: flake8
@@ -1,4 +1,4 @@
1
- pip>=24.2
1
+ pip>=24.3.1
2
2
  packaging>=24.2
3
3
  setuptools~=70.2;python_version<"3.10"
4
4
  setuptools>=75.5.0;python_version>="3.10"
@@ -64,7 +64,7 @@ rich==13.9.4
64
64
  # ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
65
65
 
66
66
  coverage>=7.6.1;python_version<"3.9"
67
- coverage>=7.6.5;python_version>="3.9"
67
+ coverage>=7.6.7;python_version>="3.9"
68
68
  pytest-cov>=5.0.0;python_version<"3.9"
69
69
  pytest-cov>=6.0.0;python_version>="3.9"
70
70
  flake8==5.0.4;python_version<"3.9"
@@ -1189,3 +1189,10 @@ def set_attributes(context, selector, attribute, value):
1189
1189
  if attribute.endswith("'") or attribute.endswith('"'):
1190
1190
  attribute = attribute[:-1]
1191
1191
  sb.set_attributes(selector, attribute, value)
1192
+
1193
+
1194
+ @step("Activate CDP Mode")
1195
+ @step("User activates CDP Mode")
1196
+ def activate_cdp_mode(context):
1197
+ sb = context.sb
1198
+ sb.activate_cdp_mode()
@@ -0,0 +1,2 @@
1
+ # seleniumbase package
2
+ __version__ = "4.32.12"
@@ -1,11 +1,18 @@
1
+ import colorama
1
2
  import logging
2
3
  import math
4
+ import sys
3
5
  import time
4
6
  import warnings
5
7
  from contextlib import contextmanager
6
8
  from functools import wraps
7
9
  from seleniumbase.common.exceptions import TimeoutException
8
10
 
11
+ c1 = colorama.Fore.BLUE + colorama.Back.LIGHTYELLOW_EX
12
+ cr = colorama.Style.RESET_ALL
13
+ if "linux" in sys.platform:
14
+ c1 = cr = ""
15
+
9
16
 
10
17
  @contextmanager
11
18
  def print_runtime(description=None, limit=None):
@@ -44,19 +51,20 @@ def print_runtime(description=None, limit=None):
44
51
  end_time = time.time()
45
52
  run_time = end_time - start_time
46
53
  name = description
54
+ info = c1 + "<info>" + cr
47
55
  # Print times with a statistically significant number of decimal places
48
56
  if run_time < 0.0001:
49
- print("<info> - {%s} ran for %.7f seconds." % (name, run_time))
57
+ print("%s - {%s} ran for %.7f seconds." % (info, name, run_time))
50
58
  elif run_time < 0.001:
51
- print("<info> - {%s} ran for %.6f seconds." % (name, run_time))
59
+ print("%s - {%s} ran for %.6f seconds." % (info, name, run_time))
52
60
  elif run_time < 0.01:
53
- print("<info> - {%s} ran for %.5f seconds." % (name, run_time))
61
+ print("%s - {%s} ran for %.5f seconds." % (info, name, run_time))
54
62
  elif run_time < 0.1:
55
- print("<info> - {%s} ran for %.4f seconds." % (name, run_time))
63
+ print("%s - {%s} ran for %.4f seconds." % (info, name, run_time))
56
64
  elif run_time < 1:
57
- print("<info> - {%s} ran for %.3f seconds." % (name, run_time))
65
+ print("%s - {%s} ran for %.3f seconds." % (info, name, run_time))
58
66
  else:
59
- print("<info> - {%s} ran for %.2f seconds." % (name, run_time))
67
+ print("%s - {%s} ran for %.2f seconds." % (info, name, run_time))
60
68
  if limit and limit > 0 and run_time > limit:
61
69
  message = (
62
70
  "\n {%s} duration of %.2fs exceeded the time limit of %.2fs!"
@@ -144,7 +144,9 @@ def main():
144
144
  elif option.lower() in ("--gui", "--headed"):
145
145
  if "linux" in sys.platform:
146
146
  force_gui = True
147
- elif option.lower() in ("--uc", "--undetected", "--undetectable"):
147
+ elif option.lower() in (
148
+ "--uc", "--cdp", "--undetected", "--undetectable"
149
+ ):
148
150
  use_uc = True
149
151
  elif option.lower() in ("--rec-behave", "--behave", "--gherkin"):
150
152
  rec_behave = True
@@ -9,6 +9,7 @@ Usage:
9
9
 
10
10
  Options:
11
11
  --uc / --undetected (Use undetectable mode.)
12
+ --cdp (Same as "--uc" and "--undetectable".)
12
13
  --behave (Also output Behave/Gherkin files.)
13
14
 
14
15
  Output:
@@ -151,6 +152,7 @@ def do_recording(file_name, url, overwrite_enabled, use_chrome, window):
151
152
  command += " --edge"
152
153
  if (
153
154
  "--uc" in command_args
155
+ or "--cdp" in command_args
154
156
  or "--undetected" in command_args
155
157
  or "--undetectable" in command_args
156
158
  ):
@@ -193,6 +195,7 @@ def do_playback(file_name, use_chrome, window, demo_mode=False):
193
195
  command_args = sys.argv[2:]
194
196
  if (
195
197
  "--uc" in command_args
198
+ or "--cdp" in command_args
196
199
  or "--undetected" in command_args
197
200
  or "--undetectable" in command_args
198
201
  ):
@@ -683,12 +683,17 @@ def uc_open_with_cdp_mode(driver, url=None):
683
683
  cdp.is_checked = CDPM.is_checked
684
684
  cdp.is_element_present = CDPM.is_element_present
685
685
  cdp.is_element_visible = CDPM.is_element_visible
686
+ cdp.wait_for_element_visible = CDPM.wait_for_element_visible
687
+ cdp.assert_element = CDPM.assert_element
688
+ cdp.assert_element_visible = CDPM.assert_element_visible
686
689
  cdp.assert_element_present = CDPM.assert_element_present
687
690
  cdp.assert_element_absent = CDPM.assert_element_absent
688
- cdp.assert_element = CDPM.assert_element
689
- cdp.assert_element_visible = CDPM.assert_element
690
691
  cdp.assert_element_not_visible = CDPM.assert_element_not_visible
692
+ cdp.assert_element_attribute = CDPM.assert_element_attribute
691
693
  cdp.assert_title = CDPM.assert_title
694
+ cdp.assert_title_contains = CDPM.assert_title_contains
695
+ cdp.assert_url = CDPM.assert_url
696
+ cdp.assert_url_contains = CDPM.assert_url_contains
692
697
  cdp.assert_text = CDPM.assert_text
693
698
  cdp.assert_exact_text = CDPM.assert_exact_text
694
699
  cdp.scroll_into_view = CDPM.scroll_into_view
@@ -20,8 +20,16 @@ class CDPMethods():
20
20
  self.driver = driver
21
21
 
22
22
  def __slow_mode_pause_if_set(self):
23
- if hasattr(sb_config, "slow_mode") and sb_config.slow_mode:
24
- time.sleep(0.16)
23
+ if (
24
+ (hasattr(sb_config, "demo_mode") and sb_config.demo_mode)
25
+ or "--demo" in sys.argv
26
+ ):
27
+ time.sleep(0.48)
28
+ elif (
29
+ (hasattr(sb_config, "slow_mode") and sb_config.slow_mode)
30
+ or "--slow" in sys.argv
31
+ ):
32
+ time.sleep(0.24)
25
33
 
26
34
  def __add_light_pause(self):
27
35
  time.sleep(0.007)
@@ -543,7 +551,7 @@ class CDPMethods():
543
551
  if (width != 0 or height != 0):
544
552
  element.click()
545
553
  click_count += 1
546
- time.sleep(0.0375)
554
+ time.sleep(0.042)
547
555
  self.__slow_mode_pause_if_set()
548
556
  self.loop.run_until_complete(self.page.wait())
549
557
  except Exception:
@@ -660,10 +668,10 @@ class CDPMethods():
660
668
  text = text[:-1]
661
669
  for key in text:
662
670
  element.send_keys(key)
663
- time.sleep(0.0375)
671
+ time.sleep(0.042)
664
672
  if submit:
665
673
  element.send_keys("\r\n")
666
- time.sleep(0.0375)
674
+ time.sleep(0.042)
667
675
  self.__slow_mode_pause_if_set()
668
676
  self.loop.run_until_complete(self.page.wait())
669
677
 
@@ -733,7 +741,7 @@ class CDPMethods():
733
741
  return
734
742
  elif self.get_window()[1].window_state.value == "minimized":
735
743
  self.loop.run_until_complete(self.page.maximize())
736
- time.sleep(0.0375)
744
+ time.sleep(0.042)
737
745
  return self.loop.run_until_complete(self.page.maximize())
738
746
 
739
747
  def minimize(self):
@@ -743,7 +751,7 @@ class CDPMethods():
743
751
  def medimize(self):
744
752
  if self.get_window()[1].window_state.value == "minimized":
745
753
  self.loop.run_until_complete(self.page.medimize())
746
- time.sleep(0.0375)
754
+ time.sleep(0.042)
747
755
  return self.loop.run_until_complete(self.page.medimize())
748
756
 
749
757
  def set_window_rect(self, x, y, width, height):
@@ -752,7 +760,7 @@ class CDPMethods():
752
760
  self.page.set_window_size(
753
761
  left=x, top=y, width=width, height=height)
754
762
  )
755
- time.sleep(0.0375)
763
+ time.sleep(0.042)
756
764
  return self.loop.run_until_complete(
757
765
  self.page.set_window_size(
758
766
  left=x, top=y, width=width, height=height)
@@ -1117,7 +1125,7 @@ class CDPMethods():
1117
1125
  )
1118
1126
  with gui_lock:
1119
1127
  pyautogui.press(key)
1120
- time.sleep(0.0375)
1128
+ time.sleep(0.042)
1121
1129
  self.__slow_mode_pause_if_set()
1122
1130
  self.loop.run_until_complete(self.page.wait())
1123
1131
 
@@ -1131,7 +1139,7 @@ class CDPMethods():
1131
1139
  with gui_lock:
1132
1140
  for key in keys:
1133
1141
  pyautogui.press(key)
1134
- time.sleep(0.0375)
1142
+ time.sleep(0.042)
1135
1143
  self.__slow_mode_pause_if_set()
1136
1144
  self.loop.run_until_complete(self.page.wait())
1137
1145
 
@@ -1472,25 +1480,53 @@ class CDPMethods():
1472
1480
  return True
1473
1481
  return False
1474
1482
 
1483
+ def wait_for_element_visible(
1484
+ self, selector, timeout=settings.SMALL_TIMEOUT
1485
+ ):
1486
+ try:
1487
+ self.select(selector, timeout=timeout)
1488
+ except Exception:
1489
+ raise Exception("Element {%s} was not found!" % selector)
1490
+ for i in range(30):
1491
+ if self.is_element_visible(selector):
1492
+ return self.select(selector)
1493
+ time.sleep(0.1)
1494
+ raise Exception("Element {%s} was not visible!" % selector)
1495
+
1475
1496
  def assert_element(self, selector, timeout=settings.SMALL_TIMEOUT):
1497
+ """Same as assert_element_visible()"""
1476
1498
  try:
1477
1499
  self.select(selector, timeout=timeout)
1478
1500
  except Exception:
1479
- raise Exception("Element {%s} not found!" % selector)
1501
+ raise Exception("Element {%s} was not found!" % selector)
1480
1502
  for i in range(30):
1481
1503
  if self.is_element_visible(selector):
1482
1504
  return True
1483
1505
  time.sleep(0.1)
1484
- raise Exception("Element {%s} not visible!" % selector)
1506
+ raise Exception("Element {%s} was not visible!" % selector)
1507
+
1508
+ def assert_element_visible(self, selector, timeout=settings.SMALL_TIMEOUT):
1509
+ """Same as assert_element()"""
1510
+ try:
1511
+ self.select(selector, timeout=timeout)
1512
+ except Exception:
1513
+ raise Exception("Element {%s} was not found!" % selector)
1514
+ for i in range(30):
1515
+ if self.is_element_visible(selector):
1516
+ return True
1517
+ time.sleep(0.1)
1518
+ raise Exception("Element {%s} was not visible!" % selector)
1485
1519
 
1486
1520
  def assert_element_present(self, selector, timeout=settings.SMALL_TIMEOUT):
1521
+ """Assert element is present in the DOM. (Visibility NOT required)"""
1487
1522
  try:
1488
1523
  self.select(selector, timeout=timeout)
1489
1524
  except Exception:
1490
- raise Exception("Element {%s} not found!" % selector)
1525
+ raise Exception("Element {%s} was not found!" % selector)
1491
1526
  return True
1492
1527
 
1493
1528
  def assert_element_absent(self, selector, timeout=settings.SMALL_TIMEOUT):
1529
+ """Assert element is not present in the DOM."""
1494
1530
  start_ms = time.time() * 1000.0
1495
1531
  stop_ms = start_ms + (timeout * 1000.0)
1496
1532
  for i in range(int(timeout * 10)):
@@ -1511,6 +1547,7 @@ class CDPMethods():
1511
1547
  def assert_element_not_visible(
1512
1548
  self, selector, timeout=settings.SMALL_TIMEOUT
1513
1549
  ):
1550
+ """Assert element is not visible on page. (May still be in DOM)"""
1514
1551
  start_ms = time.time() * 1000.0
1515
1552
  stop_ms = start_ms + (timeout * 1000.0)
1516
1553
  for i in range(int(timeout * 10)):
@@ -1530,6 +1567,21 @@ class CDPMethods():
1530
1567
  % (selector, timeout, plural)
1531
1568
  )
1532
1569
 
1570
+ def assert_element_attribute(self, selector, attribute, value=None):
1571
+ attributes = self.get_element_attributes(selector)
1572
+ if attribute not in attributes:
1573
+ raise Exception(
1574
+ "Attribute {%s} was not found in element {%s}!"
1575
+ % (attribute, selector)
1576
+ )
1577
+ if value and attributes[attribute] != value:
1578
+ raise Exception(
1579
+ "Expected value {%s} of attribute {%s} "
1580
+ "was not found in element {%s}! "
1581
+ "(Actual value was {%s})"
1582
+ % (value, attribute, selector, attributes[attribute])
1583
+ )
1584
+
1533
1585
  def assert_title(self, title):
1534
1586
  expected = title.strip()
1535
1587
  actual = self.get_title().strip()
@@ -1541,11 +1593,55 @@ class CDPMethods():
1541
1593
  raise Exception(error % (expected, actual))
1542
1594
  except Exception:
1543
1595
  time.sleep(2)
1544
- expected = title.strip()
1545
1596
  actual = self.get_title().strip()
1546
1597
  if expected != actual:
1547
1598
  raise Exception(error % (expected, actual))
1548
1599
 
1600
+ def assert_title_contains(self, substring):
1601
+ expected = substring.strip()
1602
+ actual = self.get_title().strip()
1603
+ error = (
1604
+ "Expected title substring [%s] does not appear "
1605
+ "in the actual page title [%s]!"
1606
+ )
1607
+ try:
1608
+ if expected not in actual:
1609
+ raise Exception(error % (expected, actual))
1610
+ except Exception:
1611
+ time.sleep(2)
1612
+ actual = self.get_title().strip()
1613
+ if expected not in actual:
1614
+ raise Exception(error % (expected, actual))
1615
+
1616
+ def assert_url(self, url):
1617
+ expected = url.strip()
1618
+ actual = self.get_current_url().strip()
1619
+ error = "Expected URL [%s] does not match the actual URL [%s]!"
1620
+ try:
1621
+ if expected != actual:
1622
+ raise Exception(error % (expected, actual))
1623
+ except Exception:
1624
+ time.sleep(2)
1625
+ actual = self.get_current_url().strip()
1626
+ if expected != actual:
1627
+ raise Exception(error % (expected, actual))
1628
+
1629
+ def assert_url_contains(self, substring):
1630
+ expected = substring.strip()
1631
+ actual = self.get_current_url().strip()
1632
+ error = (
1633
+ "Expected URL substring [%s] does not appear "
1634
+ "in the full URL [%s]!"
1635
+ )
1636
+ try:
1637
+ if expected not in actual:
1638
+ raise Exception(error % (expected, actual))
1639
+ except Exception:
1640
+ time.sleep(2)
1641
+ actual = self.get_current_url().strip()
1642
+ if expected not in actual:
1643
+ raise Exception(error % (expected, actual))
1644
+
1549
1645
  def assert_text(
1550
1646
  self, text, selector="html", timeout=settings.SMALL_TIMEOUT
1551
1647
  ):
@@ -1310,9 +1310,13 @@ class BaseCase(unittest.TestCase):
1310
1310
  return self.get_page_title()
1311
1311
 
1312
1312
  def get_user_agent(self):
1313
+ if self.__is_cdp_swap_needed():
1314
+ return self.cdp.get_user_agent()
1313
1315
  return self.execute_script("return navigator.userAgent;")
1314
1316
 
1315
1317
  def get_locale_code(self):
1318
+ if self.__is_cdp_swap_needed():
1319
+ return self.cdp.get_locale_code()
1316
1320
  return self.execute_script(
1317
1321
  "return navigator.language || navigator.languages[0];"
1318
1322
  )
@@ -4547,6 +4551,11 @@ class BaseCase(unittest.TestCase):
4547
4551
  def get_cookies(self):
4548
4552
  return self.driver.get_cookies()
4549
4553
 
4554
+ def get_cookie_string(self):
4555
+ if self.__is_cdp_swap_needed():
4556
+ return self.cdp.get_cookie_string()
4557
+ return self.execute_script("return document.cookie;")
4558
+
4550
4559
  def add_cookie(self, cookie_dict, expiry=False):
4551
4560
  """Usage examples:
4552
4561
  self.add_cookie({'name': 'foo', 'value': 'bar'})
@@ -5429,7 +5438,10 @@ class BaseCase(unittest.TestCase):
5429
5438
  new_file = True
5430
5439
  sb_config._recorded_actions[filename] = []
5431
5440
  data.append("from seleniumbase import BaseCase")
5432
- data.append("BaseCase.main(__name__, __file__)")
5441
+ if "--uc" in sys.argv:
5442
+ data.append('BaseCase.main(__name__, __file__, "--uc")')
5443
+ else:
5444
+ data.append("BaseCase.main(__name__, __file__)")
5433
5445
  data.append("")
5434
5446
  data.append("")
5435
5447
  data.append("class %s(BaseCase):" % classname)
@@ -5439,7 +5451,13 @@ class BaseCase(unittest.TestCase):
5439
5451
  data.append("class %s(BaseCase):" % classname)
5440
5452
  data.append(" def %s(self):" % methodname)
5441
5453
  if len(sb_actions) > 0:
5454
+ if "--uc" in sys.argv:
5455
+ data.append(" self.activate_cdp_mode()")
5442
5456
  for action in sb_actions:
5457
+ if "--uc" in sys.argv:
5458
+ action = action.replace(
5459
+ "self.type(", "self.press_keys("
5460
+ )
5443
5461
  data.append(" " + action)
5444
5462
  else:
5445
5463
  data.append(" pass")
@@ -5617,6 +5635,9 @@ class BaseCase(unittest.TestCase):
5617
5635
  data.append(" Scenario: %s" % scenario_test)
5618
5636
  if len(behave_actions) > 0:
5619
5637
  count = 0
5638
+ if "--uc" in sys.argv:
5639
+ data.append(" Given Activate CDP Mode")
5640
+ count += 1
5620
5641
  for action in behave_actions:
5621
5642
  if count == 0:
5622
5643
  data.append(" Given " + action)
@@ -7645,7 +7666,10 @@ class BaseCase(unittest.TestCase):
7645
7666
  if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
7646
7667
  timeout = self.__get_new_timeout(timeout)
7647
7668
  selector, by = self.__recalculate_selector(selector, by)
7648
- if self.__is_shadow_selector(selector):
7669
+ if self.__is_cdp_swap_needed():
7670
+ self.cdp.assert_element_attribute(selector, attribute, value)
7671
+ return
7672
+ elif self.__is_shadow_selector(selector):
7649
7673
  return self.__wait_for_shadow_attribute_present(
7650
7674
  selector, attribute, value=value, timeout=timeout
7651
7675
  )
@@ -7670,6 +7694,9 @@ class BaseCase(unittest.TestCase):
7670
7694
  if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
7671
7695
  timeout = self.__get_new_timeout(timeout)
7672
7696
  selector, by = self.__recalculate_selector(selector, by)
7697
+ if self.__is_cdp_swap_needed():
7698
+ self.cdp.assert_element_attribute(selector, attribute, value)
7699
+ return
7673
7700
  self.wait_for_attribute(
7674
7701
  selector, attribute, value=value, by=by, timeout=timeout
7675
7702
  )
@@ -7768,6 +7795,9 @@ class BaseCase(unittest.TestCase):
7768
7795
  but then the title switches over to the actual page title.
7769
7796
  In Recorder Mode, this assertion is skipped because the Recorder
7770
7797
  changes the page title to the selector of the hovered element."""
7798
+ if self.__is_cdp_swap_needed():
7799
+ self.cdp.assert_title_contains(substring)
7800
+ return
7771
7801
  self.wait_for_ready_state_complete()
7772
7802
  expected = substring.strip()
7773
7803
  actual = self.get_page_title().strip()
@@ -7811,6 +7841,9 @@ class BaseCase(unittest.TestCase):
7811
7841
 
7812
7842
  def assert_url(self, url):
7813
7843
  """Asserts that the web page URL matches the expected URL."""
7844
+ if self.__is_cdp_swap_needed():
7845
+ self.cdp.assert_url(url)
7846
+ return
7814
7847
  self.wait_for_ready_state_complete()
7815
7848
  expected = url.strip()
7816
7849
  actual = self.get_current_url().strip()
@@ -7846,6 +7879,9 @@ class BaseCase(unittest.TestCase):
7846
7879
 
7847
7880
  def assert_url_contains(self, substring):
7848
7881
  """Asserts that the URL substring appears in the full URL."""
7882
+ if self.__is_cdp_swap_needed():
7883
+ self.cdp.assert_url_contains(substring)
7884
+ return
7849
7885
  self.wait_for_ready_state_complete()
7850
7886
  expected = substring.strip()
7851
7887
  actual = self.get_current_url().strip()
@@ -8044,6 +8080,8 @@ class BaseCase(unittest.TestCase):
8044
8080
 
8045
8081
  def is_online(self):
8046
8082
  """Return True if connected to the Internet."""
8083
+ if self.__is_cdp_swap_needed():
8084
+ return self.cdp.evaluate("navigator.onLine;")
8047
8085
  return self.execute_script("return navigator.onLine;")
8048
8086
 
8049
8087
  def is_connected(self):
@@ -8952,7 +8990,9 @@ class BaseCase(unittest.TestCase):
8952
8990
  timeout = self.__get_new_timeout(timeout)
8953
8991
  original_selector = selector
8954
8992
  selector, by = self.__recalculate_selector(selector, by)
8955
- if self.__is_shadow_selector(selector):
8993
+ if self.__is_cdp_swap_needed():
8994
+ return self.cdp.select(selector)
8995
+ elif self.__is_shadow_selector(selector):
8956
8996
  # If a shadow selector, use visible instead of clickable
8957
8997
  return self.__wait_for_shadow_element_visible(selector, timeout)
8958
8998
  return page_actions.wait_for_element_clickable(
@@ -9353,7 +9393,7 @@ class BaseCase(unittest.TestCase):
9353
9393
  selector, by = self.__recalculate_selector(selector, by)
9354
9394
  if self.__is_cdp_swap_needed():
9355
9395
  return self.cdp.select(selector)
9356
- if self.__is_shadow_selector(selector):
9396
+ elif self.__is_shadow_selector(selector):
9357
9397
  return self.__wait_for_shadow_element_present(selector, timeout)
9358
9398
  return page_actions.wait_for_element_present(
9359
9399
  self.driver,
@@ -9416,6 +9456,8 @@ class BaseCase(unittest.TestCase):
9416
9456
  if self.timeout_multiplier and timeout == settings.LARGE_TIMEOUT:
9417
9457
  timeout = self.__get_new_timeout(timeout)
9418
9458
  css_selector = self.convert_to_css_selector(selector, by=by)
9459
+ if self.__is_cdp_swap_needed():
9460
+ return self.cdp.select(css_selector)
9419
9461
  return js_utils.wait_for_css_query_selector(
9420
9462
  self.driver, css_selector, timeout
9421
9463
  )
@@ -9637,7 +9679,7 @@ class BaseCase(unittest.TestCase):
9637
9679
  selector, by = self.__recalculate_selector(selector, by)
9638
9680
  if self.__is_cdp_swap_needed():
9639
9681
  return self.cdp.find_element(selector)
9640
- if self.__is_shadow_selector(selector):
9682
+ elif self.__is_shadow_selector(selector):
9641
9683
  return self.__wait_for_shadow_text_visible(text, selector, timeout)
9642
9684
  return page_actions.wait_for_text_visible(
9643
9685
  self.driver, text, selector, by, timeout
@@ -10160,6 +10202,9 @@ class BaseCase(unittest.TestCase):
10160
10202
  timeout = settings.SMALL_TIMEOUT
10161
10203
  if self.timeout_multiplier and timeout == settings.SMALL_TIMEOUT:
10162
10204
  timeout = self.__get_new_timeout(timeout)
10205
+ if self.__is_cdp_swap_needed():
10206
+ self.cdp.assert_element_not_visible(selector)
10207
+ return True
10163
10208
  self.wait_for_element_not_visible(selector, by=by, timeout=timeout)
10164
10209
  if self.recorder_mode and self.__current_url_is_recordable():
10165
10210
  if self.get_session_storage_item("pause_recorder") == "no":
@@ -14496,7 +14541,7 @@ class BaseCase(unittest.TestCase):
14496
14541
  message = (
14497
14542
  "Expected value {%s} for attribute {%s} of element "
14498
14543
  "{%s} was not present after %s second%s! "
14499
- "(The actual value was {%s})"
14544
+ "(Actual value was {%s})"
14500
14545
  % (
14501
14546
  value,
14502
14547
  attribute,
@@ -455,7 +455,7 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
455
455
  if self.service.is_connectable():
456
456
  self.stop_client()
457
457
  self.service.stop()
458
- self._is_connected = False
458
+ self._is_connected = False
459
459
 
460
460
  def connect(self):
461
461
  """Starts the chromedriver service that runs in the background
@@ -211,7 +211,11 @@ async def start(
211
211
  expert=expert,
212
212
  **kwargs,
213
213
  )
214
- return await Browser.create(config)
214
+ try:
215
+ return await Browser.create(config)
216
+ except Exception:
217
+ time.sleep(0.15)
218
+ return await Browser.create(config)
215
219
 
216
220
 
217
221
  async def start_async(*args, **kwargs) -> Browser:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.32.11
3
+ Version: 4.32.12
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -59,7 +59,7 @@ Classifier: Topic :: Utilities
59
59
  Requires-Python: >=3.8
60
60
  Description-Content-Type: text/markdown
61
61
  License-File: LICENSE
62
- Requires-Dist: pip>=24.2
62
+ Requires-Dist: pip>=24.3.1
63
63
  Requires-Dist: packaging>=24.2
64
64
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
65
65
  Requires-Dist: setuptools>=75.5.0; python_version >= "3.10"
@@ -126,7 +126,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
126
126
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
127
127
  Provides-Extra: coverage
128
128
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
129
- Requires-Dist: coverage>=7.6.5; python_version >= "3.9" and extra == "coverage"
129
+ Requires-Dist: coverage>=7.6.7; python_version >= "3.9" and extra == "coverage"
130
130
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
131
131
  Requires-Dist: pytest-cov>=6.0.0; python_version >= "3.9" and extra == "coverage"
132
132
  Provides-Extra: flake8
@@ -1,4 +1,4 @@
1
- pip>=24.2
1
+ pip>=24.3.1
2
2
  packaging>=24.2
3
3
  wheel>=0.45.0
4
4
  attrs>=24.2.0
@@ -84,7 +84,7 @@ coverage>=7.6.1
84
84
  pytest-cov>=5.0.0
85
85
 
86
86
  [coverage:python_version >= "3.9"]
87
- coverage>=7.6.5
87
+ coverage>=7.6.7
88
88
  pytest-cov>=6.0.0
89
89
 
90
90
  [flake8]
@@ -147,7 +147,7 @@ setup(
147
147
  ],
148
148
  python_requires=">=3.8",
149
149
  install_requires=[
150
- 'pip>=24.2',
150
+ 'pip>=24.3.1',
151
151
  'packaging>=24.2',
152
152
  'setuptools~=70.2;python_version<"3.10"', # Newer ones had issues
153
153
  'setuptools>=75.5.0;python_version>="3.10"',
@@ -222,7 +222,7 @@ setup(
222
222
  # Usage: coverage run -m pytest; coverage html; coverage report
223
223
  "coverage": [
224
224
  'coverage>=7.6.1;python_version<"3.9"',
225
- 'coverage>=7.6.5;python_version>="3.9"',
225
+ 'coverage>=7.6.7;python_version>="3.9"',
226
226
  'pytest-cov>=5.0.0;python_version<"3.9"',
227
227
  'pytest-cov>=6.0.0;python_version>="3.9"',
228
228
  ],
@@ -1,2 +0,0 @@
1
- # seleniumbase package
2
- __version__ = "4.32.11"