seleniumbase 4.24.10__py3-none-any.whl → 4.33.15__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. sbase/__init__.py +1 -0
  2. sbase/steps.py +7 -0
  3. seleniumbase/__init__.py +16 -7
  4. seleniumbase/__version__.py +1 -1
  5. seleniumbase/behave/behave_sb.py +97 -32
  6. seleniumbase/common/decorators.py +16 -7
  7. seleniumbase/config/proxy_list.py +3 -3
  8. seleniumbase/config/settings.py +4 -0
  9. seleniumbase/console_scripts/logo_helper.py +47 -8
  10. seleniumbase/console_scripts/run.py +345 -335
  11. seleniumbase/console_scripts/sb_behave_gui.py +5 -12
  12. seleniumbase/console_scripts/sb_caseplans.py +6 -13
  13. seleniumbase/console_scripts/sb_commander.py +5 -12
  14. seleniumbase/console_scripts/sb_install.py +62 -54
  15. seleniumbase/console_scripts/sb_mkchart.py +13 -20
  16. seleniumbase/console_scripts/sb_mkdir.py +11 -17
  17. seleniumbase/console_scripts/sb_mkfile.py +69 -43
  18. seleniumbase/console_scripts/sb_mkpres.py +13 -20
  19. seleniumbase/console_scripts/sb_mkrec.py +88 -21
  20. seleniumbase/console_scripts/sb_objectify.py +30 -30
  21. seleniumbase/console_scripts/sb_print.py +5 -12
  22. seleniumbase/console_scripts/sb_recorder.py +16 -11
  23. seleniumbase/core/browser_launcher.py +1658 -221
  24. seleniumbase/core/detect_b_ver.py +7 -8
  25. seleniumbase/core/log_helper.py +42 -27
  26. seleniumbase/core/mysql.py +1 -4
  27. seleniumbase/core/proxy_helper.py +35 -30
  28. seleniumbase/core/recorder_helper.py +24 -5
  29. seleniumbase/core/sb_cdp.py +1951 -0
  30. seleniumbase/core/sb_driver.py +162 -8
  31. seleniumbase/core/settings_parser.py +6 -0
  32. seleniumbase/core/style_sheet.py +10 -0
  33. seleniumbase/extensions/recorder.zip +0 -0
  34. seleniumbase/fixtures/base_case.py +1234 -632
  35. seleniumbase/fixtures/constants.py +10 -1
  36. seleniumbase/fixtures/js_utils.py +171 -144
  37. seleniumbase/fixtures/page_actions.py +177 -13
  38. seleniumbase/fixtures/page_utils.py +25 -53
  39. seleniumbase/fixtures/shared_utils.py +97 -11
  40. seleniumbase/js_code/active_css_js.py +1 -1
  41. seleniumbase/js_code/recorder_js.py +1 -1
  42. seleniumbase/plugins/base_plugin.py +2 -3
  43. seleniumbase/plugins/driver_manager.py +340 -65
  44. seleniumbase/plugins/pytest_plugin.py +276 -47
  45. seleniumbase/plugins/sb_manager.py +412 -99
  46. seleniumbase/plugins/selenium_plugin.py +122 -17
  47. seleniumbase/translate/translator.py +0 -7
  48. seleniumbase/undetected/__init__.py +59 -52
  49. seleniumbase/undetected/cdp.py +0 -1
  50. seleniumbase/undetected/cdp_driver/__init__.py +1 -0
  51. seleniumbase/undetected/cdp_driver/_contradict.py +110 -0
  52. seleniumbase/undetected/cdp_driver/browser.py +829 -0
  53. seleniumbase/undetected/cdp_driver/cdp_util.py +458 -0
  54. seleniumbase/undetected/cdp_driver/config.py +334 -0
  55. seleniumbase/undetected/cdp_driver/connection.py +639 -0
  56. seleniumbase/undetected/cdp_driver/element.py +1168 -0
  57. seleniumbase/undetected/cdp_driver/tab.py +1323 -0
  58. seleniumbase/undetected/dprocess.py +4 -7
  59. seleniumbase/undetected/options.py +6 -8
  60. seleniumbase/undetected/patcher.py +11 -13
  61. seleniumbase/undetected/reactor.py +0 -1
  62. seleniumbase/undetected/webelement.py +16 -3
  63. {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/LICENSE +1 -1
  64. {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/METADATA +299 -252
  65. {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/RECORD +68 -70
  66. {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/WHEEL +1 -1
  67. sbase/ReadMe.txt +0 -2
  68. seleniumbase/ReadMe.md +0 -25
  69. seleniumbase/common/ReadMe.md +0 -71
  70. seleniumbase/console_scripts/ReadMe.md +0 -731
  71. seleniumbase/drivers/ReadMe.md +0 -27
  72. seleniumbase/extensions/ReadMe.md +0 -12
  73. seleniumbase/masterqa/ReadMe.md +0 -61
  74. seleniumbase/resources/ReadMe.md +0 -31
  75. seleniumbase/resources/favicon.ico +0 -0
  76. seleniumbase/utilities/selenium_grid/ReadMe.md +0 -84
  77. seleniumbase/utilities/selenium_ide/ReadMe.md +0 -111
  78. {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/entry_points.txt +0 -0
  79. {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/top_level.txt +0 -0
sbase/__init__.py CHANGED
@@ -11,3 +11,4 @@ from seleniumbase import MasterQA # noqa
11
11
  from seleniumbase import page_actions # noqa
12
12
  from seleniumbase import page_utils # noqa
13
13
  from seleniumbase import SB # noqa
14
+ from seleniumbase import translate # noqa
sbase/steps.py CHANGED
@@ -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()
seleniumbase/__init__.py CHANGED
@@ -1,10 +1,8 @@
1
1
  import collections
2
+ import os
2
3
  import pdb
3
- try:
4
- import pdbp # (Pdb+) --- Python Debugger Plus
5
- except Exception:
6
- pass
7
4
  import sys
5
+ from contextlib import suppress
8
6
  from selenium import webdriver
9
7
  from seleniumbase.__version__ import __version__
10
8
  from seleniumbase.common import decorators # noqa
@@ -14,7 +12,7 @@ from seleniumbase.core.browser_launcher import get_driver # noqa
14
12
  from seleniumbase.fixtures import js_utils # noqa
15
13
  from seleniumbase.fixtures import page_actions # noqa
16
14
  from seleniumbase.fixtures import page_utils # noqa
17
- from seleniumbase.fixtures import shared_utils # noqa
15
+ from seleniumbase.fixtures import shared_utils
18
16
  from seleniumbase.fixtures.base_case import BaseCase # noqa
19
17
  from seleniumbase.masterqa.master_qa import MasterQA # noqa
20
18
  from seleniumbase.plugins.sb_manager import SB # noqa
@@ -22,6 +20,16 @@ from seleniumbase.plugins.driver_manager import Driver # noqa
22
20
  from seleniumbase.plugins.driver_manager import DriverContext # noqa
23
21
  from seleniumbase import translate # noqa
24
22
 
23
+ with suppress(Exception):
24
+ import colorama
25
+
26
+ with suppress(Exception):
27
+ import pdbp # (Pdb+) --- Python Debugger Plus
28
+
29
+ with suppress(Exception):
30
+ shared_utils.fix_colorama_if_windows()
31
+ colorama.init(autoreset=True)
32
+
25
33
  if sys.version_info[0] < 3 and "pdbp" in locals():
26
34
  # With Python3, "import pdbp" is all you need
27
35
  for key in pdbp.__dict__.keys():
@@ -34,11 +42,12 @@ if sys.version_info[0] < 3 and "pdbp" in locals():
34
42
  pdb.DefaultConfig.truncate_long_lines = False
35
43
  pdb.DefaultConfig.sticky_by_default = True
36
44
  colored_traceback.add_hook()
37
- if sys.version_info >= (3, 7):
38
- webdriver.TouchActions = None # Lifeline for past selenium-wire versions
45
+ os.environ["SE_AVOID_STATS"] = "true" # Disable Selenium Manager stats
46
+ webdriver.TouchActions = None # Lifeline for past selenium-wire versions
39
47
  if sys.version_info >= (3, 10):
40
48
  collections.Callable = collections.abc.Callable # Lifeline for nosetests
41
49
  del collections # Undo "import collections" / Simplify "dir(seleniumbase)"
50
+ del os # Undo "import os" / Simplify "dir(seleniumbase)"
42
51
  del sys # Undo "import sys" / Simplify "dir(seleniumbase)"
43
52
  del webdriver # Undo "import webdriver" / Simplify "dir(seleniumbase)"
44
53
 
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.24.10"
2
+ __version__ = "4.33.15"
@@ -42,11 +42,14 @@ behave -D agent="User Agent String" -D demo
42
42
  -D binary-location=PATH (Set path of the Chromium browser binary to use.)
43
43
  -D driver-version=VER (Set the chromedriver or uc_driver version to use.)
44
44
  -D sjw (Skip JS Waits for readyState to be "complete" or Angular to load.)
45
+ -D wfa (Wait for AngularJS to be done loading after specific web actions.)
45
46
  -D pls=PLS (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
46
- -D headless (Run tests in headless mode. The default arg on Linux OS.)
47
- -D headless2 (Use the new headless mode, which supports extensions.)
47
+ -D headless (The default headless mode. Linux uses this mode by default.)
48
+ -D headless1 (Use Chrome's old headless mode. Fast, but has limitations.)
49
+ -D headless2 (Use Chrome's new headless mode, which supports extensions.)
48
50
  -D headed (Run tests in headed/GUI mode on Linux OS, where not default.)
49
51
  -D xvfb (Run tests using the Xvfb virtual display server on Linux OS.)
52
+ -D xvfb-metrics=STRING (Set Xvfb display size on Linux: "Width,Height".)
50
53
  -D locale=LOCALE_CODE (Set the Language Locale Code for the web browser.)
51
54
  -D pdb (Activate Post Mortem Debug Mode if a test fails.)
52
55
  -D interval=SECONDS (The autoplay interval for presentations & tour steps)
@@ -68,7 +71,8 @@ behave -D agent="User Agent String" -D demo
68
71
  -D rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
69
72
  -D rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
70
73
  -D rec-print (If the Recorder is enabled, prints output after tests end.)
71
- -D disable-js (Disable JavaScript on Chromium. May break websites!)
74
+ -D disable-cookies (Disable Cookies on websites. Pages might break!)
75
+ -D disable-js (Disable JavaScript on websites. Pages might break!)
72
76
  -D disable-csp (Disable the Content Security Policy of websites.)
73
77
  -D disable-ws (Disable Web Security on Chromium-based browsers.)
74
78
  -D enable-ws (Enable Web Security on Chromium-based browsers.)
@@ -89,6 +93,7 @@ behave -D agent="User Agent String" -D demo
89
93
  -D rcs | -D reuse-class-session (Reuse session for tests in class/feature)
90
94
  -D crumbs (Delete all cookies between tests reusing a session.)
91
95
  -D disable-beforeunload (Disable the "beforeunload" event on Chrome.)
96
+ -D window-position=X,Y (Set the browser's starting window position.)
92
97
  -D window-size=WIDTH,HEIGHT (Set the browser's starting window size.)
93
98
  -D maximize (Start tests with the browser window maximized.)
94
99
  -D screenshot (Save a screenshot at the end of each test.)
@@ -103,6 +108,7 @@ import colorama
103
108
  import os
104
109
  import re
105
110
  import sys
111
+ from contextlib import suppress
106
112
  from seleniumbase import config as sb_config
107
113
  from seleniumbase.config import settings
108
114
  from seleniumbase.core import download_helper
@@ -140,10 +146,12 @@ def get_configured_sb(context):
140
146
  sb.browser = "chrome"
141
147
  sb.is_behave = True
142
148
  sb.headless = False
149
+ sb.headless1 = False
143
150
  sb.headless2 = False
144
151
  sb.headless_active = False
145
152
  sb.headed = False
146
153
  sb.xvfb = False
154
+ sb.xvfb_metrics = None
147
155
  sb.start_page = None
148
156
  sb.locale_code = None
149
157
  sb.pdb_option = False
@@ -173,6 +181,7 @@ def get_configured_sb(context):
173
181
  sb.database_env = "test"
174
182
  sb.log_path = constants.Logs.LATEST + os.sep
175
183
  sb.archive_logs = False
184
+ sb.disable_cookies = False
176
185
  sb.disable_js = False
177
186
  sb.disable_csp = False
178
187
  sb.disable_ws = False
@@ -192,6 +201,7 @@ def get_configured_sb(context):
192
201
  sb._disable_beforeunload = False
193
202
  sb.visual_baseline = False
194
203
  sb.use_wire = False
204
+ sb.window_position = None
195
205
  sb.window_size = None
196
206
  sb.maximize_option = False
197
207
  sb.is_context_manager = False
@@ -290,6 +300,11 @@ def get_configured_sb(context):
290
300
  sb.headless = True
291
301
  continue
292
302
  # Handle: -D headless2
303
+ if low_key == "headless1":
304
+ sb.headless1 = True
305
+ sb.headless = True
306
+ continue
307
+ # Handle: -D headless2
293
308
  if low_key == "headless2":
294
309
  sb.headless2 = True
295
310
  continue
@@ -301,6 +316,13 @@ def get_configured_sb(context):
301
316
  if low_key == "xvfb":
302
317
  sb.xvfb = True
303
318
  continue
319
+ # Handle: -D xvfb-metrics=STR / xvfb_metrics=STR
320
+ if low_key in ["xvfb-metrics", "xvfb_metrics"]:
321
+ xvfb_metrics = userdata[key]
322
+ if xvfb_metrics == "true":
323
+ xvfb_metrics = sb.xvfb_metrics # revert to default
324
+ sb.xvfb_metrics = xvfb_metrics
325
+ continue
304
326
  # Handle: -D start-page=URL / start_page=URL / url=URL
305
327
  if low_key in ["start-page", "start_page", "url"]:
306
328
  start_page = userdata[key]
@@ -515,16 +537,20 @@ def get_configured_sb(context):
515
537
  if low_key in ["archive-logs", "archive_logs"]:
516
538
  sb.archive_logs = True
517
539
  continue
540
+ # Handle: -D disable-cookies / disable_cookies
541
+ if low_key in ["disable-cookies", "disable_cookies"]:
542
+ sb.disable_cookies = True
543
+ continue
518
544
  # Handle: -D disable-js / disable_js
519
545
  if low_key in ["disable-js", "disable_js"]:
520
546
  sb.disable_js = True
521
547
  continue
522
- # Handle: -D disable-csp / disable_csp
523
- if low_key in ["disable-csp", "disable_csp"]:
548
+ # Handle: -D disable-csp / disable_csp / dcsp
549
+ if low_key in ["disable-csp", "disable_csp", "dcsp"]:
524
550
  sb.disable_csp = True
525
551
  continue
526
- # Handle: -D disable-ws / disable_ws
527
- if low_key in ["disable-ws", "disable_ws"]:
552
+ # Handle: -D disable-ws / disable_ws / dws
553
+ if low_key in ["disable-ws", "disable_ws", "dws"]:
528
554
  sb.disable_ws = True
529
555
  continue
530
556
  # Handle: -D enable-ws / enable_ws
@@ -588,6 +614,10 @@ def get_configured_sb(context):
588
614
  if low_key in ["sjw", "skip-js-waits", "skip_js_waits"]:
589
615
  settings.SKIP_JS_WAITS = True
590
616
  continue
617
+ # Handle: -D wfa / wait-for-angularjs / wait_for_angularjs
618
+ if low_key in ["wfa", "wait-for-angularjs", "wait_for_angularjs"]:
619
+ settings.WAIT_FOR_ANGULARJS = True
620
+ continue
591
621
  # Handle: -D visual-baseline / visual_baseline
592
622
  if low_key in ["visual-baseline", "visual_baseline"]:
593
623
  sb.visual_baseline = True
@@ -596,6 +626,13 @@ def get_configured_sb(context):
596
626
  if low_key == "wire":
597
627
  sb.use_wire = True
598
628
  continue
629
+ # Handle: -D window-position=X,Y / window_position=X,Y
630
+ if low_key in ["window-position", "window_position"]:
631
+ window_position = userdata[key]
632
+ if window_position == "true":
633
+ window_position = sb.window_position # revert to default
634
+ sb.window_position = window_position
635
+ continue
599
636
  # Handle: -D window-size=Width,Height / window_size=Width,Height
600
637
  if low_key in ["window-size", "window_size"]:
601
638
  window_size = userdata[key]
@@ -840,6 +877,7 @@ def get_configured_sb(context):
840
877
  # Recorder Mode can still optimize scripts in "-D headless2" mode.
841
878
  if sb.recorder_ext and sb.headless:
842
879
  sb.headless = False
880
+ sb.headless1 = False
843
881
  sb.headless2 = True
844
882
  if sb.headless2 and sb.browser == "firefox":
845
883
  sb.headless2 = False # Only for Chromium browsers
@@ -862,22 +900,27 @@ def get_configured_sb(context):
862
900
  and not sb.headless2
863
901
  and not sb.xvfb
864
902
  ):
865
- print(
866
- '(Linux uses "-D headless" by default. '
867
- 'To override, use "-D headed" / "-D gui". '
868
- 'For Xvfb mode instead, use "-D xvfb". '
869
- "Or you can hide this info by using"
870
- '"-D headless" / "-D headless2".)'
871
- )
872
- sb.headless = True
903
+ if not sb.undetectable:
904
+ print(
905
+ '(Linux uses "-D headless" by default. '
906
+ 'To override, use "-D headed" / "-D gui". '
907
+ 'For Xvfb mode instead, use "-D xvfb". '
908
+ "Or you can hide this info by using"
909
+ '"-D headless" / "-D headless2" / "-D uc".)'
910
+ )
911
+ sb.headless = True
912
+ else:
913
+ sb.xvfb = True
873
914
  # Recorder Mode can still optimize scripts in --headless2 mode.
874
915
  if sb.recorder_mode and sb.headless:
875
916
  sb.headless = False
917
+ sb.headless1 = False
876
918
  sb.headless2 = True
877
919
  if not sb.headless and not sb.headless2:
878
920
  sb.headed = True
879
921
  if sb.browser == "safari" and sb.headless:
880
922
  sb.headless = False # Safari doesn't support headless mode
923
+ sb.headless1 = False
881
924
  if sb.save_screenshot_after_test and sb.no_screenshot_after_test:
882
925
  sb.save_screenshot_after_test = False # "no_screenshot" has priority
883
926
  if sb.servername != "localhost":
@@ -886,6 +929,39 @@ def get_configured_sb(context):
886
929
  # If the port is "443", the protocol is "https"
887
930
  if str(sb.port) == "443":
888
931
  sb.protocol = "https"
932
+ if (
933
+ (sb.enable_ws is None and sb.disable_ws is None)
934
+ or (sb.disable_ws is not None and not sb.disable_ws)
935
+ or (sb.enable_ws is not None and sb.enable_ws)
936
+ ):
937
+ sb.enable_ws = True
938
+ sb.disable_ws = False
939
+ else:
940
+ sb.enable_ws = False
941
+ sb.disable_ws = True
942
+ if sb.window_position:
943
+ window_position = sb.window_position
944
+ if window_position.count(",") != 1:
945
+ message = (
946
+ '\n\n window_position expects an "x,y" string!'
947
+ '\n (Your input was: "%s")\n' % window_position
948
+ )
949
+ raise Exception(message)
950
+ window_position = window_position.replace(" ", "")
951
+ win_x = None
952
+ win_y = None
953
+ try:
954
+ win_x = int(window_position.split(",")[0])
955
+ win_y = int(window_position.split(",")[1])
956
+ except Exception:
957
+ message = (
958
+ '\n\n Expecting integer values for "x,y"!'
959
+ '\n (window_position input was: "%s")\n'
960
+ % window_position
961
+ )
962
+ raise Exception(message)
963
+ settings.WINDOW_START_X = win_x
964
+ settings.WINDOW_START_Y = win_y
889
965
  if sb.window_size:
890
966
  window_size = sb.window_size
891
967
  if window_size.count(",") != 1:
@@ -920,9 +996,11 @@ def get_configured_sb(context):
920
996
  sb_config.is_pytest = False
921
997
  sb_config.is_nosetest = False
922
998
  sb_config.is_context_manager = False
999
+ sb_config.window_position = sb.window_position
923
1000
  sb_config.window_size = sb.window_size
924
1001
  sb_config.maximize_option = sb.maximize_option
925
1002
  sb_config.xvfb = sb.xvfb
1003
+ sb_config.xvfb_metrics = sb.xvfb_metrics
926
1004
  sb_config.reuse_class_session = sb._reuse_class_session
927
1005
  sb_config.save_screenshot = sb.save_screenshot_after_test
928
1006
  sb_config.no_screenshot = sb.no_screenshot_after_test
@@ -933,6 +1011,7 @@ def get_configured_sb(context):
933
1011
  sb_config.pdb_option = sb.pdb_option
934
1012
  sb_config.rec_behave = sb.rec_behave
935
1013
  sb_config.rec_print = sb.rec_print
1014
+ sb_config.disable_cookies = sb.disable_cookies
936
1015
  sb_config.disable_js = sb.disable_js
937
1016
  sb_config.disable_csp = sb.disable_csp
938
1017
  sb_config.record_sleep = sb.record_sleep
@@ -1144,20 +1223,14 @@ def behave_dashboard_prepare():
1144
1223
  sb_config.item_count_untested = sb_config.item_count
1145
1224
  dash_path = os.path.join(os.getcwd(), "dashboard.html")
1146
1225
  star_len = len("Dashboard: ") + len(dash_path)
1147
- try:
1226
+ with suppress(Exception):
1148
1227
  terminal_size = os.get_terminal_size().columns
1149
1228
  if terminal_size > 30 and star_len > terminal_size:
1150
1229
  star_len = terminal_size
1151
- except Exception:
1152
- pass
1153
1230
  stars = "*" * star_len
1154
1231
  c1 = ""
1155
1232
  cr = ""
1156
1233
  if not is_linux:
1157
- if is_windows and hasattr(colorama, "just_fix_windows_console"):
1158
- colorama.just_fix_windows_console()
1159
- else:
1160
- colorama.init(autoreset=True)
1161
1234
  c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
1162
1235
  cr = colorama.Style.RESET_ALL
1163
1236
  print("Dashboard: %s%s%s\n%s" % (c1, dash_path, cr, stars))
@@ -1245,7 +1318,7 @@ def _perform_behave_unconfigure_():
1245
1318
 
1246
1319
 
1247
1320
  def do_final_driver_cleanup_as_needed():
1248
- try:
1321
+ with suppress(Exception):
1249
1322
  if hasattr(sb_config, "last_driver") and sb_config.last_driver:
1250
1323
  if (
1251
1324
  not is_windows
@@ -1253,8 +1326,6 @@ def do_final_driver_cleanup_as_needed():
1253
1326
  or sb_config.last_driver.service.process
1254
1327
  ):
1255
1328
  sb_config.last_driver.quit()
1256
- except Exception:
1257
- pass
1258
1329
 
1259
1330
 
1260
1331
  def _perform_behave_terminal_summary_():
@@ -1263,20 +1334,14 @@ def _perform_behave_terminal_summary_():
1263
1334
  )
1264
1335
  dash_path = os.path.join(os.getcwd(), "dashboard.html")
1265
1336
  equals_len = len("Dashboard: ") + len(dash_path)
1266
- try:
1337
+ with suppress(Exception):
1267
1338
  terminal_size = os.get_terminal_size().columns
1268
1339
  if terminal_size > 30 and equals_len > terminal_size:
1269
1340
  equals_len = terminal_size
1270
- except Exception:
1271
- pass
1272
1341
  equals = "=" * (equals_len + 2)
1273
1342
  c2 = ""
1274
1343
  cr = ""
1275
1344
  if not is_linux:
1276
- if is_windows and hasattr(colorama, "just_fix_windows_console"):
1277
- colorama.just_fix_windows_console()
1278
- else:
1279
- colorama.init(autoreset=True)
1280
1345
  c2 = colorama.Fore.MAGENTA + colorama.Back.LIGHTYELLOW_EX
1281
1346
  cr = colorama.Style.RESET_ALL
1282
1347
  if sb_config.dashboard:
@@ -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):
@@ -43,23 +50,25 @@ def print_runtime(description=None, limit=None):
43
50
  finally:
44
51
  end_time = time.time()
45
52
  run_time = end_time - start_time
53
+ name = description
54
+ info = c1 + "<info>" + cr
46
55
  # Print times with a statistically significant number of decimal places
47
56
  if run_time < 0.0001:
48
- print(" {%s} ran for %.7f seconds." % (description, run_time))
57
+ print("%s - {%s} ran for %.7f seconds." % (info, name, run_time))
49
58
  elif run_time < 0.001:
50
- print(" {%s} ran for %.6f seconds." % (description, run_time))
59
+ print("%s - {%s} ran for %.6f seconds." % (info, name, run_time))
51
60
  elif run_time < 0.01:
52
- print(" {%s} ran for %.5f seconds." % (description, run_time))
61
+ print("%s - {%s} ran for %.5f seconds." % (info, name, run_time))
53
62
  elif run_time < 0.1:
54
- print(" {%s} ran for %.4f seconds." % (description, run_time))
63
+ print("%s - {%s} ran for %.4f seconds." % (info, name, run_time))
55
64
  elif run_time < 1:
56
- print(" {%s} ran for %.3f seconds." % (description, run_time))
65
+ print("%s - {%s} ran for %.3f seconds." % (info, name, run_time))
57
66
  else:
58
- print(" {%s} ran for %.2f seconds." % (description, run_time))
67
+ print("%s - {%s} ran for %.2f seconds." % (info, name, run_time))
59
68
  if limit and limit > 0 and run_time > limit:
60
69
  message = (
61
70
  "\n {%s} duration of %.2fs exceeded the time limit of %.2fs!"
62
- % (description, run_time, limit)
71
+ % (name, run_time, limit)
63
72
  )
64
73
  if exception:
65
74
  message = exception.msg + "\nAND " + message
@@ -23,9 +23,9 @@ you can try finding one from one of following sites:
23
23
  """
24
24
 
25
25
  PROXY_LIST = {
26
- "example1": "37.19.220.129:8443", # (Example) - set your own proxy here
27
- "example2": "socks4://104.236.32.53:8915", # (Example)
28
- "example3": "socks5://142.44.212.57:49006", # (Example)
26
+ "example1": "35.185.196.38:3128", # (Example) - set your own proxy here
27
+ "example2": "129.80.134.71:3128", # (Example)
28
+ "example3": "socks5://184.178.172.5:15303", # (Example)
29
29
  "proxy1": None,
30
30
  "proxy2": None,
31
31
  "proxy3": None,
@@ -110,6 +110,10 @@ DISABLE_CSP_ON_CHROME = False
110
110
  # (This applies when using --proxy=[PROXY_STRING] for using a proxy server.)
111
111
  RAISE_INVALID_PROXY_STRING_EXCEPTION = True
112
112
 
113
+ # Default browser coordinates when opening new windows for tests.
114
+ WINDOW_START_X = 20
115
+ WINDOW_START_Y = 54
116
+
113
117
  # Default browser resolutions when opening new windows for tests.
114
118
  # (Headless resolutions take priority, and include all browsers.)
115
119
  # (Firefox starts maximized by default when running in GUI Mode.)
@@ -3,7 +3,8 @@
3
3
  http://www.patorjk.com/software/taag/#p=display&f=Slant&t=SeleniumBase """
4
4
 
5
5
  import colorama
6
- import sys
6
+ import os
7
+ from contextlib import suppress
7
8
 
8
9
  r"""
9
10
  ______ __ _ ____
@@ -15,13 +16,6 @@ r"""
15
16
 
16
17
 
17
18
  def get_seleniumbase_logo():
18
- if (
19
- "win32" in sys.platform
20
- and hasattr(colorama, "just_fix_windows_console")
21
- ):
22
- colorama.just_fix_windows_console()
23
- else:
24
- colorama.init(autoreset=True)
25
19
  c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
26
20
  c2 = colorama.Fore.BLUE + colorama.Back.LIGHTGREEN_EX
27
21
  c3 = colorama.Back.CYAN
@@ -66,4 +60,49 @@ def get_seleniumbase_logo():
66
60
  sb += " "
67
61
  sb += cr
68
62
  sb += cr
63
+ with suppress(Exception):
64
+ terminal_width = os.get_terminal_size().columns
65
+ if isinstance(terminal_width, int) and terminal_width >= 66:
66
+ return sb
67
+
68
+ # If the logo is wider than the screen width, use a smaller one:
69
+ r"""
70
+ ___ _ _ ___
71
+ / __| ___| |___ _ _ (_)_ _ _ __ | _ ) __ _ ______
72
+ \__ \/ -_) / -_) ' \| | \| | ' \ | _ \/ _` (_-< -_)
73
+ |___/\___|_\___|_||_|_|\_,_|_|_|_\|___/\__,_/__|___|
74
+ """
75
+ sb = " "
76
+ sb += cr
77
+ sb += "\n"
78
+ sb += c1
79
+ sb += " ___ _ _ "
80
+ sb += c2
81
+ sb += " ___ "
82
+ sb += cr
83
+ sb += "\n"
84
+ sb += c1
85
+ sb += "/ __| ___| |___ _ _ (_)_ _ _ __ "
86
+ sb += c2
87
+ sb += "| _ ) __ _ ______ "
88
+ sb += cr
89
+ sb += "\n"
90
+ sb += c1
91
+ sb += "\\__ \\/ -_) / -_) ' \\| | \\| | ' \\ "
92
+ sb += c2
93
+ sb += "| _ \\/ _` (_-< -_)"
94
+ sb += cr
95
+ sb += "\n"
96
+ sb += c1
97
+ sb += "|___/\\___|_\\___|_||_|_|\\_,_|_|_|_\\"
98
+ sb += c2
99
+ sb += "|___/\\__,_/__|___|"
100
+ sb += cr
101
+ sb += "\n"
102
+ sb += c3
103
+ sb += " "
104
+ sb += c4
105
+ sb += " "
106
+ sb += cr
107
+ sb += cr
69
108
  return sb