seleniumbase 4.34.0__tar.gz → 4.34.2__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/.gitignore +14 -0
  2. {seleniumbase-4.34.0/seleniumbase.egg-info → seleniumbase-4.34.2}/PKG-INFO +2 -2
  3. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/proxy_test.py +17 -5
  4. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_pixelscan.py +5 -3
  5. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_cdp_ad_blocking.py +1 -0
  6. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/youtube_search_test.py +1 -1
  7. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/requirements.txt +1 -1
  8. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/__version__.py +1 -1
  9. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/behave/behave_sb.py +10 -2
  10. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/run.py +6 -2
  11. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_install.py +235 -6
  12. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/browser_launcher.py +146 -1
  13. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/sb_cdp.py +1 -1
  14. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/base_case.py +10 -5
  15. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/constants.py +3 -0
  16. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/driver_manager.py +28 -0
  17. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/pytest_plugin.py +9 -0
  18. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/sb_manager.py +28 -0
  19. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/selenium_plugin.py +9 -0
  20. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/patcher.py +16 -1
  21. {seleniumbase-4.34.0 → seleniumbase-4.34.2/seleniumbase.egg-info}/PKG-INFO +2 -2
  22. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase.egg-info/requires.txt +1 -1
  23. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/setup.py +1 -1
  24. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/LICENSE +0 -0
  25. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/MANIFEST.in +0 -0
  26. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/README.md +0 -0
  27. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/__init__.py +0 -0
  28. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/basic_test.py +0 -0
  29. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/__init__.py +0 -0
  30. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/features/__init__.py +0 -0
  31. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/features/environment.py +0 -0
  32. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/features/steps/__init__.py +0 -0
  33. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/features/steps/calculator.py +0 -0
  34. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/features/steps/fail_page.py +0 -0
  35. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/features/steps/imported.py +0 -0
  36. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/behave_bdd/features/steps/swag_labs.py +0 -0
  37. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/__init__.py +0 -0
  38. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/base_test_case.py +0 -0
  39. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/boilerplate_test.py +0 -0
  40. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/classic_obj_test.py +0 -0
  41. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/page_objects.py +0 -0
  42. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/__init__.py +0 -0
  43. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/file_parsing/__init__.py +0 -0
  44. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/file_parsing/parse_files.py +0 -0
  45. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/google_objects.py +0 -0
  46. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/google_test.py +0 -0
  47. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/sb_swag_test.py +0 -0
  48. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/swag_labs_test.py +0 -0
  49. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/samples/test_page_objects.py +0 -0
  50. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/boilerplates/sb_fixture_test.py +0 -0
  51. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/capabilities/mac_cap_file.py +0 -0
  52. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/capabilities/sample_cap_file_BS.py +0 -0
  53. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/capabilities/sample_cap_file_SL.py +0 -0
  54. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/capabilities/selenoid_cap_file.py +0 -0
  55. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/capabilities/win10_cap_file.py +0 -0
  56. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/chart_presentation.py +0 -0
  57. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/my_chart.py +0 -0
  58. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/pie_charts.py +0 -0
  59. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/test_area_chart.py +0 -0
  60. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/test_display_chart.py +0 -0
  61. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/test_line_chart.py +0 -0
  62. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/test_multi_series.py +0 -0
  63. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/chart_maker/test_save_chart.py +0 -0
  64. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/coffee_cart_tests.py +0 -0
  65. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/custom_settings.py +0 -0
  66. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/desktop_apps/recorder.py +0 -0
  67. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/dialog_boxes/dialog_box_tour.py +0 -0
  68. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/edge_test.py +0 -0
  69. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/github_test.py +0 -0
  70. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/gui_test_runner.py +0 -0
  71. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/hack_the_planet.py +0 -0
  72. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/handle_alert_test.py +0 -0
  73. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/iframe_tests.py +0 -0
  74. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/locale_code_test.py +0 -0
  75. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/master_qa/__init__.py +0 -0
  76. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/master_qa/basic_masterqa_test_0.py +0 -0
  77. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/master_qa/masterqa_test_1.py +0 -0
  78. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/__init__.py +0 -0
  79. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/protractor/__init__.py +0 -0
  80. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/protractor/example_test.py +0 -0
  81. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/protractor/input_test.py +0 -0
  82. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/protractor/mat_paginator_test.py +0 -0
  83. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/raw_selenium/__init__.py +0 -0
  84. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/raw_selenium/flaky_messy_raw.py +0 -0
  85. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/raw_selenium/long_messy_raw.py +0 -0
  86. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/raw_selenium/messy_raw.py +0 -0
  87. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/raw_selenium/refined_raw.py +0 -0
  88. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/migration/raw_selenium/simple_sbase.py +0 -0
  89. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/my_first_test.py +0 -0
  90. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/nth_child_test.py +0 -0
  91. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/offline_examples/__init__.py +0 -0
  92. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/offline_examples/load_html_test.py +0 -0
  93. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/offline_examples/test_demo_page.py +0 -0
  94. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/offline_examples/test_extended_driver.py +0 -0
  95. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/offline_examples/test_handle_alerts.py +0 -0
  96. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/offline_examples/test_request_fixture.py +0 -0
  97. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/offline_examples/test_user_agent.py +0 -0
  98. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/old_wordle_script.py +0 -0
  99. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/parameterized_test.py +0 -0
  100. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/performance_test.py +0 -0
  101. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/core_presentation.py +0 -0
  102. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/edge_presentation.py +0 -0
  103. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/fundamentals.py +0 -0
  104. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/multi_uc.py +0 -0
  105. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/my_presentation.py +0 -0
  106. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/py_virtual_envs.py +0 -0
  107. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/uc_presentation.py +0 -0
  108. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/presenter/uc_presentation_3.py +0 -0
  109. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/rate_limiting_test.py +0 -0
  110. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_ahrefs.py +0 -0
  111. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_antibot_login.py +0 -0
  112. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_bing_captcha.py +0 -0
  113. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_block.py +0 -0
  114. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_brotector_captcha.py +0 -0
  115. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_call.py +0 -0
  116. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_cdp_logging.py +0 -0
  117. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_cf.py +0 -0
  118. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_cookies.py +0 -0
  119. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_detection.py +0 -0
  120. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_driver_context.py +0 -0
  121. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_driver_manager.py +0 -0
  122. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_file_call.py +0 -0
  123. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_form_turnstile.py +0 -0
  124. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_games.py +0 -0
  125. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_gui_click.py +0 -0
  126. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_hobbit.py +0 -0
  127. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_login_context.py +0 -0
  128. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_login_driver.py +0 -0
  129. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_login_sb.py +0 -0
  130. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_main_call.py +0 -0
  131. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_mobile.py +0 -0
  132. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_multi_drivers.py +0 -0
  133. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_nopecha.py +0 -0
  134. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_order_tickets.py +0 -0
  135. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_parameter_script.py +0 -0
  136. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_performance_logs.py +0 -0
  137. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_pyautogui.py +0 -0
  138. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_recaptcha.py +0 -0
  139. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_robot.py +0 -0
  140. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_sb.py +0 -0
  141. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_test_scripts.py +0 -0
  142. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_turnstile.py +0 -0
  143. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/raw_uc_mode.py +0 -0
  144. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/sb_fixture_tests.py +0 -0
  145. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/shadow_root_test.py +0 -0
  146. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/swag_labs_user_tests.py +0 -0
  147. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_3d_apis.py +0 -0
  148. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_apple_site.py +0 -0
  149. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_assert_elements.py +0 -0
  150. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_calculator.py +0 -0
  151. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_canvas.py +0 -0
  152. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_checkboxes.py +0 -0
  153. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_chinese_pdf.py +0 -0
  154. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_chromedriver.py +0 -0
  155. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_coffee_cart.py +0 -0
  156. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_console_logging.py +0 -0
  157. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_contains_selector.py +0 -0
  158. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_cycle_elements.py +0 -0
  159. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_decryption.py +0 -0
  160. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_deferred_asserts.py +0 -0
  161. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_demo_site.py +0 -0
  162. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_detect_404s.py +0 -0
  163. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_docs_site.py +0 -0
  164. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_double_click.py +0 -0
  165. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_download_files.py +0 -0
  166. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_download_images.py +0 -0
  167. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_drag_and_drop.py +0 -0
  168. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_error_page.py +0 -0
  169. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_event_firing.py +0 -0
  170. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_fail.py +0 -0
  171. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_geolocation.py +0 -0
  172. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_get_coffee.py +0 -0
  173. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_get_locale_code.py +0 -0
  174. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_get_pdf_text.py +0 -0
  175. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_get_user_agent.py +0 -0
  176. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_hack_search.py +0 -0
  177. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_highlight_elements.py +0 -0
  178. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_image_saving.py +0 -0
  179. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_inspect_html.py +0 -0
  180. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_login.py +0 -0
  181. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_markers.py +0 -0
  182. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_mfa_login.py +0 -0
  183. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_multiple_drivers.py +0 -0
  184. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_null.py +0 -0
  185. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_override_driver.py +0 -0
  186. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_override_sb_fixture.py +0 -0
  187. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_parse_soup.py +0 -0
  188. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_pdf_asserts.py +0 -0
  189. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_pytest_parametrize.py +0 -0
  190. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_repeat_tests.py +0 -0
  191. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_request_sb_fixture.py +0 -0
  192. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_save_screenshots.py +0 -0
  193. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_sb_fixture.py +0 -0
  194. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_scrape_bing.py +0 -0
  195. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_select_options.py +0 -0
  196. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_shadow_dom.py +0 -0
  197. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_show_file_choosers.py +0 -0
  198. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_simple_login.py +0 -0
  199. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_skype_site.py +0 -0
  200. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_suite.py +0 -0
  201. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_swag_labs.py +0 -0
  202. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_tinymce.py +0 -0
  203. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_todomvc.py +0 -0
  204. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_url_asserts.py +0 -0
  205. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_usefixtures.py +0 -0
  206. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_verify_chromedriver.py +0 -0
  207. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_window_switching.py +0 -0
  208. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_xfail.py +0 -0
  209. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/test_xkcd.py +0 -0
  210. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/time_limit_test.py +0 -0
  211. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/bootstrap_google_tour.py +0 -0
  212. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/bootstrap_xkcd_tour.py +0 -0
  213. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/driverjs_maps_tour.py +0 -0
  214. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/google_tour.py +0 -0
  215. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/hopscotch_google_tour.py +0 -0
  216. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/introjs_google_tour.py +0 -0
  217. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/maps_introjs_tour.py +0 -0
  218. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/octocat_tour.py +0 -0
  219. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/recordings/__init__.py +0 -0
  220. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/recordings/shepherd_google_tour_rec.py +0 -0
  221. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/shepherd_google_tour.py +0 -0
  222. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/tour_examples/xkcd_tour.py +0 -0
  223. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/chinese_test_1.py +0 -0
  224. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/dutch_test_1.py +0 -0
  225. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/english_test_1.py +0 -0
  226. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/french_test_1.py +0 -0
  227. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/italian_test_1.py +0 -0
  228. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/japanese_test_1.py +0 -0
  229. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/korean_test_1.py +0 -0
  230. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/portuguese_test_1.py +0 -0
  231. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/russian_test_1.py +0 -0
  232. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/translations/spanish_test_1.py +0 -0
  233. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/uc_cdp_events.py +0 -0
  234. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/unit_tests/verify_framework.py +0 -0
  235. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/upgrade_chromedriver.py +0 -0
  236. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/upload_file_test.py +0 -0
  237. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/user_agent_test.py +0 -0
  238. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/verify_undetected.py +0 -0
  239. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/visual_testing/__init__.py +0 -0
  240. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/visual_testing/layout_test.py +0 -0
  241. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/visual_testing/python_home_test.py +0 -0
  242. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/visual_testing/test_layout_fail.py +0 -0
  243. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/visual_testing/xkcd_visual_test.py +0 -0
  244. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/wordle_test.py +0 -0
  245. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/examples/xpath_test.py +0 -0
  246. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/install.sh +0 -0
  247. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/__init__.py +0 -0
  248. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/behave/features/__init__.py +0 -0
  249. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/behave/features/environment.py +0 -0
  250. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/behave/features/steps/__init__.py +0 -0
  251. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/behave/features/steps/calculator.py +0 -0
  252. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/behave/features/steps/fail_page.py +0 -0
  253. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/behave/features/steps/real_world.py +0 -0
  254. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/behave/features/steps/swag_labs.py +0 -0
  255. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/brython/index.py +0 -0
  256. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/node_js/__init__.py +0 -0
  257. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/node_js/my_first_test.py +0 -0
  258. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/integrations/node_js/test_demo_site.py +0 -0
  259. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/mkdocs_build/prepare.py +0 -0
  260. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/pyproject.toml +0 -0
  261. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/pytest.ini +0 -0
  262. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/sbase/__init__.py +0 -0
  263. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/sbase/__main__.py +0 -0
  264. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/sbase/steps.py +0 -0
  265. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/__init__.py +0 -0
  266. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/__main__.py +0 -0
  267. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/behave/__init__.py +0 -0
  268. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/behave/behave_helper.py +0 -0
  269. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/behave/steps.py +0 -0
  270. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/common/__init__.py +0 -0
  271. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/common/decorators.py +0 -0
  272. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/common/encryption.py +0 -0
  273. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/common/exceptions.py +0 -0
  274. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/common/obfuscate.py +0 -0
  275. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/common/unobfuscate.py +0 -0
  276. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/config/__init__.py +0 -0
  277. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/config/ad_block_list.py +0 -0
  278. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/config/proxy_list.py +0 -0
  279. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/config/settings.py +0 -0
  280. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/__init__.py +0 -0
  281. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/logo_helper.py +0 -0
  282. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/rich_helper.py +0 -0
  283. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  284. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  285. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_commander.py +0 -0
  286. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  287. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  288. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  289. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  290. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  291. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  292. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_print.py +0 -0
  293. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  294. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/__init__.py +0 -0
  295. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/application_manager.py +0 -0
  296. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/capabilities_parser.py +0 -0
  297. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/colored_traceback.py +0 -0
  298. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/create_db_tables.sql +0 -0
  299. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/detect_b_ver.py +0 -0
  300. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/download_helper.py +0 -0
  301. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/encoded_images.py +0 -0
  302. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/jqc_helper.py +0 -0
  303. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/log_helper.py +0 -0
  304. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/mysql.py +0 -0
  305. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/proxy_helper.py +0 -0
  306. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/recorder_helper.py +0 -0
  307. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/report_helper.py +0 -0
  308. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/s3_manager.py +0 -0
  309. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/sb_driver.py +0 -0
  310. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/session_helper.py +0 -0
  311. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/settings_parser.py +0 -0
  312. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/style_sheet.py +0 -0
  313. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/testcase_manager.py +0 -0
  314. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/tour_helper.py +0 -0
  315. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/core/visual_helper.py +0 -0
  316. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/drivers/__init__.py +0 -0
  317. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/extensions/__init__.py +0 -0
  318. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/extensions/ad_block.zip +0 -0
  319. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/extensions/disable_csp.zip +0 -0
  320. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/extensions/recorder.zip +0 -0
  321. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/extensions/sbase_ext.zip +0 -0
  322. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/__init__.py +0 -0
  323. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  324. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/errors.py +0 -0
  325. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/js_utils.py +0 -0
  326. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/page_actions.py +0 -0
  327. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/page_utils.py +0 -0
  328. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/shared_utils.py +0 -0
  329. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/unittest_helper.py +0 -0
  330. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/words.py +0 -0
  331. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  332. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/js_code/__init__.py +0 -0
  333. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/js_code/active_css_js.py +0 -0
  334. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/js_code/live_js.py +0 -0
  335. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/js_code/recorder_js.py +0 -0
  336. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/masterqa/__init__.py +0 -0
  337. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/masterqa/master_qa.py +0 -0
  338. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/__init__.py +0 -0
  339. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/base_plugin.py +0 -0
  340. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/basic_test_info.py +0 -0
  341. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  342. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/page_source.py +0 -0
  343. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  344. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/plugins/screen_shots.py +0 -0
  345. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/resources/__init__.py +0 -0
  346. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/__init__.py +0 -0
  347. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/chinese.py +0 -0
  348. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/dutch.py +0 -0
  349. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/french.py +0 -0
  350. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/italian.py +0 -0
  351. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/japanese.py +0 -0
  352. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/korean.py +0 -0
  353. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/master_dict.py +0 -0
  354. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/portuguese.py +0 -0
  355. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/russian.py +0 -0
  356. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/spanish.py +0 -0
  357. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/translate/translator.py +0 -0
  358. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/__init__.py +0 -0
  359. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp.py +0 -0
  360. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  361. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  362. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  363. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  364. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  365. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  366. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  367. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  368. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/dprocess.py +0 -0
  369. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/options.py +0 -0
  370. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/reactor.py +0 -0
  371. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/undetected/webelement.py +0 -0
  372. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/__init__.py +0 -0
  373. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  374. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  375. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  376. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  377. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  378. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  379. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  380. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  381. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  382. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  383. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  384. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  385. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  386. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase.egg-info/SOURCES.txt +0 -0
  387. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase.egg-info/dependency_links.txt +0 -0
  388. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase.egg-info/entry_points.txt +0 -0
  389. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/seleniumbase.egg-info/top_level.txt +0 -0
  390. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/setup.cfg +0 -0
  391. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/site/prepare.py +0 -0
  392. {seleniumbase-4.34.0 → seleniumbase-4.34.2}/virtualenv_install.sh +0 -0
