Skip to content

Commit 648142c

Browse files
committed
Add option: "--enable-ws" to enable Chrome's Web Security
1 parent 6a50ba5 commit 648142c

File tree

6 files changed

+55
-27
lines changed

6 files changed

+55
-27
lines changed

examples/raw_parameter_script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
sb.log_path = "latest_logs/"
4848
sb.archive_logs = False
4949
sb.disable_csp = False
50+
sb.enable_ws = False
5051
sb.enable_sync = False
5152
sb.use_auto_ext = False
5253
sb.no_sandbox = False

help_docs/customizing_test_runs.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ SeleniumBase provides additional ``pytest`` command-line options for tests:
127127
--block-images # (Block images from loading during tests.)
128128
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
129129
--disable-csp # (This disables the Content Security Policy of websites.)
130+
--enable-ws # (Enable Web Security on Chrome.)
130131
--enable-sync # (Enable "Chrome Sync".)
131132
--use-auto-ext # (Use Chrome's automation extension.)
132133
--swiftshader # (Use Chrome's "--use-gl=swiftshader" feature.)

seleniumbase/core/browser_launcher.py

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def _add_chrome_disable_csp_extension(chrome_options):
131131
def _set_chrome_options(
132132
browser_name, downloads_path, headless, locale_code,
133133
proxy_string, proxy_auth, proxy_user, proxy_pass,
134-
user_agent, disable_csp, enable_sync, use_auto_ext,
134+
user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext,
135135
no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader,
136136
block_images, user_data_dir, extension_zip, extension_dir, servername,
137137
mobile_emulator, device_width, device_height, device_pixel_ratio):
@@ -267,7 +267,8 @@ def _set_chrome_options(
267267
if browser_name != constants.Browser.OPERA:
268268
# Opera Chromium doesn't support these switches
269269
chrome_options.add_argument("--ignore-certificate-errors")
270-
chrome_options.add_argument("--disable-web-security")
270+
if not enable_ws:
271+
chrome_options.add_argument("--disable-web-security")
271272
chrome_options.add_argument("--no-sandbox")
272273
else:
273274
# Opera Chromium only!
@@ -401,8 +402,8 @@ def get_driver(browser_name, headless=False, locale_code=None,
401402
use_grid=False, servername='localhost', port=4444,
402403
proxy_string=None, user_agent=None,
403404
cap_file=None, cap_string=None,
404-
disable_csp=None, enable_sync=None, use_auto_ext=None,
405-
no_sandbox=None, disable_gpu=None,
405+
disable_csp=None, enable_ws=None, enable_sync=None,
406+
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
406407
incognito=None, guest_mode=None, devtools=None,
407408
swiftshader=None, block_images=None, user_data_dir=None,
408409
extension_zip=None, extension_dir=None,
@@ -441,26 +442,26 @@ def get_driver(browser_name, headless=False, locale_code=None,
441442
return get_remote_driver(
442443
browser_name, headless, locale_code, servername, port,
443444
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
444-
cap_file, cap_string, disable_csp, enable_sync, use_auto_ext,
445-
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
446-
swiftshader, block_images, user_data_dir,
445+
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
446+
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
447+
devtools, swiftshader, block_images, user_data_dir,
447448
extension_zip, extension_dir, test_id,
448449
mobile_emulator, device_width, device_height, device_pixel_ratio)
449450
else:
450451
return get_local_driver(
451452
browser_name, headless, locale_code, servername,
452453
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
453-
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
454-
incognito, guest_mode, devtools, swiftshader, block_images,
455-
user_data_dir, extension_zip, extension_dir,
454+
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
455+
disable_gpu, incognito, guest_mode, devtools, swiftshader,
456+
block_images, user_data_dir, extension_zip, extension_dir,
456457
mobile_emulator, device_width, device_height, device_pixel_ratio)
457458

458459

459460
def get_remote_driver(
460461
browser_name, headless, locale_code, servername, port,
461462
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
462-
cap_file, cap_string, disable_csp, enable_sync, use_auto_ext,
463-
no_sandbox, disable_gpu, incognito, guest_mode,
463+
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
464+
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
464465
devtools, swiftshader, block_images,
465466
user_data_dir, extension_zip, extension_dir, test_id,
466467
mobile_emulator, device_width, device_height, device_pixel_ratio):
@@ -492,10 +493,11 @@ def get_remote_driver(
492493
chrome_options = _set_chrome_options(
493494
browser_name, downloads_path, headless, locale_code,
494495
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
495-
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
496-
incognito, guest_mode, devtools, swiftshader, block_images,
497-
user_data_dir, extension_zip, extension_dir, servername,
498-
mobile_emulator, device_width, device_height, device_pixel_ratio)
496+
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
497+
disable_gpu, incognito, guest_mode, devtools, swiftshader,
498+
block_images, user_data_dir, extension_zip, extension_dir,
499+
servername, mobile_emulator,
500+
device_width, device_height, device_pixel_ratio)
499501
capabilities = chrome_options.to_capabilities()
500502
for key in desired_caps.keys():
501503
capabilities[key] = desired_caps[key]
@@ -618,9 +620,9 @@ def get_remote_driver(
618620
def get_local_driver(
619621
browser_name, headless, locale_code, servername,
620622
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
621-
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
622-
incognito, guest_mode, devtools, swiftshader, block_images,
623-
user_data_dir, extension_zip, extension_dir,
623+
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
624+
disable_gpu, incognito, guest_mode, devtools, swiftshader,
625+
block_images, user_data_dir, extension_zip, extension_dir,
624626
mobile_emulator, device_width, device_height, device_pixel_ratio):
625627
'''
626628
Spins up a new web browser and returns the driver.
@@ -710,7 +712,7 @@ def get_local_driver(
710712
chrome_options = _set_chrome_options(
711713
browser_name, downloads_path, headless, locale_code,
712714
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
713-
disable_csp, enable_sync, use_auto_ext,
715+
disable_csp, enable_ws, enable_sync, use_auto_ext,
714716
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
715717
swiftshader, block_images, user_data_dir,
716718
extension_zip, extension_dir, servername,
@@ -794,7 +796,8 @@ def get_local_driver(
794796
edge_options.add_argument("--disable-save-password-bubble")
795797
edge_options.add_argument("--disable-single-click-autofill")
796798
edge_options.add_argument("--disable-translate")
797-
edge_options.add_argument("--disable-web-security")
799+
if not enable_ws:
800+
edge_options.add_argument("--disable-web-security")
798801
edge_options.add_argument("--homepage=about:blank")
799802
edge_options.add_argument("--dns-prefetch-disable")
800803
edge_options.add_argument("--dom-automation")
@@ -842,7 +845,7 @@ def get_local_driver(
842845
opera_options = _set_chrome_options(
843846
browser_name, downloads_path, headless, locale_code,
844847
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
845-
disable_csp, enable_sync, use_auto_ext,
848+
disable_csp, enable_ws, enable_sync, use_auto_ext,
846849
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
847850
swiftshader, block_images, user_data_dir, extension_zip,
848851
extension_dir, servername, mobile_emulator,
@@ -861,7 +864,7 @@ def get_local_driver(
861864
chrome_options = _set_chrome_options(
862865
browser_name, downloads_path, headless, locale_code,
863866
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
864-
disable_csp, enable_sync, use_auto_ext,
867+
disable_csp, enable_ws, enable_sync, use_auto_ext,
865868
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
866869
swiftshader, block_images, user_data_dir, extension_zip,
867870
extension_dir, servername, mobile_emulator,

seleniumbase/fixtures/base_case.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1716,8 +1716,8 @@ def switch_to_default_window(self):
17161716
def get_new_driver(self, browser=None, headless=None, locale_code=None,
17171717
servername=None, port=None, proxy=None, agent=None,
17181718
switch_to=True, cap_file=None, cap_string=None,
1719-
disable_csp=None, enable_sync=None, use_auto_ext=None,
1720-
no_sandbox=None, disable_gpu=None,
1719+
disable_csp=None, enable_ws=None, enable_sync=None,
1720+
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
17211721
incognito=None, guest_mode=None, devtools=None,
17221722
swiftshader=None, block_images=None, user_data_dir=None,
17231723
extension_zip=None, extension_dir=None, is_mobile=False,
@@ -1737,6 +1737,7 @@ def get_new_driver(self, browser=None, headless=None, locale_code=None,
17371737
cap_file - the file containing desired capabilities for the browser
17381738
cap_string - the string with desired capabilities for the browser
17391739
disable_csp - an option to disable Chrome's Content Security Policy
1740+
enable_ws - the option to enable the Web Security feature (Chrome)
17401741
enable_sync - the option to enable the Chrome Sync feature (Chrome)
17411742
use_auto_ext - the option to enable Chrome's Automation Extension
17421743
no_sandbox - the option to enable the "No-Sandbox" feature (Chrome)
@@ -1798,6 +1799,8 @@ def get_new_driver(self, browser=None, headless=None, locale_code=None,
17981799
user_agent = self.user_agent
17991800
if disable_csp is None:
18001801
disable_csp = self.disable_csp
1802+
if enable_ws is None:
1803+
enable_ws = self.enable_ws
18011804
if enable_sync is None:
18021805
enable_sync = self.enable_sync
18031806
if use_auto_ext is None:
@@ -1852,6 +1855,7 @@ def get_new_driver(self, browser=None, headless=None, locale_code=None,
18521855
cap_file=cap_file,
18531856
cap_string=cap_string,
18541857
disable_csp=disable_csp,
1858+
enable_ws=enable_ws,
18551859
enable_sync=enable_sync,
18561860
use_auto_ext=use_auto_ext,
18571861
no_sandbox=no_sandbox,
@@ -6103,6 +6107,7 @@ def setUp(self, masterqa_mode=False):
61036107
self.block_images = sb_config.block_images
61046108
self.verify_delay = sb_config.verify_delay
61056109
self.disable_csp = sb_config.disable_csp
6110+
self.enable_ws = sb_config.enable_ws
61066111
self.enable_sync = sb_config.enable_sync
61076112
self.use_auto_ext = sb_config.use_auto_ext
61086113
self.no_sandbox = sb_config.no_sandbox
@@ -6269,6 +6274,7 @@ def setUp(self, masterqa_mode=False):
62696274
cap_file=self.cap_file,
62706275
cap_string=self.cap_string,
62716276
disable_csp=self.disable_csp,
6277+
enable_ws=self.enable_ws,
62726278
enable_sync=self.enable_sync,
62736279
use_auto_ext=self.use_auto_ext,
62746280
no_sandbox=self.no_sandbox,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ def pytest_addoption(parser):
4848
--block-images (Block images from loading during tests.)
4949
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
5050
--disable-csp (Disable the Content Security Policy of websites.)
51+
--enable-ws (Enable Web Security on Chrome.)
5152
--enable-sync (Enable "Chrome Sync".)
5253
--use-auto-ext (Use Chrome's automation extension.)
5354
--swiftshader (Use Chrome's "--use-gl=swiftshader" feature.)
@@ -372,8 +373,14 @@ def pytest_addoption(parser):
372373
websites, which may interfere with some features of
373374
SeleniumBase, such as loading custom JavaScript
374375
libraries for various testing actions.
375-
Setting this to True (--disable_csp) overrides the
376+
Setting this to True (--disable-csp) overrides the
376377
value set in seleniumbase/config/settings.py""")
378+
parser.addoption('--enable_ws', '--enable-ws', '--enable-web-security',
379+
action="store_true",
380+
dest='enable_ws',
381+
default=False,
382+
help="""Using this enables the "Web Security" feature of
383+
Chrome and Chromium-based browsers such as Edge.""")
377384
parser.addoption('--enable_sync', '--enable-sync',
378385
action="store_true",
379386
dest='enable_sync',
@@ -515,6 +522,7 @@ def pytest_configure(config):
515522
sb_config.block_images = config.getoption('block_images')
516523
sb_config.verify_delay = config.getoption('verify_delay')
517524
sb_config.disable_csp = config.getoption('disable_csp')
525+
sb_config.enable_ws = config.getoption('enable_ws')
518526
sb_config.enable_sync = config.getoption('enable_sync')
519527
sb_config.use_auto_ext = config.getoption('use_auto_ext')
520528
sb_config.no_sandbox = config.getoption('no_sandbox')

seleniumbase/plugins/selenium_plugin.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class SeleniumBrowser(Plugin):
3838
--block-images (Block images from loading during tests.)
3939
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
4040
--disable-csp (This disables the Content Security Policy of websites.)
41+
--enable-ws (Enable Web Security on Chrome.)
4142
--enable-sync (Enable "Chrome Sync".)
4243
--use-auto-ext (Use Chrome's automation extension.)
4344
--swiftshader (Use Chrome's "--use-gl=swiftshader" feature.)
@@ -277,8 +278,15 @@ def options(self, parser, env):
277278
websites, which may interfere with some features of
278279
SeleniumBase, such as loading custom JavaScript
279280
libraries for various testing actions.
280-
Setting this to True (--disable_csp) overrides the
281+
Setting this to True (--disable-csp) overrides the
281282
value set in seleniumbase/config/settings.py""")
283+
parser.add_option(
284+
'--enable_ws', '--enable-ws', '--enable-web-security',
285+
action="store_true",
286+
dest='enable_ws',
287+
default=False,
288+
help="""Using this enables the "Web Security" feature of
289+
Chrome and Chromium-based browsers such as Edge.""")
282290
parser.add_option(
283291
'--enable_sync', '--enable-sync',
284292
action="store_true",
@@ -399,6 +407,7 @@ def beforeTest(self, test):
399407
test.test.block_images = self.options.block_images
400408
test.test.verify_delay = self.options.verify_delay # MasterQA
401409
test.test.disable_csp = self.options.disable_csp
410+
test.test.enable_ws = self.options.enable_ws
402411
test.test.enable_sync = self.options.enable_sync
403412
test.test.use_auto_ext = self.options.use_auto_ext
404413
test.test.no_sandbox = self.options.no_sandbox

0 commit comments

Comments
 (0)