seleniumbase 4.31.0__py3-none-any.whl → 4.31.1__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.
- seleniumbase/__version__.py +1 -1
- seleniumbase/behave/behave_sb.py +12 -2
- seleniumbase/console_scripts/logo_helper.py +47 -0
- seleniumbase/console_scripts/run.py +7 -4
- seleniumbase/core/browser_launcher.py +41 -5
- seleniumbase/core/sb_driver.py +11 -0
- seleniumbase/fixtures/base_case.py +17 -1
- seleniumbase/fixtures/page_utils.py +5 -2
- seleniumbase/plugins/driver_manager.py +81 -70
- seleniumbase/plugins/pytest_plugin.py +17 -2
- seleniumbase/plugins/sb_manager.py +113 -100
- seleniumbase/plugins/selenium_plugin.py +19 -2
- {seleniumbase-4.31.0.dist-info → seleniumbase-4.31.1.dist-info}/METADATA +4 -3
- {seleniumbase-4.31.0.dist-info → seleniumbase-4.31.1.dist-info}/RECORD +18 -18
- {seleniumbase-4.31.0.dist-info → seleniumbase-4.31.1.dist-info}/LICENSE +0 -0
- {seleniumbase-4.31.0.dist-info → seleniumbase-4.31.1.dist-info}/WHEEL +0 -0
- {seleniumbase-4.31.0.dist-info → seleniumbase-4.31.1.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.31.0.dist-info → seleniumbase-4.31.1.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.31.
|
2
|
+
__version__ = "4.31.1"
|
seleniumbase/behave/behave_sb.py
CHANGED
@@ -44,8 +44,9 @@ behave -D agent="User Agent String" -D demo
|
|
44
44
|
-D sjw (Skip JS Waits for readyState to be "complete" or Angular to load.)
|
45
45
|
-D wfa (Wait for AngularJS to be done loading after specific web actions.)
|
46
46
|
-D pls=PLS (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
|
47
|
-
-D headless (
|
48
|
-
-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.)
|
49
50
|
-D headed (Run tests in headed/GUI mode on Linux OS, where not default.)
|
50
51
|
-D xvfb (Run tests using the Xvfb virtual display server on Linux OS.)
|
51
52
|
-D xvfb-metrics=STRING (Set Xvfb display size on Linux: "Width,Height".)
|
@@ -144,6 +145,7 @@ def get_configured_sb(context):
|
|
144
145
|
sb.browser = "chrome"
|
145
146
|
sb.is_behave = True
|
146
147
|
sb.headless = False
|
148
|
+
sb.headless1 = False
|
147
149
|
sb.headless2 = False
|
148
150
|
sb.headless_active = False
|
149
151
|
sb.headed = False
|
@@ -296,6 +298,11 @@ def get_configured_sb(context):
|
|
296
298
|
sb.headless = True
|
297
299
|
continue
|
298
300
|
# Handle: -D headless2
|
301
|
+
if low_key == "headless1":
|
302
|
+
sb.headless1 = True
|
303
|
+
sb.headless = True
|
304
|
+
continue
|
305
|
+
# Handle: -D headless2
|
299
306
|
if low_key == "headless2":
|
300
307
|
sb.headless2 = True
|
301
308
|
continue
|
@@ -864,6 +871,7 @@ def get_configured_sb(context):
|
|
864
871
|
# Recorder Mode can still optimize scripts in "-D headless2" mode.
|
865
872
|
if sb.recorder_ext and sb.headless:
|
866
873
|
sb.headless = False
|
874
|
+
sb.headless1 = False
|
867
875
|
sb.headless2 = True
|
868
876
|
if sb.headless2 and sb.browser == "firefox":
|
869
877
|
sb.headless2 = False # Only for Chromium browsers
|
@@ -900,11 +908,13 @@ def get_configured_sb(context):
|
|
900
908
|
# Recorder Mode can still optimize scripts in --headless2 mode.
|
901
909
|
if sb.recorder_mode and sb.headless:
|
902
910
|
sb.headless = False
|
911
|
+
sb.headless1 = False
|
903
912
|
sb.headless2 = True
|
904
913
|
if not sb.headless and not sb.headless2:
|
905
914
|
sb.headed = True
|
906
915
|
if sb.browser == "safari" and sb.headless:
|
907
916
|
sb.headless = False # Safari doesn't support headless mode
|
917
|
+
sb.headless1 = False
|
908
918
|
if sb.save_screenshot_after_test and sb.no_screenshot_after_test:
|
909
919
|
sb.save_screenshot_after_test = False # "no_screenshot" has priority
|
910
920
|
if sb.servername != "localhost":
|
@@ -3,7 +3,9 @@
|
|
3
3
|
http://www.patorjk.com/software/taag/#p=display&f=Slant&t=SeleniumBase """
|
4
4
|
|
5
5
|
import colorama
|
6
|
+
import os
|
6
7
|
import sys
|
8
|
+
from contextlib import suppress
|
7
9
|
|
8
10
|
r"""
|
9
11
|
______ __ _ ____
|
@@ -66,4 +68,49 @@ def get_seleniumbase_logo():
|
|
66
68
|
sb += " "
|
67
69
|
sb += cr
|
68
70
|
sb += cr
|
71
|
+
with suppress(Exception):
|
72
|
+
terminal_width = os.get_terminal_size().columns
|
73
|
+
if isinstance(terminal_width, int) and terminal_width >= 66:
|
74
|
+
return sb
|
75
|
+
|
76
|
+
# If the logo is wider than the screen width, use a smaller one:
|
77
|
+
r"""
|
78
|
+
___ _ _ ___
|
79
|
+
/ __| ___| |___ _ _ (_)_ _ _ __ | _ ) __ _ ______
|
80
|
+
\__ \/ -_) / -_) ' \| | \| | ' \ | _ \/ _` (_-< -_)
|
81
|
+
|___/\___|_\___|_||_|_|\_,_|_|_|_\|___/\__,_/__|___|
|
82
|
+
"""
|
83
|
+
sb = " "
|
84
|
+
sb += cr
|
85
|
+
sb += "\n"
|
86
|
+
sb += c1
|
87
|
+
sb += " ___ _ _ "
|
88
|
+
sb += c2
|
89
|
+
sb += " ___ "
|
90
|
+
sb += cr
|
91
|
+
sb += "\n"
|
92
|
+
sb += c1
|
93
|
+
sb += "/ __| ___| |___ _ _ (_)_ _ _ __ "
|
94
|
+
sb += c2
|
95
|
+
sb += "| _ ) __ _ ______ "
|
96
|
+
sb += cr
|
97
|
+
sb += "\n"
|
98
|
+
sb += c1
|
99
|
+
sb += "\\__ \\/ -_) / -_) ' \\| | \\| | ' \\ "
|
100
|
+
sb += c2
|
101
|
+
sb += "| _ \\/ _` (_-< -_)"
|
102
|
+
sb += cr
|
103
|
+
sb += "\n"
|
104
|
+
sb += c1
|
105
|
+
sb += "|___/\\___|_\\___|_||_|_|\\_,_|_|_|_\\"
|
106
|
+
sb += c2
|
107
|
+
sb += "|___/\\__,_/__|___|"
|
108
|
+
sb += cr
|
109
|
+
sb += "\n"
|
110
|
+
sb += c3
|
111
|
+
sb += " "
|
112
|
+
sb += c4
|
113
|
+
sb += " "
|
114
|
+
sb += cr
|
115
|
+
sb += cr
|
69
116
|
return sb
|
@@ -54,8 +54,8 @@ else:
|
|
54
54
|
def show_usage():
|
55
55
|
show_basic_usage()
|
56
56
|
sc = ""
|
57
|
-
sc += ' Type "sbase help [COMMAND]" for specific
|
58
|
-
sc += ' For
|
57
|
+
sc += ' Type "sbase help [COMMAND]" for specific info.\n'
|
58
|
+
sc += ' For all commands, type: "seleniumbase --help".\n'
|
59
59
|
sc += ' Use "pytest" for running tests.\n'
|
60
60
|
if "linux" not in sys.platform:
|
61
61
|
c1 = colorama.Fore.BLUE + colorama.Back.LIGHTCYAN_EX
|
@@ -76,12 +76,15 @@ def show_basic_usage():
|
|
76
76
|
|
77
77
|
seleniumbase_logo = logo_helper.get_seleniumbase_logo()
|
78
78
|
print(seleniumbase_logo)
|
79
|
+
time.sleep(0.044)
|
79
80
|
print("")
|
80
|
-
time.sleep(0.
|
81
|
+
time.sleep(0.033)
|
81
82
|
show_package_location()
|
83
|
+
time.sleep(0.032)
|
82
84
|
show_version_info()
|
85
|
+
time.sleep(0.031)
|
83
86
|
print("")
|
84
|
-
time.sleep(0.
|
87
|
+
time.sleep(0.68) # Enough time to see the logo & version
|
85
88
|
sc = ""
|
86
89
|
sc += ' * USAGE: "seleniumbase [COMMAND] [PARAMETERS]"\n'
|
87
90
|
sc += ' * OR: "sbase [COMMAND] [PARAMETERS]"\n'
|
@@ -203,6 +203,8 @@ def extend_driver(driver):
|
|
203
203
|
driver.is_exact_text_visible = DM.is_exact_text_visible
|
204
204
|
driver.is_attribute_present = DM.is_attribute_present
|
205
205
|
driver.is_non_empty_text_visible = DM.is_non_empty_text_visible
|
206
|
+
driver.is_valid_url = DM.is_valid_url
|
207
|
+
driver.is_alert_present = DM.is_alert_present
|
206
208
|
driver.is_online = DM.is_online
|
207
209
|
driver.js_click = DM.js_click
|
208
210
|
driver.get_text = DM.get_text
|
@@ -1553,6 +1555,7 @@ def _set_chrome_options(
|
|
1553
1555
|
log_cdp_events,
|
1554
1556
|
no_sandbox,
|
1555
1557
|
disable_gpu,
|
1558
|
+
headless1,
|
1556
1559
|
headless2,
|
1557
1560
|
incognito,
|
1558
1561
|
guest_mode,
|
@@ -1771,7 +1774,10 @@ def _set_chrome_options(
|
|
1771
1774
|
pass # Processed After Version Check
|
1772
1775
|
elif headless:
|
1773
1776
|
if not undetectable:
|
1774
|
-
|
1777
|
+
if headless1:
|
1778
|
+
chrome_options.add_argument("--headless=old")
|
1779
|
+
else:
|
1780
|
+
chrome_options.add_argument("--headless")
|
1775
1781
|
if undetectable and servername and servername != "localhost":
|
1776
1782
|
# The Grid Node will need Chrome 109 or newer
|
1777
1783
|
chrome_options.add_argument("--headless=new")
|
@@ -2193,6 +2199,7 @@ def get_driver(
|
|
2193
2199
|
log_cdp_events=False,
|
2194
2200
|
no_sandbox=False,
|
2195
2201
|
disable_gpu=False,
|
2202
|
+
headless1=False,
|
2196
2203
|
headless2=False,
|
2197
2204
|
incognito=False,
|
2198
2205
|
guest_mode=False,
|
@@ -2406,6 +2413,7 @@ def get_driver(
|
|
2406
2413
|
log_cdp_events,
|
2407
2414
|
no_sandbox,
|
2408
2415
|
disable_gpu,
|
2416
|
+
headless1,
|
2409
2417
|
headless2,
|
2410
2418
|
incognito,
|
2411
2419
|
guest_mode,
|
@@ -2462,6 +2470,7 @@ def get_driver(
|
|
2462
2470
|
log_cdp_events,
|
2463
2471
|
no_sandbox,
|
2464
2472
|
disable_gpu,
|
2473
|
+
headless1,
|
2465
2474
|
headless2,
|
2466
2475
|
incognito,
|
2467
2476
|
guest_mode,
|
@@ -2522,6 +2531,7 @@ def get_remote_driver(
|
|
2522
2531
|
log_cdp_events,
|
2523
2532
|
no_sandbox,
|
2524
2533
|
disable_gpu,
|
2534
|
+
headless1,
|
2525
2535
|
headless2,
|
2526
2536
|
incognito,
|
2527
2537
|
guest_mode,
|
@@ -2657,6 +2667,7 @@ def get_remote_driver(
|
|
2657
2667
|
log_cdp_events,
|
2658
2668
|
no_sandbox,
|
2659
2669
|
disable_gpu,
|
2670
|
+
headless1,
|
2660
2671
|
headless2,
|
2661
2672
|
incognito,
|
2662
2673
|
guest_mode,
|
@@ -2829,6 +2840,7 @@ def get_remote_driver(
|
|
2829
2840
|
log_cdp_events,
|
2830
2841
|
no_sandbox,
|
2831
2842
|
disable_gpu,
|
2843
|
+
headless1,
|
2832
2844
|
headless2,
|
2833
2845
|
incognito,
|
2834
2846
|
guest_mode,
|
@@ -2948,6 +2960,7 @@ def get_local_driver(
|
|
2948
2960
|
log_cdp_events,
|
2949
2961
|
no_sandbox,
|
2950
2962
|
disable_gpu,
|
2963
|
+
headless1,
|
2951
2964
|
headless2,
|
2952
2965
|
incognito,
|
2953
2966
|
guest_mode,
|
@@ -3425,8 +3438,14 @@ def get_local_driver(
|
|
3425
3438
|
else:
|
3426
3439
|
pass # Will need Xvfb on Linux
|
3427
3440
|
elif headless:
|
3428
|
-
if
|
3429
|
-
|
3441
|
+
if (
|
3442
|
+
"--headless" not in edge_options.arguments
|
3443
|
+
and "--headless=old" not in edge_options.arguments
|
3444
|
+
):
|
3445
|
+
if headless1:
|
3446
|
+
edge_options.add_argument("--headless=old")
|
3447
|
+
else:
|
3448
|
+
edge_options.add_argument("--headless")
|
3430
3449
|
if mobile_emulator and not is_using_uc(undetectable, browser_name):
|
3431
3450
|
emulator_settings = {}
|
3432
3451
|
device_metrics = {}
|
@@ -3788,6 +3807,7 @@ def get_local_driver(
|
|
3788
3807
|
log_cdp_events,
|
3789
3808
|
no_sandbox,
|
3790
3809
|
disable_gpu,
|
3810
|
+
headless1,
|
3791
3811
|
headless2,
|
3792
3812
|
incognito,
|
3793
3813
|
guest_mode,
|
@@ -3960,8 +3980,14 @@ def get_local_driver(
|
|
3960
3980
|
except Exception:
|
3961
3981
|
pass # Will need Xvfb on Linux
|
3962
3982
|
elif headless:
|
3963
|
-
if
|
3964
|
-
|
3983
|
+
if (
|
3984
|
+
"--headless" not in chrome_options.arguments
|
3985
|
+
and "--headless=old" not in chrome_options.arguments
|
3986
|
+
):
|
3987
|
+
if headless1:
|
3988
|
+
chrome_options.add_argument("--headless=old")
|
3989
|
+
else:
|
3990
|
+
chrome_options.add_argument("--headless")
|
3965
3991
|
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER):
|
3966
3992
|
try:
|
3967
3993
|
make_driver_executable_if_not(LOCAL_CHROMEDRIVER)
|
@@ -4227,6 +4253,12 @@ def get_local_driver(
|
|
4227
4253
|
chrome_options.arguments.remove(
|
4228
4254
|
"--headless"
|
4229
4255
|
)
|
4256
|
+
if "--headless=old" in (
|
4257
|
+
chrome_options.arguments
|
4258
|
+
):
|
4259
|
+
chrome_options.arguments.remove(
|
4260
|
+
"--headless=old"
|
4261
|
+
)
|
4230
4262
|
uc_chrome_version = None
|
4231
4263
|
if (
|
4232
4264
|
use_version.isnumeric()
|
@@ -4300,6 +4332,7 @@ def get_local_driver(
|
|
4300
4332
|
False, # log_cdp_events
|
4301
4333
|
no_sandbox,
|
4302
4334
|
disable_gpu,
|
4335
|
+
False, # headless1
|
4303
4336
|
False, # headless2
|
4304
4337
|
incognito,
|
4305
4338
|
guest_mode,
|
@@ -4541,6 +4574,7 @@ def get_local_driver(
|
|
4541
4574
|
False, # log_cdp_events
|
4542
4575
|
no_sandbox,
|
4543
4576
|
disable_gpu,
|
4577
|
+
False, # headless1
|
4544
4578
|
False, # headless2
|
4545
4579
|
incognito,
|
4546
4580
|
guest_mode,
|
@@ -4792,6 +4826,8 @@ def get_local_driver(
|
|
4792
4826
|
)
|
4793
4827
|
if "--headless" in chrome_options.arguments:
|
4794
4828
|
chrome_options.arguments.remove("--headless")
|
4829
|
+
if "--headless=old" in chrome_options.arguments:
|
4830
|
+
chrome_options.arguments.remove("--headless=old")
|
4795
4831
|
service = ChromeService(
|
4796
4832
|
log_output=os.devnull,
|
4797
4833
|
service_args=["--disable-build-check"]
|
seleniumbase/core/sb_driver.py
CHANGED
@@ -161,6 +161,17 @@ class DriverMethods():
|
|
161
161
|
self.driver, *args, **kwargs
|
162
162
|
)
|
163
163
|
|
164
|
+
def is_valid_url(self, url):
|
165
|
+
"""Return True if the url is a valid url."""
|
166
|
+
return page_utils.is_valid_url(url)
|
167
|
+
|
168
|
+
def is_alert_present(self):
|
169
|
+
try:
|
170
|
+
self.driver.switch_to.alert
|
171
|
+
return True
|
172
|
+
except Exception:
|
173
|
+
return False
|
174
|
+
|
164
175
|
def is_online(self):
|
165
176
|
return self.driver.execute_script("return navigator.onLine;")
|
166
177
|
|
@@ -3771,6 +3771,7 @@ class BaseCase(unittest.TestCase):
|
|
3771
3771
|
log_cdp_events=None,
|
3772
3772
|
no_sandbox=None,
|
3773
3773
|
disable_gpu=None,
|
3774
|
+
headless1=None,
|
3774
3775
|
headless2=None,
|
3775
3776
|
incognito=None,
|
3776
3777
|
guest_mode=None,
|
@@ -3830,6 +3831,7 @@ class BaseCase(unittest.TestCase):
|
|
3830
3831
|
log_cdp_events - capture {"performance": "ALL", "browser": "ALL"})
|
3831
3832
|
no_sandbox - the option to enable the "No-Sandbox" feature (Chrome)
|
3832
3833
|
disable_gpu - the option to enable Chrome's "Disable GPU" feature
|
3834
|
+
headless1 - the option to use the older headless mode (Chromium)
|
3833
3835
|
headless2 - the option to use the newer headless mode (Chromium)
|
3834
3836
|
incognito - the option to enable Chrome's Incognito mode (Chrome)
|
3835
3837
|
guest_mode - the option to enable Chrome's Guest mode (Chrome)
|
@@ -3938,6 +3940,8 @@ class BaseCase(unittest.TestCase):
|
|
3938
3940
|
no_sandbox = self.no_sandbox
|
3939
3941
|
if disable_gpu is None:
|
3940
3942
|
disable_gpu = self.disable_gpu
|
3943
|
+
if headless1 is None:
|
3944
|
+
headless1 = self.headless1
|
3941
3945
|
if headless2 is None:
|
3942
3946
|
headless2 = self.headless2
|
3943
3947
|
if incognito is None:
|
@@ -4036,6 +4040,7 @@ class BaseCase(unittest.TestCase):
|
|
4036
4040
|
log_cdp_events=log_cdp_events,
|
4037
4041
|
no_sandbox=no_sandbox,
|
4038
4042
|
disable_gpu=disable_gpu,
|
4043
|
+
headless1=headless1,
|
4039
4044
|
headless2=headless2,
|
4040
4045
|
incognito=incognito,
|
4041
4046
|
guest_mode=guest_mode,
|
@@ -7808,6 +7813,13 @@ class BaseCase(unittest.TestCase):
|
|
7808
7813
|
"""Return True if the url is a valid url."""
|
7809
7814
|
return page_utils.is_valid_url(url)
|
7810
7815
|
|
7816
|
+
def is_alert_present(self):
|
7817
|
+
try:
|
7818
|
+
self.driver.switch_to.alert
|
7819
|
+
return True
|
7820
|
+
except Exception:
|
7821
|
+
return False
|
7822
|
+
|
7811
7823
|
def is_online(self):
|
7812
7824
|
"""Return True if connected to the Internet."""
|
7813
7825
|
return self.execute_script("return navigator.onLine;")
|
@@ -14324,6 +14336,10 @@ class BaseCase(unittest.TestCase):
|
|
14324
14336
|
self.env = self.environment # Add a shortened version
|
14325
14337
|
self.with_selenium = sb_config.with_selenium # Should be True
|
14326
14338
|
self.headless = sb_config.headless
|
14339
|
+
self.headless1 = sb_config.headless1
|
14340
|
+
if self.headless1:
|
14341
|
+
self.headless = True
|
14342
|
+
self.headless2 = sb_config.headless2
|
14327
14343
|
self.headless_active = False
|
14328
14344
|
sb_config.headless_active = False
|
14329
14345
|
self.headed = sb_config.headed
|
@@ -14392,7 +14408,6 @@ class BaseCase(unittest.TestCase):
|
|
14392
14408
|
self.log_cdp_events = sb_config.log_cdp_events
|
14393
14409
|
self.no_sandbox = sb_config.no_sandbox
|
14394
14410
|
self.disable_gpu = sb_config.disable_gpu
|
14395
|
-
self.headless2 = sb_config.headless2
|
14396
14411
|
self.incognito = sb_config.incognito
|
14397
14412
|
self.guest_mode = sb_config.guest_mode
|
14398
14413
|
self.dark_mode = sb_config.dark_mode
|
@@ -14768,6 +14783,7 @@ class BaseCase(unittest.TestCase):
|
|
14768
14783
|
log_cdp_events=self.log_cdp_events,
|
14769
14784
|
no_sandbox=self.no_sandbox,
|
14770
14785
|
disable_gpu=self.disable_gpu,
|
14786
|
+
headless1=self.headless1,
|
14771
14787
|
headless2=self.headless2,
|
14772
14788
|
incognito=self.incognito,
|
14773
14789
|
guest_mode=self.guest_mode,
|
@@ -163,12 +163,15 @@ def is_valid_url(url):
|
|
163
163
|
r"(?:/?|[/?]\S+)$",
|
164
164
|
re.IGNORECASE,
|
165
165
|
)
|
166
|
-
|
166
|
+
if (
|
167
167
|
regex.match(url)
|
168
168
|
or url.startswith((
|
169
169
|
"about:", "blob:", "chrome:", "data:", "edge:", "file:"
|
170
170
|
))
|
171
|
-
)
|
171
|
+
):
|
172
|
+
return True
|
173
|
+
else:
|
174
|
+
return False
|
172
175
|
|
173
176
|
|
174
177
|
def _get_unique_links(page_url, soup):
|
@@ -65,8 +65,9 @@ class DriverContext():
|
|
65
65
|
|
66
66
|
def Driver(
|
67
67
|
browser=None, # Choose from "chrome", "edge", "firefox", or "safari".
|
68
|
-
headless=None, #
|
69
|
-
|
68
|
+
headless=None, # Use the default headless mode for Chromium and Firefox.
|
69
|
+
headless1=None, # Use Chromium's old headless mode. (Fast, but limited)
|
70
|
+
headless2=None, # Use Chromium's new headless mode. (Has more features)
|
70
71
|
headed=None, # Run tests in headed/GUI mode on Linux, where not default.
|
71
72
|
locale_code=None, # Set the Language Locale Code for the web browser.
|
72
73
|
protocol=None, # The Selenium Grid protocol: "http" or "https".
|
@@ -154,74 +155,75 @@ def Driver(
|
|
154
155
|
|
155
156
|
Optional Parameters:
|
156
157
|
--------------------
|
157
|
-
browser:
|
158
|
-
headless:
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
158
|
+
browser (str): Choose from "chrome", "edge", "firefox", or "safari".
|
159
|
+
headless (bool): Use the default headless mode for Chromium and Firefox.
|
160
|
+
headless1 (bool): Use Chromium's old headless mode. (Fast, but limited)
|
161
|
+
headless2 (bool): Use Chromium's new headless mode. (Has more features)
|
162
|
+
headed (bool): Run tests in headed/GUI mode on Linux, where not default.
|
163
|
+
locale_code (str): Set the Language Locale Code for the web browser.
|
164
|
+
protocol (str): The Selenium Grid protocol: "http" or "https".
|
165
|
+
servername (str): The Selenium Grid server/IP used for tests.
|
166
|
+
port (int): The Selenium Grid port used by the test server.
|
167
|
+
proxy (str): Use proxy. Format: "SERVER:PORT" or "USER:PASS@SERVER:PORT".
|
168
|
+
proxy_bypass_list (str): Skip proxy when using the listed domains.
|
169
|
+
proxy_pac_url (str): Use PAC file. (Format: URL or USERNAME:PASSWORD@URL)
|
170
|
+
multi_proxy (bool): Allow multiple proxies with auth when multi-threaded.
|
171
|
+
agent (str): Modify the web browser's User-Agent string.
|
172
|
+
cap_file (str): The desired capabilities to use with a Selenium Grid.
|
173
|
+
cap_string (str): The desired capabilities to use with a Selenium Grid.
|
174
|
+
recorder_ext (bool): Enables the SeleniumBase Recorder Chromium extension.
|
175
|
+
disable_js (bool): Disable JavaScript on websites. Pages might break!
|
176
|
+
disable_csp (bool): Disable the Content Security Policy of websites.
|
177
|
+
enable_ws (bool): Enable Web Security on Chromium-based browsers.
|
178
|
+
disable_ws (bool): Reverse of "enable_ws". (None and False are different)
|
179
|
+
enable_sync (bool): Enable "Chrome Sync" on websites.
|
180
|
+
use_auto_ext (bool): Use Chrome's automation extension.
|
181
|
+
undetectable (bool): Use undetected-chromedriver to evade bot-detection.
|
182
|
+
uc_cdp_events (bool): Capture CDP events in undetected-chromedriver mode.
|
183
|
+
uc_subprocess (bool): Use undetected-chromedriver as a subprocess.
|
184
|
+
log_cdp_events (bool): Capture {"performance": "ALL", "browser": "ALL"}
|
185
|
+
no_sandbox (bool): (DEPRECATED) - "--no-sandbox" is always used now.
|
186
|
+
disable_gpu (bool): (DEPRECATED) - GPU is disabled if not "swiftshader".
|
187
|
+
incognito (bool): Enable Chromium's Incognito mode.
|
188
|
+
guest_mode (bool): Enable Chromium's Guest mode.
|
189
|
+
dark_mode (bool): Enable Chromium's Dark mode.
|
190
|
+
devtools (bool): Open Chromium's DevTools when the browser opens.
|
191
|
+
remote_debug (bool): Enable Chrome's Debugger on "http://localhost:9222".
|
192
|
+
enable_3d_apis (bool): Enable WebGL and 3D APIs.
|
193
|
+
swiftshader (bool): Chrome: --use-gl=angle / --use-angle=swiftshader-webgl
|
194
|
+
ad_block_on (bool): Block some types of display ads from loading.
|
195
|
+
host_resolver_rules (str): Set host-resolver-rules, comma-separated.
|
196
|
+
block_images (bool): Block images from loading during tests.
|
197
|
+
do_not_track (bool): Tell websites that you don't want to be tracked.
|
198
|
+
chromium_arg (str): "ARG=N,ARG2" (Set Chromium args, ","-separated.)
|
199
|
+
firefox_arg (str): "ARG=N,ARG2" (Set Firefox args, comma-separated.)
|
200
|
+
firefox_pref (str): SET (Set Firefox PREFERENCE:VALUE set, ","-separated)
|
201
|
+
user_data_dir (str): Set the Chrome user data directory to use.
|
202
|
+
extension_zip (str): Load a Chrome Extension .zip|.crx, comma-separated.
|
203
|
+
extension_dir (str): Load a Chrome Extension directory, comma-separated.
|
204
|
+
disable_features (str): "F1,F2" (Disable Chrome features, ","-separated.)
|
205
|
+
binary_location (str): Set path of the Chromium browser binary to use.
|
206
|
+
driver_version (str): Set the chromedriver or uc_driver version to use.
|
207
|
+
page_load_strategy (str): Set Chrome PLS to "normal", "eager", or "none".
|
208
|
+
use_wire (bool): Use selenium-wire's webdriver over selenium webdriver.
|
209
|
+
external_pdf (bool): Set Chrome "plugins.always_open_pdf_externally":True
|
210
|
+
window_position (x,y): Set the browser's starting window position: "X,Y"
|
211
|
+
window_size (w,h): Set the browser's starting window size: "Width,Height"
|
212
|
+
is_mobile (bool): Use the mobile device emulator while running tests.
|
213
|
+
mobile (bool): Shortcut / Duplicate of "is_mobile".
|
214
|
+
d_width (int): Set device width
|
215
|
+
d_height (int): Set device height
|
216
|
+
d_p_r (float): Set device pixel ratio
|
217
|
+
uc (bool): Shortcut / Duplicate of "undetectable".
|
218
|
+
undetected (bool): Shortcut / Duplicate of "undetectable".
|
219
|
+
uc_cdp (bool): Shortcut / Duplicate of "uc_cdp_events".
|
220
|
+
uc_sub (bool): Shortcut / Duplicate of "uc_subprocess".
|
221
|
+
log_cdp (bool): Shortcut / Duplicate of "log_cdp_events".
|
222
|
+
ad_block (bool): Shortcut / Duplicate of "ad_block_on".
|
223
|
+
server (str): Shortcut / Duplicate of "servername".
|
224
|
+
guest (bool): Shortcut / Duplicate of "guest_mode".
|
225
|
+
wire (bool): Shortcut / Duplicate of "use_wire".
|
226
|
+
pls (str): Shortcut / Duplicate of "page_load_strategy".
|
225
227
|
"""
|
226
228
|
from seleniumbase import config as sb_config
|
227
229
|
from seleniumbase.config import settings
|
@@ -336,6 +338,13 @@ def Driver(
|
|
336
338
|
headless = True
|
337
339
|
else:
|
338
340
|
headless = False
|
341
|
+
if headless1 is None:
|
342
|
+
if "--headless1" in sys_argv:
|
343
|
+
headless1 = True
|
344
|
+
else:
|
345
|
+
headless1 = False
|
346
|
+
if headless1:
|
347
|
+
headless = True
|
339
348
|
if headless2 is None:
|
340
349
|
if "--headless2" in sys_argv:
|
341
350
|
headless2 = True
|
@@ -601,6 +610,7 @@ def Driver(
|
|
601
610
|
headless = True
|
602
611
|
if recorder_mode and headless:
|
603
612
|
headless = False
|
613
|
+
headless1 = False
|
604
614
|
headless2 = True
|
605
615
|
if headless2 and browser == "firefox":
|
606
616
|
headless2 = False # Only for Chromium browsers
|
@@ -773,6 +783,7 @@ def Driver(
|
|
773
783
|
log_cdp_events=log_cdp_events,
|
774
784
|
no_sandbox=no_sandbox,
|
775
785
|
disable_gpu=disable_gpu,
|
786
|
+
headless1=headless1,
|
776
787
|
headless2=headless2,
|
777
788
|
incognito=incognito,
|
778
789
|
guest_mode=guest_mode,
|
@@ -62,8 +62,9 @@ def pytest_addoption(parser):
|
|
62
62
|
--sjw (Skip JS Waits for readyState to be "complete" or Angular to load.)
|
63
63
|
--wfa (Wait for AngularJS to be done loading after specific web actions.)
|
64
64
|
--pls=PLS (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
|
65
|
-
--headless (
|
66
|
-
--
|
65
|
+
--headless (The default headless mode. Linux uses this mode by default.)
|
66
|
+
--headless1 (Use Chrome's old headless mode. Fast, but has limitations.)
|
67
|
+
--headless2 (Use Chrome's new headless mode, which supports extensions.)
|
67
68
|
--headed (Run tests in headed/GUI mode on Linux OS, where not default.)
|
68
69
|
--xvfb (Run tests using the Xvfb virtual display server on Linux OS.)
|
69
70
|
--xvfb-metrics=STRING (Set Xvfb display size on Linux: "Width,Height".)
|
@@ -700,6 +701,15 @@ def pytest_addoption(parser):
|
|
700
701
|
UNLESS using a virtual display with Xvfb.
|
701
702
|
Default: False on Mac/Windows. True on Linux.""",
|
702
703
|
)
|
704
|
+
parser.addoption(
|
705
|
+
"--headless1",
|
706
|
+
action="store_true",
|
707
|
+
dest="headless1",
|
708
|
+
default=False,
|
709
|
+
help="""This option activates the old headless mode,
|
710
|
+
which is faster, but has limitations.
|
711
|
+
(May be phased out by Chrome in the future.)""",
|
712
|
+
)
|
703
713
|
parser.addoption(
|
704
714
|
"--headless2",
|
705
715
|
action="store_true",
|
@@ -1533,6 +1543,9 @@ def pytest_configure(config):
|
|
1533
1543
|
sb_config.mobile_emulator = config.getoption("mobile_emulator")
|
1534
1544
|
sb_config.device_metrics = config.getoption("device_metrics")
|
1535
1545
|
sb_config.headless = config.getoption("headless")
|
1546
|
+
sb_config.headless1 = config.getoption("headless1")
|
1547
|
+
if sb_config.headless1:
|
1548
|
+
sb_config.headless = True
|
1536
1549
|
sb_config.headless2 = config.getoption("headless2")
|
1537
1550
|
if sb_config.headless2 and sb_config.browser == "firefox":
|
1538
1551
|
sb_config.headless2 = False # Only for Chromium browsers
|
@@ -1759,6 +1772,7 @@ def pytest_configure(config):
|
|
1759
1772
|
# Recorder Mode can still optimize scripts in --headless2 mode.
|
1760
1773
|
if sb_config.recorder_mode and sb_config.headless:
|
1761
1774
|
sb_config.headless = False
|
1775
|
+
sb_config.headless1 = False
|
1762
1776
|
sb_config.headless2 = True
|
1763
1777
|
|
1764
1778
|
if not sb_config.headless and not sb_config.headless2:
|
@@ -1779,6 +1793,7 @@ def pytest_configure(config):
|
|
1779
1793
|
|
1780
1794
|
if sb_config.browser == "safari" and sb_config.headless:
|
1781
1795
|
sb_config.headless = False # Safari doesn't support headless mode
|
1796
|
+
sb_config.headless1 = False
|
1782
1797
|
|
1783
1798
|
if sb_config.dash_title:
|
1784
1799
|
constants.Dashboard.TITLE = sb_config.dash_title.replace("_", " ")
|
@@ -32,8 +32,9 @@ def SB(
|
|
32
32
|
rtf=None, # Shortcut / Duplicate of "raise_test_failure".
|
33
33
|
raise_test_failure=None, # If "test" mode, raise Exception on 1st failure.
|
34
34
|
browser=None, # Choose from "chrome", "edge", "firefox", or "safari".
|
35
|
-
headless=None, #
|
36
|
-
|
35
|
+
headless=None, # Use the default headless mode for Chromium and Firefox.
|
36
|
+
headless1=None, # Use Chromium's old headless mode. (Fast, but limited)
|
37
|
+
headless2=None, # Use Chromium's new headless mode. (Has more features)
|
37
38
|
locale_code=None, # Set the Language Locale Code for the web browser.
|
38
39
|
protocol=None, # The Selenium Grid protocol: "http" or "https".
|
39
40
|
servername=None, # The Selenium Grid server/IP used for tests.
|
@@ -146,104 +147,105 @@ def SB(
|
|
146
147
|
|
147
148
|
Optional Parameters:
|
148
149
|
--------------------
|
149
|
-
test: Test Mode: Output, Logging, Continue on failure unless "rtf".
|
150
|
-
rtf: Shortcut / Duplicate of "raise_test_failure".
|
151
|
-
raise_test_failure: If "test" mode, raise Exception on 1st failure.
|
152
|
-
browser: Choose from "chrome", "edge", "firefox", or "safari".
|
153
|
-
headless:
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
150
|
+
test (bool): Test Mode: Output, Logging, Continue on failure unless "rtf".
|
151
|
+
rtf (bool): Shortcut / Duplicate of "raise_test_failure".
|
152
|
+
raise_test_failure (bool): If "test" mode, raise Exception on 1st failure.
|
153
|
+
browser (str): Choose from "chrome", "edge", "firefox", or "safari".
|
154
|
+
headless (bool): Use the default headless mode for Chromium and Firefox.
|
155
|
+
headless1 (bool): Use Chromium's old headless mode. (Fast, but limited)
|
156
|
+
headless2 (bool): Use Chromium's new headless mode. (Has more features)
|
157
|
+
locale_code (str): Set the Language Locale Code for the web browser.
|
158
|
+
protocol (str): The Selenium Grid protocol: "http" or "https".
|
159
|
+
servername (str): The Selenium Grid server/IP used for tests.
|
160
|
+
port (int): The Selenium Grid port used by the test server.
|
161
|
+
proxy (str): Use proxy. Format: "SERVER:PORT" or "USER:PASS@SERVER:PORT".
|
162
|
+
proxy_bypass_list (str): Skip proxy when using the listed domains.
|
163
|
+
proxy_pac_url (str): Use PAC file. (Format: URL or USERNAME:PASSWORD@URL)
|
164
|
+
multi_proxy (bool): # Allow multiple proxies with auth when multithreaded.
|
165
|
+
agent (str): Modify the web browser's User-Agent string.
|
166
|
+
cap_file (str): The desired capabilities to use with a Selenium Grid.
|
167
|
+
cap_string (str): The desired capabilities to use with a Selenium Grid.
|
168
|
+
recorder_ext (bool): Enables the SeleniumBase Recorder Chromium extension.
|
169
|
+
disable_js (bool): Disable JavaScript on websites. Pages might break!
|
170
|
+
disable_csp (bool): Disable the Content Security Policy of websites.
|
171
|
+
enable_ws (bool): Enable Web Security on Chromium-based browsers.
|
172
|
+
enable_sync (bool): Enable "Chrome Sync" on websites.
|
173
|
+
use_auto_ext (bool): Use Chrome's automation extension.
|
174
|
+
undetectable (bool): Use undetected-chromedriver to evade bot-detection.
|
175
|
+
uc_cdp_events (bool): Capture CDP events in undetected-chromedriver mode.
|
176
|
+
uc_subprocess (bool): Use undetected-chromedriver as a subprocess.
|
177
|
+
log_cdp_events (bool): Capture {"performance": "ALL", "browser": "ALL"}
|
178
|
+
incognito (bool): Enable Chromium's Incognito mode.
|
179
|
+
guest_mode (bool): Enable Chromium's Guest mode.
|
180
|
+
dark_mode (bool): Enable Chromium's Dark mode.
|
181
|
+
devtools (bool): Open Chromium's DevTools when the browser opens.
|
182
|
+
remote_debug (bool): Enable Chrome's Debugger on "http://localhost:9222".
|
183
|
+
enable_3d_apis (bool): Enable WebGL and 3D APIs.
|
184
|
+
swiftshader (bool): Chrome: --use-gl=angle / --use-angle=swiftshader-webgl
|
185
|
+
ad_block_on (bool): Block some types of display ads from loading.
|
186
|
+
host_resolver_rules (str): Set host-resolver-rules, comma-separated.
|
187
|
+
block_images (bool): Block images from loading during tests.
|
188
|
+
do_not_track (bool): Tell websites that you don't want to be tracked.
|
189
|
+
chromium_arg (str): "ARG=N,ARG2" (Set Chromium args, ","-separated.)
|
190
|
+
firefox_arg (str): "ARG=N,ARG2" (Set Firefox args, comma-separated.)
|
191
|
+
firefox_pref (str): SET (Set Firefox PREFERENCE:VALUE set, ","-separated)
|
192
|
+
user_data_dir (str): Set the Chrome user data directory to use.
|
193
|
+
extension_zip (str): Load a Chrome Extension .zip|.crx, comma-separated.
|
194
|
+
extension_dir (str): Load a Chrome Extension directory, comma-separated.
|
195
|
+
disable_features (str): "F1,F2" (Disable Chrome features, ","-separated.)
|
196
|
+
binary_location (str): Set path of the Chromium browser binary to use.
|
197
|
+
driver_version (str): Set the chromedriver or uc_driver version to use.
|
198
|
+
skip_js_waits (bool): Skip JS Waits (readyState=="complete" and Angular).
|
199
|
+
wait_for_angularjs (bool): Wait for AngularJS to load after some actions.
|
200
|
+
use_wire (bool): Use selenium-wire's webdriver over selenium webdriver.
|
201
|
+
external_pdf (bool): Set Chrome "plugins.always_open_pdf_externally":True.
|
202
|
+
window_position (x,y): Set the browser's starting window position: "X,Y"
|
203
|
+
window_size (w,h): Set the browser's starting window size: "Width,Height"
|
204
|
+
is_mobile (bool): Use the mobile device emulator while running tests.
|
205
|
+
mobile (bool): Shortcut / Duplicate of "is_mobile".
|
206
|
+
device_metrics (w,h,pr): Mobile metrics: "CSSWidth,CSSHeight,PixelRatio"
|
207
|
+
xvfb (bool): Run tests using the Xvfb virtual display server on Linux OS.
|
208
|
+
xvfb_metrics (w,h): Set Xvfb display size on Linux: "Width,Height".
|
209
|
+
start_page (str): The starting URL for the web browser when tests begin.
|
210
|
+
rec_print (bool): If Recorder is enabled, prints output after tests end.
|
211
|
+
rec_behave (bool): Like Recorder Mode, but also generates behave-gherkin.
|
212
|
+
record_sleep (bool): If Recorder enabled, also records self.sleep calls.
|
213
|
+
data (str): Extra test data. Access with "self.data" in tests.
|
214
|
+
var1 (str): Extra test data. Access with "self.var1" in tests.
|
215
|
+
var2 (str): Extra test data. Access with "self.var2" in tests.
|
216
|
+
var3 (str): Extra test data. Access with "self.var3" in tests.
|
217
|
+
variables (dict): Extra test data. Access with "self.variables".
|
218
|
+
account (str): Set account. Access with "self.account" in tests.
|
219
|
+
environment (str): Set the test env. Access with "self.env" in tests.
|
220
|
+
headed (bool): Run tests in headed/GUI mode on Linux, where not default.
|
221
|
+
maximize (bool): Start tests with the browser window maximized.
|
222
|
+
disable_ws (bool): Reverse of "enable_ws". (None and False are different)
|
223
|
+
disable_beforeunload (bool): Disable the "beforeunload" event on Chromium.
|
224
|
+
settings_file (str): A file for overriding default SeleniumBase settings.
|
225
|
+
uc (bool): Shortcut / Duplicate of "undetectable".
|
226
|
+
undetected (bool): Shortcut / Duplicate of "undetectable".
|
227
|
+
uc_cdp (bool): Shortcut / Duplicate of "uc_cdp_events".
|
228
|
+
uc_sub (bool): Shortcut / Duplicate of "uc_subprocess".
|
229
|
+
log_cdp (bool): Shortcut / Duplicate of "log_cdp_events".
|
230
|
+
ad_block (bool): Shortcut / Duplicate of "ad_block_on".
|
231
|
+
server (str): Shortcut / Duplicate of "servername".
|
232
|
+
guest (bool): Shortcut / Duplicate of "guest_mode".
|
233
|
+
wire (bool): Shortcut / Duplicate of "use_wire".
|
234
|
+
pls (str): Shortcut / Duplicate of "page_load_strategy".
|
235
|
+
sjw (bool): Shortcut / Duplicate of "skip_js_waits".
|
236
|
+
wfa (bool): Shortcut / Duplicate of "wait_for_angularjs".
|
237
|
+
save_screenshot (bool): Save a screenshot at the end of each test.
|
238
|
+
no_screenshot (bool): No screenshots saved unless tests directly ask it.
|
239
|
+
page_load_strategy (str): Set Chrome PLS to "normal", "eager", or "none".
|
240
|
+
timeout_multiplier (float): Multiplies the default timeout values.
|
241
|
+
js_checking_on (bool): Check for JavaScript errors after page loads.
|
242
|
+
slow (bool): Slow down the automation. Faster than using Demo Mode.
|
243
|
+
demo (bool): Slow down and visually see test actions as they occur.
|
244
|
+
demo_sleep (float): SECONDS (Set wait time after Slow & Demo Mode actions)
|
245
|
+
message_duration (float): SECONDS (The time length for Messenger alerts.)
|
246
|
+
highlights (int): Number of highlight animations for Demo Mode actions.
|
247
|
+
interval (float): SECONDS (Autoplay interval for SB Slides & Tour steps.)
|
248
|
+
time_limit (float): SECONDS (Safely fail tests that exceed the time limit)
|
247
249
|
"""
|
248
250
|
import os
|
249
251
|
import sys
|
@@ -401,6 +403,13 @@ def SB(
|
|
401
403
|
headless = True
|
402
404
|
else:
|
403
405
|
headless = False
|
406
|
+
if headless1 is None:
|
407
|
+
if "--headless1" in sys_argv:
|
408
|
+
headless1 = True
|
409
|
+
else:
|
410
|
+
headless1 = False
|
411
|
+
if headless1:
|
412
|
+
headless = True
|
404
413
|
if headless2 is None:
|
405
414
|
if "--headless2" in sys_argv:
|
406
415
|
headless2 = True
|
@@ -672,6 +681,7 @@ def SB(
|
|
672
681
|
recorder_ext = True
|
673
682
|
if recorder_mode and headless:
|
674
683
|
headless = False
|
684
|
+
headless1 = False
|
675
685
|
headless2 = True
|
676
686
|
sb_config.proxy_driver = False
|
677
687
|
if "--proxy-driver" in sys_argv or "--proxy_driver" in sys_argv:
|
@@ -801,6 +811,7 @@ def SB(
|
|
801
811
|
save_screenshot = False # "no_screenshot" has priority
|
802
812
|
if browser == "safari" and headless:
|
803
813
|
headless = False # Safari doesn't support headless mode
|
814
|
+
headless1 = False
|
804
815
|
if js_checking_on is None:
|
805
816
|
if "--check-js" in sys_argv:
|
806
817
|
js_checking_on = True
|
@@ -921,6 +932,7 @@ def SB(
|
|
921
932
|
sb_config.is_nosetest = False
|
922
933
|
sb_config.is_context_manager = True
|
923
934
|
sb_config.headless = headless
|
935
|
+
sb_config.headless1 = headless1
|
924
936
|
sb_config.headless2 = headless2
|
925
937
|
sb_config.headed = headed
|
926
938
|
sb_config.xvfb = xvfb
|
@@ -1026,6 +1038,7 @@ def SB(
|
|
1026
1038
|
sb.is_nosetest = False
|
1027
1039
|
sb.is_context_manager = sb_config.is_context_manager
|
1028
1040
|
sb.headless = sb_config.headless
|
1041
|
+
sb.headless1 = sb_config.headless1
|
1029
1042
|
sb.headless2 = sb_config.headless2
|
1030
1043
|
sb.headed = sb_config.headed
|
1031
1044
|
sb.xvfb = sb_config.xvfb
|
@@ -43,8 +43,9 @@ class SeleniumBrowser(Plugin):
|
|
43
43
|
--sjw (Skip JS Waits for readyState to be "complete" or Angular to load.)
|
44
44
|
--wfa (Wait for AngularJS to be done loading after specific web actions.)
|
45
45
|
--pls=PLS (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
|
46
|
-
--headless (
|
47
|
-
--
|
46
|
+
--headless (The default headless mode. Linux uses this mode by default.)
|
47
|
+
--headless1 (Use Chrome's old headless mode. Fast, but has limitations.)
|
48
|
+
--headless2 (Use Chrome's new headless mode, which supports extensions.)
|
48
49
|
--headed (Run tests in headed/GUI mode on Linux OS, where not default.)
|
49
50
|
--xvfb (Run tests using the Xvfb virtual display server on Linux OS.)
|
50
51
|
--xvfb-metrics=STRING (Set Xvfb display size on Linux: "Width,Height".)
|
@@ -437,6 +438,15 @@ class SeleniumBrowser(Plugin):
|
|
437
438
|
UNLESS using a virtual display with Xvfb.
|
438
439
|
Default: False on Mac/Windows. True on Linux.""",
|
439
440
|
)
|
441
|
+
parser.addoption(
|
442
|
+
"--headless1",
|
443
|
+
action="store_true",
|
444
|
+
dest="headless1",
|
445
|
+
default=False,
|
446
|
+
help="""This option activates the old headless mode,
|
447
|
+
which is faster, but has limitations.
|
448
|
+
(May be phased out by Chrome in the future.)""",
|
449
|
+
)
|
440
450
|
parser.addoption(
|
441
451
|
"--headless2",
|
442
452
|
action="store_true",
|
@@ -1009,6 +1019,7 @@ class SeleniumBrowser(Plugin):
|
|
1009
1019
|
browser = self.options.browser
|
1010
1020
|
test.test.browser = browser
|
1011
1021
|
test.test.headless = None
|
1022
|
+
test.test.headless1 = None
|
1012
1023
|
test.test.headless2 = None
|
1013
1024
|
# As a shortcut, you can use "--edge" instead of "--browser=edge", etc,
|
1014
1025
|
# but you can only specify one default browser. (Default: chrome)
|
@@ -1147,9 +1158,13 @@ class SeleniumBrowser(Plugin):
|
|
1147
1158
|
test.test.cap_file = self.options.cap_file
|
1148
1159
|
test.test.cap_string = self.options.cap_string
|
1149
1160
|
test.test.headless = self.options.headless
|
1161
|
+
test.test.headless1 = self.options.headless1
|
1162
|
+
if test.test.headless1:
|
1163
|
+
test.test.headless = True
|
1150
1164
|
test.test.headless2 = self.options.headless2
|
1151
1165
|
if test.test.headless and test.test.browser == "safari":
|
1152
1166
|
test.test.headless = False # Safari doesn't use headless
|
1167
|
+
test.test.headless1 = False
|
1153
1168
|
if test.test.headless2 and test.test.browser == "firefox":
|
1154
1169
|
test.test.headless2 = False # Only for Chromium browsers
|
1155
1170
|
test.test.headless = True # Firefox has regular headless
|
@@ -1294,8 +1309,10 @@ class SeleniumBrowser(Plugin):
|
|
1294
1309
|
# Recorder Mode can still optimize scripts in --headless2 mode.
|
1295
1310
|
if self.options.recorder_mode and self.options.headless:
|
1296
1311
|
self.options.headless = False
|
1312
|
+
self.options.headless1 = False
|
1297
1313
|
self.options.headless2 = True
|
1298
1314
|
test.test.headless = False
|
1315
|
+
test.test.headless1 = False
|
1299
1316
|
test.test.headless2 = True
|
1300
1317
|
if not self.options.headless and not self.options.headless2:
|
1301
1318
|
self.options.headed = True
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.31.
|
3
|
+
Version: 4.31.1
|
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
|
@@ -821,8 +821,9 @@ pytest test_coffee_cart.py --trace
|
|
821
821
|
--sjw # (Skip JS Waits for readyState to be "complete" or Angular to load.)
|
822
822
|
--wfa # (Wait for AngularJS to be done loading after specific web actions.)
|
823
823
|
--pls=PLS # (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
|
824
|
-
--headless # (
|
825
|
-
--
|
824
|
+
--headless # (The default headless mode. Linux uses this mode by default.)
|
825
|
+
--headless1 # (Use Chrome's old headless mode. Fast, but has limitations.)
|
826
|
+
--headless2 # (Use Chrome's new headless mode, which supports extensions.)
|
826
827
|
--headed # (Run tests in headed/GUI mode on Linux OS, where not default.)
|
827
828
|
--xvfb # (Run tests using the Xvfb virtual display server on Linux OS.)
|
828
829
|
--xvfb-metrics=STRING # (Set Xvfb display size on Linux: "Width,Height".)
|
@@ -3,10 +3,10 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
|
|
3
3
|
sbase/steps.py,sha256=bKT_u5bJkKzYWEuAXi9NVVRYYxQRCM1_YJUrNFFRVPY,42865
|
4
4
|
seleniumbase/__init__.py,sha256=pXetYtgSNEM2KRcZedpSSqE52Kr3spkOD6DjZO1Wsu4,2236
|
5
5
|
seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
|
6
|
-
seleniumbase/__version__.py,sha256=
|
6
|
+
seleniumbase/__version__.py,sha256=ZPjiQBuD0UdNKlKtSQnk1zCFPlVf6h5pTkS742IHrJc,46
|
7
7
|
seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
|
9
|
-
seleniumbase/behave/behave_sb.py,sha256=
|
9
|
+
seleniumbase/behave/behave_sb.py,sha256=B8v7bR4Kie0RRYph9i43OT3PHhHent_hhB6uQUzVZ0I,59189
|
10
10
|
seleniumbase/behave/steps.py,sha256=8-N-NB2tnDsxaP4LSg-uSBgbwZYMS6ZEL1oggO1PCoU,390
|
11
11
|
seleniumbase/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
12
|
seleniumbase/common/decorators.py,sha256=LJnAgg0RG3kDOFb8tpyq1zjmpv9ks6Tjg8GwgIn1YuY,7633
|
@@ -19,9 +19,9 @@ seleniumbase/config/ad_block_list.py,sha256=qCQvbpONdSXk6q5tMwLuOswGYE1Syd8cy5TM
|
|
19
19
|
seleniumbase/config/proxy_list.py,sha256=tSdk82_6pPqClotHMl3YOTlxi9IIEppHmCoQDkZXLqw,1123
|
20
20
|
seleniumbase/config/settings.py,sha256=cAMmoFBQ6g8GCJIsRsSwGsP1_fJxhADxjHq30lFB18g,7815
|
21
21
|
seleniumbase/console_scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
-
seleniumbase/console_scripts/logo_helper.py,sha256=
|
22
|
+
seleniumbase/console_scripts/logo_helper.py,sha256=GoCH_tTSPd-oGAacgFPpKw0MnJ3_i9eacxXdJMwNoH8,3136
|
23
23
|
seleniumbase/console_scripts/rich_helper.py,sha256=U_zvXpalxVV8rtg8c8EnNNmnh45tii3AV5ZV3O3KbGA,2234
|
24
|
-
seleniumbase/console_scripts/run.py,sha256=
|
24
|
+
seleniumbase/console_scripts/run.py,sha256=bc4yk6NgMVVVD2ca6XsmL_4hmpOz6AS4MrTAV1gTgCk,59354
|
25
25
|
seleniumbase/console_scripts/sb_behave_gui.py,sha256=Sm8OVgq1SJ6F-8Dl-xflglEmOpNJn4C_-ZPuHRiZvTM,15375
|
26
26
|
seleniumbase/console_scripts/sb_caseplans.py,sha256=77Ocuok2v36x7i1Qmp6sGSdDf3H5y6gPB5QtxHHcjgo,18373
|
27
27
|
seleniumbase/console_scripts/sb_commander.py,sha256=SNBOApj4JV_jtdoV7WPFVSWhFqLkPWOpFB8KPKYufGU,13557
|
@@ -36,7 +36,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=yo641b_OdSE0GUauOyxk-QrNeIjYzbRY
|
|
36
36
|
seleniumbase/console_scripts/sb_recorder.py,sha256=QazacANTQgoc76abAfFUV0d4ja1o-bbsoX9sTPZr_eg,11134
|
37
37
|
seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
38
38
|
seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
|
39
|
-
seleniumbase/core/browser_launcher.py,sha256=
|
39
|
+
seleniumbase/core/browser_launcher.py,sha256=udC8RtY7E6rcw5m5zkrpQZLtyz5yXFiwL7hmub8Iw5g,204822
|
40
40
|
seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
|
41
41
|
seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
|
42
42
|
seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
|
@@ -50,7 +50,7 @@ seleniumbase/core/proxy_helper.py,sha256=cXhu8ErK9Vjdm82RMaQj7hEq_yUWizSp6LyiD50
|
|
50
50
|
seleniumbase/core/recorder_helper.py,sha256=fNGjbapXmEsht54x1o6Igk198QdnPxDDnjUOzQxNhNQ,25055
|
51
51
|
seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
|
52
52
|
seleniumbase/core/s3_manager.py,sha256=bkeI8I4y19ebWuQG1oEZV5qJbotC6eN8vin31OCNWJk,3521
|
53
|
-
seleniumbase/core/sb_driver.py,sha256=
|
53
|
+
seleniumbase/core/sb_driver.py,sha256=_oC9esOgxhKXssMEzS-3gfNuqevJSr8eZ39ClL4ZuSk,10037
|
54
54
|
seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
|
55
55
|
seleniumbase/core/settings_parser.py,sha256=KokVXpCiGZhJ-D4Bo-hizPz5r-iefzWoiTANu9zNaq4,7504
|
56
56
|
seleniumbase/core/style_sheet.py,sha256=tPpJ1xl6Kuw425Z-3Y0OgVRLGXk_ciBDREZjXk_NuPE,11395
|
@@ -64,13 +64,13 @@ seleniumbase/extensions/disable_csp.zip,sha256=YMifIIgEBiLrEFrS1sfW4Exh4br1V4oK1
|
|
64
64
|
seleniumbase/extensions/recorder.zip,sha256=OOyzF-Ize2cSRu1CqhzSAq5vusI9hqLLd2OIApUHesI,11918
|
65
65
|
seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
|
66
66
|
seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
67
|
-
seleniumbase/fixtures/base_case.py,sha256=
|
67
|
+
seleniumbase/fixtures/base_case.py,sha256=Rz0gC0gAse85jcV4iiY_fxLaoq6-QJTcUAVNk7DVOhM,702330
|
68
68
|
seleniumbase/fixtures/constants.py,sha256=TapuGLdERtvZPGMblVXkNGybr8tj8FMtN3sbJ3ygyoc,13569
|
69
69
|
seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
|
70
70
|
seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
|
71
71
|
seleniumbase/fixtures/js_utils.py,sha256=cYFRazc6iO2tTB5kf3_mW3czMQ8mJ5OSHldx7n31E8E,50940
|
72
72
|
seleniumbase/fixtures/page_actions.py,sha256=5xYWeTDLs9i1yOs5iWDk17CLoiUU5kRLHlmKRUJ7TcQ,63030
|
73
|
-
seleniumbase/fixtures/page_utils.py,sha256=
|
73
|
+
seleniumbase/fixtures/page_utils.py,sha256=5m7iXpikLs80TJoRO6_gEfXE1AKeQgcH1aFbR8o1C9A,12034
|
74
74
|
seleniumbase/fixtures/shared_utils.py,sha256=Fc78v0OxfLPOPqeT8ExsdkTgXHlmpxvJeLbLyDnu1dI,5748
|
75
75
|
seleniumbase/fixtures/unittest_helper.py,sha256=sfZ92rZeBAn_sF_yQ3I6_I7h3lyU5-cV_UMegBNoEm8,1294
|
76
76
|
seleniumbase/fixtures/words.py,sha256=FOA4mAYvl3EPVpBTvgvK6YwCL8BdlRCmed685kEe7Vg,7827
|
@@ -85,13 +85,13 @@ seleniumbase/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
85
85
|
seleniumbase/plugins/base_plugin.py,sha256=FemdftNhOaTfQIw5bWcJQPPPGQ3P0_sMEI_YYDuzZgU,14972
|
86
86
|
seleniumbase/plugins/basic_test_info.py,sha256=8ov6n417gPbqqvrlT4zrch7l2XcRt-GF2ny6rR9AMWk,2108
|
87
87
|
seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
|
88
|
-
seleniumbase/plugins/driver_manager.py,sha256=
|
88
|
+
seleniumbase/plugins/driver_manager.py,sha256=Rs2UE1yv5Npcdev7F4nwhQoTD25MpNYDINe7H0luyfY,33361
|
89
89
|
seleniumbase/plugins/page_source.py,sha256=loTnXxOj4kxEukuTZEiGyvKBhY3KDVDMnNlHHheTBDE,1889
|
90
|
-
seleniumbase/plugins/pytest_plugin.py,sha256=
|
90
|
+
seleniumbase/plugins/pytest_plugin.py,sha256=1NTzVJOd6zMvq16lPQHglfdguU3C0tj94FY6DZNZUBU,97106
|
91
91
|
seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
|
92
|
-
seleniumbase/plugins/sb_manager.py,sha256=
|
92
|
+
seleniumbase/plugins/sb_manager.py,sha256=g5woe7oYYe4Dav50nuIN5RClynrvZ1H8uhxLSyxl9Q4,53016
|
93
93
|
seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
|
94
|
-
seleniumbase/plugins/selenium_plugin.py,sha256=
|
94
|
+
seleniumbase/plugins/selenium_plugin.py,sha256=yDk-CuyuRiMw3eZlUOWh15d5WtsTex_dhhdMxKUUexg,58583
|
95
95
|
seleniumbase/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
96
|
seleniumbase/translate/__init__.py,sha256=N2i5XntTwJZmwr9-qvdX5gC6Rdm5-ClIbnQ8yyPn4Oo,459
|
97
97
|
seleniumbase/translate/chinese.py,sha256=0QhK2eadtsdN4KCvwki1J7jBCe8I4xxWbKzteJKJozY,24698
|
@@ -126,9 +126,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.bat,sha256=Ftq-GrAKRYH2ssDPr
|
|
126
126
|
seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443QFK8PryBpDmKn5Gy0s4o0vDSM,106
|
127
127
|
seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
128
128
|
seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
|
129
|
-
seleniumbase-4.31.
|
130
|
-
seleniumbase-4.31.
|
131
|
-
seleniumbase-4.31.
|
132
|
-
seleniumbase-4.31.
|
133
|
-
seleniumbase-4.31.
|
134
|
-
seleniumbase-4.31.
|
129
|
+
seleniumbase-4.31.1.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
|
130
|
+
seleniumbase-4.31.1.dist-info/METADATA,sha256=MShVjw08x3Ga43QfWzUgOWal5fuCx_hMdQuK_rsYEm4,85244
|
131
|
+
seleniumbase-4.31.1.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
132
|
+
seleniumbase-4.31.1.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
133
|
+
seleniumbase-4.31.1.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
134
|
+
seleniumbase-4.31.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|