@@ -82,6 +82,20 @@ msedgedriver.exe
82
82
  operadriver.exe
83
83
  uc_driver.exe
84
84
 
85
+ # Chrome for Testing folders
86
+ chrome-mac-arm64
87
+ chrome-mac-x64
88
+ chrome-linux64
89
+ chrome-win64
90
+ chrome-win32
91
+
92
+ # Chrome-Headless-Shell folders
93
+ chrome-headless-shell-mac-arm64
94
+ chrome-headless-shell-mac-x64
95
+ chrome-headless-shell-linux64
96
+ chrome-headless-shell-win64
97
+ chrome-headless-shell-win32
98
+
85
99
  # msedgedriver requirements
86
100
  libc++.dylib
87
101
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: seleniumbase
3
- Version: 4.34.0
3
+ Version: 4.34.2
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
@@ -104,7 +104,7 @@ Requires-Dist: trio-websocket==0.11.1
104
104
  Requires-Dist: wsproto==1.2.0
105
105
  Requires-Dist: websocket-client==1.8.0
106
106
  Requires-Dist: selenium==4.27.1; python_version < "3.9"
107
- Requires-Dist: selenium==4.28.0; python_version >= "3.9"
107
+ Requires-Dist: selenium==4.28.1; python_version >= "3.9"
108
108
  Requires-Dist: cssselect==1.2.0
