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.
- sbase/__init__.py +1 -0
- sbase/steps.py +7 -0
- seleniumbase/__init__.py +16 -7
- seleniumbase/__version__.py +1 -1
- seleniumbase/behave/behave_sb.py +97 -32
- seleniumbase/common/decorators.py +16 -7
- seleniumbase/config/proxy_list.py +3 -3
- seleniumbase/config/settings.py +4 -0
- seleniumbase/console_scripts/logo_helper.py +47 -8
- seleniumbase/console_scripts/run.py +345 -335
- seleniumbase/console_scripts/sb_behave_gui.py +5 -12
- seleniumbase/console_scripts/sb_caseplans.py +6 -13
- seleniumbase/console_scripts/sb_commander.py +5 -12
- seleniumbase/console_scripts/sb_install.py +62 -54
- seleniumbase/console_scripts/sb_mkchart.py +13 -20
- seleniumbase/console_scripts/sb_mkdir.py +11 -17
- seleniumbase/console_scripts/sb_mkfile.py +69 -43
- seleniumbase/console_scripts/sb_mkpres.py +13 -20
- seleniumbase/console_scripts/sb_mkrec.py +88 -21
- seleniumbase/console_scripts/sb_objectify.py +30 -30
- seleniumbase/console_scripts/sb_print.py +5 -12
- seleniumbase/console_scripts/sb_recorder.py +16 -11
- seleniumbase/core/browser_launcher.py +1658 -221
- seleniumbase/core/detect_b_ver.py +7 -8
- seleniumbase/core/log_helper.py +42 -27
- seleniumbase/core/mysql.py +1 -4
- seleniumbase/core/proxy_helper.py +35 -30
- seleniumbase/core/recorder_helper.py +24 -5
- seleniumbase/core/sb_cdp.py +1951 -0
- seleniumbase/core/sb_driver.py +162 -8
- seleniumbase/core/settings_parser.py +6 -0
- seleniumbase/core/style_sheet.py +10 -0
- seleniumbase/extensions/recorder.zip +0 -0
- seleniumbase/fixtures/base_case.py +1234 -632
- seleniumbase/fixtures/constants.py +10 -1
- seleniumbase/fixtures/js_utils.py +171 -144
- seleniumbase/fixtures/page_actions.py +177 -13
- seleniumbase/fixtures/page_utils.py +25 -53
- seleniumbase/fixtures/shared_utils.py +97 -11
- seleniumbase/js_code/active_css_js.py +1 -1
- seleniumbase/js_code/recorder_js.py +1 -1
- seleniumbase/plugins/base_plugin.py +2 -3
- seleniumbase/plugins/driver_manager.py +340 -65
- seleniumbase/plugins/pytest_plugin.py +276 -47
- seleniumbase/plugins/sb_manager.py +412 -99
- seleniumbase/plugins/selenium_plugin.py +122 -17
- seleniumbase/translate/translator.py +0 -7
- seleniumbase/undetected/__init__.py +59 -52
- seleniumbase/undetected/cdp.py +0 -1
- seleniumbase/undetected/cdp_driver/__init__.py +1 -0
- seleniumbase/undetected/cdp_driver/_contradict.py +110 -0
- seleniumbase/undetected/cdp_driver/browser.py +829 -0
- seleniumbase/undetected/cdp_driver/cdp_util.py +458 -0
- seleniumbase/undetected/cdp_driver/config.py +334 -0
- seleniumbase/undetected/cdp_driver/connection.py +639 -0
- seleniumbase/undetected/cdp_driver/element.py +1168 -0
- seleniumbase/undetected/cdp_driver/tab.py +1323 -0
- seleniumbase/undetected/dprocess.py +4 -7
- seleniumbase/undetected/options.py +6 -8
- seleniumbase/undetected/patcher.py +11 -13
- seleniumbase/undetected/reactor.py +0 -1
- seleniumbase/undetected/webelement.py +16 -3
- {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/LICENSE +1 -1
- {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/METADATA +299 -252
- {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/RECORD +68 -70
- {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/WHEEL +1 -1
- sbase/ReadMe.txt +0 -2
- seleniumbase/ReadMe.md +0 -25
- seleniumbase/common/ReadMe.md +0 -71
- seleniumbase/console_scripts/ReadMe.md +0 -731
- seleniumbase/drivers/ReadMe.md +0 -27
- seleniumbase/extensions/ReadMe.md +0 -12
- seleniumbase/masterqa/ReadMe.md +0 -61
- seleniumbase/resources/ReadMe.md +0 -31
- seleniumbase/resources/favicon.ico +0 -0
- seleniumbase/utilities/selenium_grid/ReadMe.md +0 -84
- seleniumbase/utilities/selenium_ide/ReadMe.md +0 -111
- {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.24.10.dist-info → seleniumbase-4.33.15.dist-info}/top_level.txt +0 -0
sbase/__init__.py
CHANGED
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
|
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
|
-
|
38
|
-
|
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
|
|
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.
|
2
|
+
__version__ = "4.33.15"
|
seleniumbase/behave/behave_sb.py
CHANGED
@@ -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 (
|
47
|
-
-D
|
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-
|
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
|
-
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
870
|
-
|
871
|
-
|
872
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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("
|
57
|
+
print("%s - {%s} ran for %.7f seconds." % (info, name, run_time))
|
49
58
|
elif run_time < 0.001:
|
50
|
-
print("
|
59
|
+
print("%s - {%s} ran for %.6f seconds." % (info, name, run_time))
|
51
60
|
elif run_time < 0.01:
|
52
|
-
print("
|
61
|
+
print("%s - {%s} ran for %.5f seconds." % (info, name, run_time))
|
53
62
|
elif run_time < 0.1:
|
54
|
-
print("
|
63
|
+
print("%s - {%s} ran for %.4f seconds." % (info, name, run_time))
|
55
64
|
elif run_time < 1:
|
56
|
-
print("
|
65
|
+
print("%s - {%s} ran for %.3f seconds." % (info, name, run_time))
|
57
66
|
else:
|
58
|
-
print("
|
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
|
-
% (
|
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": "
|
27
|
-
"example2": "
|
28
|
-
"example3": "socks5://
|
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,
|
seleniumbase/config/settings.py
CHANGED
@@ -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
|
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
|