109
109
  Requires-Dist: sortedcontainers==2.4.0
110
110
  Requires-Dist: execnet==2.1.1
@@ -13,12 +13,24 @@ class ProxyTests(BaseCase):
13
13
  if not self.page_load_strategy == "none" and not self.undetectable:
14
14
  # This page takes too long to load otherwise
15
15
  self.get_new_driver(page_load_strategy="none")
16
+ self.open("https://api.ipify.org/")
17
+ ip_address = self.get_text("body")
16
18
  self.open("https://ipinfo.io/")
17
- self.wait_for_non_empty_text("form input", timeout=20)
18
- ip_address = self.get_text('#ip-string span[class*="primary"] span')
19
+ self.type('input[name="search"]', ip_address, timeout=20)
20
+ self.click("form button span")
21
+ self.sleep(2)
22
+ self.click_if_visible("span.cursor-pointer", timeout=4)
19
23
  print("\n\nMy IP Address = %s\n" % ip_address)
20
24
  print("Displaying Host Info:")
21
- text = self.get_text("#widget-scrollable-container").split("asn:")[0]
25
+ text = self.get_text("#block-summary").split("Hosted domains")[0]
26
+ rows = text.split("\n")
27
+ data = []
28
+ for row in rows:
29
+ if row.strip() != "":
30
+ data.append(row.strip())
31
+ print("\n".join(data).replace('\n"', " "))
32
+ print("\nDisplaying Geolocation Info:")
33
+ text = self.get_text("#block-geolocation").split("Coordinates")[0]
22
34
  rows = text.split("\n")
23
35
  data = []
24
36
  for row in rows:
@@ -26,5 +38,5 @@ class ProxyTests(BaseCase):
26
38
  data.append(row.strip())
27
39
  print("\n".join(data).replace('\n"', " "))
28
40
  if not self.headless:
29
- print("\nThe browser will close automatically in 7 seconds...")
30
- self.sleep(7)
41
+ print("\nThe browser will close automatically in 3 seconds...")
42
+ self.sleep(3)
@@ -2,16 +2,18 @@ from seleniumbase import SB
2
2
 
3
3
  with SB(uc=True, incognito=True, test=True) as sb:
4
4
  sb.driver.uc_open_with_reconnect("https://pixelscan.net/", 7)
5
- sb.remove_elements("div.banner") # Remove the banner
5
+ sb.remove_elements(".bg-bannerBg") # Remove the top banner
6
+ sb.remove_elements("pxlscn-ad1") # Remove the ad banner
6
7
  sb.remove_elements("jdiv") # Remove chat widgets
7
8
  no_automation_detected = "No automation framework detected"
8
9
  sb.assert_text(no_automation_detected, "pxlscn-bot-detection")
9
10
  not_masking_text = "You are not masking your fingerprint"
10
11
  sb.assert_text(not_masking_text, "pxlscn-fingerprint-masking")
11
- sb.highlight("span.text-success", loops=8)
12
+ consistent_selector = 'div.bg-consistentBg [alt="Good"]'
13
+ sb.highlight(consistent_selector, loops=8, scroll=False)
12
14
  sb.sleep(1)
13
15
  fingerprint_masking_div = "pxlscn-fingerprint-masking div"
14
16
  sb.highlight(fingerprint_masking_div, loops=9, scroll=False)
15
17
  sb.sleep(1)
16
- sb.highlight(".bot-detection-context", loops=10, scroll=False)
18
+ sb.highlight("pxlscn-bot-detection", loops=10, scroll=False)
17
19
  sb.sleep(2)
@@ -24,6 +24,7 @@ class CDPNetworkBlockingTests(BaseCase):
24
24
  ]})
25
25
  self.execute_cdp_cmd('Network.enable', {})
26
26
  self.open('https://www.w3schools.com/jquery/default.asp')
27
+ self.ad_block()
27
28
  source = self.get_page_source()
28
29
  self.assert_true("doubleclick.net" not in source)
29
30
  self.assert_true("google-analytics.com" not in source)
@@ -11,7 +11,7 @@ class YouTubeSearchTests(BaseCase):
11
11
  self.skip("Unsupported mode for this test.")
12
12
  self.open("https://www.youtube.com/c/MichaelMintz")
13
13
  search_term = "seleniumbase"
14
- search_selector = "input#search"
14
+ search_selector = 'input[name="search_query"]'
15
15
  results_selector = '[role="listbox"]'
16
16
  self.click_if_visible('button[aria-label="Close"]')
17
17
  self.double_click(search_selector)
@@ -43,7 +43,7 @@ trio-websocket==0.11.1
43
43
  wsproto==1.2.0
44
44
  websocket-client==1.8.0
45
45
  selenium==4.27.1;python_version<"3.9"
46
- selenium==4.28.0;python_version>="3.9"
46
+ selenium==4.28.1;python_version>="3.9"
47
47
  cssselect==1.2.0
48
48
  sortedcontainers==2.4.0
49
49
  execnet==2.1.1
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.34.0"
2
+ __version__ = "4.34.2"
@@ -482,8 +482,8 @@ def get_configured_sb(context):
482
482
  extension_dir = sb.extension_dir # revert to default
483
483
  sb.extension_dir = extension_dir
484
484
  continue
485
- # Handle: -D binary-location=PATH / binary_location=PATH
486
- if low_key in ["binary-location", "binary_location"]:
485
+ # Handle: -D binary-location=PATH / binary_location=PATH / bl=PATH
486
+ if low_key in ["binary-location", "binary_location", "bl"]:
487
487
  binary_location = userdata[key]
488
488
  if binary_location == "true":
489
489
  binary_location = sb.binary_location # revert to default
@@ -884,6 +884,14 @@ def get_configured_sb(context):
884
884
  sb.headless = True # Firefox has regular headless
885
885
  elif sb.browser not in ["chrome", "edge"]:
886
886
  sb.headless2 = False # Only for Chromium browsers
887
+ if (
888
+ sb.binary_location
889
+ and sb.binary_location.lower() == "chs"
890
+ and sb.browser == "chrome"
891
+ ):
892
+ sb.headless = True
893
+ sb.headless1 = False
894
+ sb.headless2 = False
887
895
  # Recorder Mode only supports Chromium browsers.
888
896
  if sb.recorder_ext and (sb.browser not in ["chrome", "edge"]):
889
897
  raise Exception(
@@ -139,8 +139,8 @@ def show_install_usage():
139
139
  print(" OR: seleniumbase get [DRIVER_NAME] [OPTIONS]")
140
140
  print(" OR: sbase install [DRIVER_NAME] [OPTIONS]")
141
141
  print(" OR: sbase get [DRIVER_NAME] [OPTIONS]")
142
- print(" (Drivers: chromedriver, geckodriver,")
143
- print(" edgedriver, iedriver, uc_driver)")
142
+ print(" (Drivers: chromedriver, cft, uc_driver,")
143
+ print(" edgedriver, chs, geckodriver)")
144
144
  print(" Options:")
145
145
  print(" VERSION Specify the version to download.")
146
146
  print(" Tries to detect the needed version.")
@@ -157,11 +157,15 @@ def show_install_usage():
157
157
  print(" sbase get chromedriver stable")
158
158
  print(" sbase get chromedriver beta")
159
159
  print(" sbase get chromedriver -p")
160
+ print(" sbase get cft 131")
161
+ print(" sbase get chs")
160
162
  print(" Output:")
161
163
  print(" Downloads the webdriver to seleniumbase/drivers/")
162
164
  print(" (chromedriver is required for Chrome automation)")
163
165
  print(" (geckodriver is required for Firefox automation)")
164
166
  print(" (edgedriver is required for MS__Edge automation)")
167
+ print(" (cft is for the `Chrome for Testing` binary exe)")
168
+ print(" (chs is for the `Chrome-Headless-Shell` binary.)")
165
169
  print("")
166
170
 
167
171
 
@@ -3,7 +3,7 @@ Downloads the specified webdriver to "seleniumbase/drivers/"
3
3
 
4
4
  Usage:
5
5
  sbase get {chromedriver|geckodriver|edgedriver|
6
- iedriver|uc_driver} [OPTIONS]
6
+ iedriver|uc_driver|cft|chs} [OPTIONS]
7
7
  Options:
8
8
  VERSION Specify the version.
9
9
  Tries to detect the needed version.
@@ -19,6 +19,8 @@ Examples:
19
19
  sbase get chromedriver stable
20
20
  sbase get chromedriver beta
21
21
  sbase get chromedriver -p
22
+ sbase get cft 131
23
+ sbase get chs
22
24
  Output:
23
25
  Downloads the webdriver to seleniumbase/drivers/
24
26
  (chromedriver is required for Chrome automation)
@@ -31,6 +33,7 @@ import os
31
33
  import platform
32
34
  import requests
33
35
  import shutil
36
+ import subprocess
34
37
  import sys
35
38
  import time
36
39
  import tarfile
@@ -61,8 +64,8 @@ def invalid_run_command():
61
64
  exp += " OR sbase install [DRIVER_NAME] [OPTIONS]\n"
62
65
  exp += " OR seleniumbase get [DRIVER_NAME] [OPTIONS]\n"
63
66
  exp += " OR sbase get [DRIVER_NAME] [OPTIONS]\n"
64
- exp += " (Drivers: chromedriver, geckodriver,\n"
65
- exp += " edgedriver, iedriver, uc_driver)\n"
67
+ exp += " (Drivers: chromedriver, cft, uc_driver,\n"
68
+ exp += " edgedriver, chs, geckodriver)\n"
66
69
  exp += " Options:\n"
67
70
  exp += " VERSION Specify the version.\n"
68
71
  exp += " Tries to detect the needed version.\n"
@@ -79,11 +82,15 @@ def invalid_run_command():
79
82
  exp += " sbase get chromedriver stable\n"
80
83
  exp += " sbase get chromedriver beta\n"
81
84
  exp += " sbase get chromedriver -p\n"
85
+ exp += " sbase get cft 131\n"
86
+ exp += " sbase get chs\n"
82
87
  exp += " Output:\n"
83
88
  exp += " Downloads the webdriver to seleniumbase/drivers/\n"
84
89
  exp += " (chromedriver is required for Chrome automation)\n"
85
90
  exp += " (geckodriver is required for Firefox automation)\n"
86
91
  exp += " (edgedriver is required for MS__Edge automation)\n"
92
+ exp += " (cft is for the `Chrome for Testing` binary exe)\n"
93
+ exp += " (chs is for the `Chrome-Headless-Shell` binary.)\n"
87
94
  print("")
88
95
  raise Exception("%s\n\n%s" % (constants.Warnings.INVALID_RUN_COMMAND, exp))
89
96
 
@@ -265,6 +272,16 @@ def main(override=None, intel_for_uc=None, force_uc=None):
265
272
  elif override.startswith("iedriver "):
266
273
  extra = override.split("iedriver ")[1]
267
274
  sys.argv = ["seleniumbase", "get", "iedriver", extra]
275
+ elif override == "cft":
276
+ sys.argv = ["seleniumbase", "get", "cft"]
277
+ elif override.startswith("cft "):
278
+ extra = override.split("cft ")[1]
279
+ sys.argv = ["seleniumbase", "get", "cft", extra]
280
+ elif override == "chs":
281
+ sys.argv = ["seleniumbase", "get", "chs"]
282
+ elif override.startswith("chs "):
283
+ extra = override.split("chs ")[1]
284
+ sys.argv = ["seleniumbase", "get", "chs", extra]
268
285
  if found_proxy:
269
286
  sys.argv.append(found_proxy)
270
287
 
@@ -550,6 +567,134 @@ def main(override=None, intel_for_uc=None, force_uc=None):
550
567
  raise Exception("Could not find chromedriver to download!\n")
551
568
  if not get_latest:
552
569
  pass
570
+ elif name == "chrome" or name == "cft":
571
+ set_version = None
572
+ found_version = None
573
+ use_version = None
574
+ major_version = None
575
+ if num_args >= 4:
576
+ set_version = sys.argv[3]
577
+ if (
578
+ set_version
579
+ and set_version.split(".")[0].isnumeric()
580
+ and int(set_version.split(".")[0]) >= 113
581
+ ):
582
+ major_version = set_version.split(".")[0]
583
+ elif (
584
+ not set_version
585
+ or set_version.lower() == "latest"
586
+ or set_version.lower() == "stable"
587
+ ):
588
+ found_version = get_latest_stable_chromedriver_version()
589
+ elif (
590
+ set_version and (
591
+ set_version.lower() == "latest-1"
592
+ or set_version.lower() == "previous"
593
+ )
594
+ ):
595
+ found_version = get_latest_stable_chromedriver_version()
596
+ major_version = str(int(found_version.split(".")[0]) - 1)
597
+ found_version = None
598
+ elif (set_version and set_version.lower() == "beta"):
599
+ found_version = get_latest_beta_chromedriver_version()
600
+ elif (set_version and set_version.lower() == "dev"):
601
+ found_version = get_latest_dev_chromedriver_version()
602
+ elif (set_version and set_version.lower() == "canary"):
603
+ found_version = get_latest_canary_chromedriver_version()
604
+ if found_version and found_version.split(".")[0].isnumeric():
605
+ major_version = found_version.split(".")[0]
606
+ use_version = found_version
607
+ if not use_version:
608
+ use_version = get_cft_latest_version_from_milestone(major_version)
609
+ msg = c2 + "Chrome for Testing to download" + cr
610
+ p_version = c3 + use_version + cr
611
+ log_d("\n*** %s = %s" % (msg, p_version))
612
+ if IS_MAC:
613
+ if IS_ARM_MAC:
614
+ platform_code = "mac-arm64"
615
+ file_name = "chrome-mac-arm64.zip"
616
+ else:
617
+ platform_code = "mac-x64"
618
+ file_name = "chrome-mac-x64.zip"
619
+ elif IS_LINUX:
620
+ platform_code = "linux64"
621
+ file_name = "chrome-linux64.zip"
622
+ elif IS_WINDOWS:
623
+ if "64" in ARCH:
624
+ platform_code = "win64"
625
+ file_name = "chrome-win64.zip"
626
+ else:
627
+ platform_code = "win32"
628
+ file_name = "chrome-win32.zip"
629
+ plat_arch = file_name.split(".zip")[0]
630
+ download_url = (
631
+ "https://storage.googleapis.com/chrome-for-testing-public/"
632
+ "%s/%s/%s" % (use_version, platform_code, file_name)
633
+ )
634
+ elif name == "chrome-headless-shell" or name == "chs":
635
+ set_version = None
636
+ found_version = None
637
+ use_version = None
638
+ major_version = None
639
+ if num_args >= 4:
640
+ set_version = sys.argv[3]
641
+ if (
642
+ set_version
643
+ and set_version.split(".")[0].isnumeric()
644
+ and int(set_version.split(".")[0]) >= 113
645
+ ):
646
+ major_version = set_version.split(".")[0]
647
+ elif (
648
+ not set_version
649
+ or set_version.lower() == "latest"
650
+ or set_version.lower() == "stable"
651
+ ):
652
+ found_version = get_latest_stable_chromedriver_version()
653
+ elif (
654
+ set_version and (
655
+ set_version.lower() == "latest-1"
656
+ or set_version.lower() == "previous"
657
+ )
658
+ ):
659
+ found_version = get_latest_stable_chromedriver_version()
660
+ major_version = str(int(found_version.split(".")[0]) - 1)
661
+ found_version = None
662
+ elif (set_version and set_version.lower() == "beta"):
663
+ found_version = get_latest_beta_chromedriver_version()
664
+ elif (set_version and set_version.lower() == "dev"):
665
+ found_version = get_latest_dev_chromedriver_version()
666
+ elif (set_version and set_version.lower() == "canary"):
667
+ found_version = get_latest_canary_chromedriver_version()
668
+ if found_version and found_version.split(".")[0].isnumeric():
669
+ major_version = found_version.split(".")[0]
670
+ use_version = found_version
671
+ if not use_version:
672
+ use_version = get_cft_latest_version_from_milestone(major_version)
673
+ msg = c2 + "Chrome-Headless-Shell to download" + cr
674
+ p_version = c3 + use_version + cr
675
+ log_d("\n*** %s = %s" % (msg, p_version))
676
+ if IS_MAC:
677
+ if IS_ARM_MAC:
678
+ platform_code = "mac-arm64"
679
+ file_name = "chrome-headless-shell-mac-arm64.zip"
680
+ else:
681
+ platform_code = "mac-x64"
682
+ file_name = "chrome-headless-shell-mac-x64.zip"
683
+ elif IS_LINUX:
684
+ platform_code = "linux64"
685
+ file_name = "chrome-headless-shell-linux64.zip"
686
+ elif IS_WINDOWS:
687
+ if "64" in ARCH:
688
+ platform_code = "win64"
689
+ file_name = "chrome-headless-shell-win64.zip"
690
+ else:
691
+ platform_code = "win32"
692
+ file_name = "chrome-headless-shell-win32.zip"
693
+ plat_arch = file_name.split(".zip")[0]
694
+ download_url = (
695
+ "https://storage.googleapis.com/chrome-for-testing-public/"
696
+ "%s/%s/%s" % (use_version, platform_code, file_name)
697
+ )
553
698
  elif name == "geckodriver" or name == "firefoxdriver":
554
699
  use_version = DEFAULT_GECKODRIVER_VERSION
555
700
  found_geckodriver = False
@@ -1029,10 +1174,14 @@ def main(override=None, intel_for_uc=None, force_uc=None):
1029
1174
  if os.path.exists(os.path.join(downloads_folder, "Driver_Notes/")):
1030
1175
  # Only works if the directory is empty
1031
1176
  os.rmdir(os.path.join(downloads_folder, "Driver_Notes/"))
1032
- pr_driver_path = c3 + driver_path + cr
1177
+ driver_base = os.sep.join(driver_path.split(os.sep)[:-1])
1178
+ driver_file = driver_path.split(os.sep)[-1]
1179
+ pr_driver_base = c3 + driver_base + cr
1180
+ pr_sep = c3 + os.sep + cr
1181
+ pr_driver_file = c3 + driver_file + cr
1033
1182
  log_d(
1034
- "The file [%s] was saved to:\n%s\n"
1035
- % (driver_file, pr_driver_path)
1183
+ "The file [%s] was saved to:\n%s%s\n%s\n"
1184
+ % (driver_file, pr_driver_base, pr_sep, pr_driver_file)
1036
1185
  )
1037
1186
  log_d("Making [%s %s] executable ..." % (driver_file, use_version))
1038
1187
  make_executable(driver_path)
@@ -1046,6 +1195,86 @@ def main(override=None, intel_for_uc=None, force_uc=None):
1046
1195
  make_executable(path_file)
1047
1196
  log_d("Also copied to: %s%s%s" % (c3, path_file, cr))
1048
1197
  log_d("")
1198
+ elif name == "chrome" or name == "cft":
1199
+ # Zip file is valid. Proceed.
1200
+ driver_path = None
1201
+ driver_file = None
1202
+ base_path = os.sep.join(zip_file_path.split(os.sep)[:-1])
1203
+ folder_name = contents[0].split(os.sep)[0]
1204
+ folder_path = os.path.join(base_path, folder_name)
1205
+ if IS_MAC or IS_LINUX:
1206
+ if (
1207
+ "chrome-" in folder_path
1208
+ and "drivers" in folder_path
1209
+ and os.path.exists(folder_path)
1210
+ ):
1211
+ shutil.rmtree(folder_path)
1212
+ subprocess.run(
1213
+ ["unzip", zip_file_path, "-d", downloads_folder]
1214
+ )
1215
+ elif IS_WINDOWS:
1216
+ subprocess.run(
1217
+ [
1218
+ "powershell",
1219
+ "Expand-Archive",
1220
+ "-Path",
1221
+ zip_file_path,
1222
+ "-DestinationPath",
1223
+ downloads_folder,
1224
+ ]
1225
+ )
1226
+ else:
1227
+ zip_ref.extractall(downloads_folder)
1228
+ zip_ref.close()
1229
+ os.remove(zip_file_path)
1230
+ log_d("%sUnzip Complete!%s\n" % (c2, cr))
1231
+ pr_base_path = c3 + base_path + cr
1232
+ pr_sep = c3 + os.sep + cr
1233
+ pr_folder_name = c3 + folder_name + cr
1234
+ log_d(
1235
+ "Chrome for Testing was saved inside:\n%s%s\n%s\n"
1236
+ % (pr_base_path, pr_sep, pr_folder_name)
1237
+ )
1238
+ elif name == "chrome-headless-shell" or name == "chs":
1239
+ # Zip file is valid. Proceed.
1240
+ driver_path = None
1241
+ driver_file = None
1242
+ base_path = os.sep.join(zip_file_path.split(os.sep)[:-1])
1243
+ folder_name = contents[0].split(os.sep)[0]
1244
+ folder_path = os.path.join(base_path, folder_name)
1245
+ if IS_MAC or IS_LINUX:
1246
+ if (
1247
+ "chrome-headless-shell-" in folder_path
1248
+ and "drivers" in folder_path
1249
+ and os.path.exists(folder_path)
1250
+ ):
1251
+ shutil.rmtree(folder_path)
1252
+ subprocess.run(
1253
+ ["unzip", zip_file_path, "-d", downloads_folder]
1254
+ )
1255
+ elif IS_WINDOWS:
1256
+ subprocess.run(
1257
+ [
1258
+ "powershell",
1259
+ "Expand-Archive",
1260
+ "-Path",
1261
+ zip_file_path,
1262
+ "-DestinationPath",
1263
+ downloads_folder,
1264
+ ]
1265
+ )
1266
+ else:
1267
+ zip_ref.extractall(downloads_folder)
1268
+ zip_ref.close()
1269
+ os.remove(zip_file_path)
1270
+ log_d("%sUnzip Complete!%s\n" % (c2, cr))
1271
+ pr_base_path = c3 + base_path + cr
1272
+ pr_sep = c3 + os.sep + cr
1273
+ pr_folder_name = c3 + folder_name + cr
1274
+ log_d(
1275
+ "Chrome-Headless-Shell was saved inside:\n%s%s\n%s\n"
1276
+ % (pr_base_path, pr_sep, pr_folder_name)
1277
+ )
1049
1278
  elif len(contents) == 0:
1050
1279
  raise Exception("Zip file %s is empty!" % zip_file_path)
1051
1280
  else: