Add option: "--enable-ws" to enable Chrome's Web Security

This commit is contained in:
Michael Mintz 2020-08-29 21:34:00 -04:00
parent 6a50ba5808
commit 648142c6f5
6 changed files with 55 additions and 27 deletions

View File

@ -47,6 +47,7 @@ except (ImportError, ValueError):
sb.log_path = "latest_logs/"
sb.archive_logs = False
sb.disable_csp = False
sb.enable_ws = False
sb.enable_sync = False
sb.use_auto_ext = False
sb.no_sandbox = False

View File

@ -127,6 +127,7 @@ SeleniumBase provides additional ``pytest`` command-line options for tests:
--block-images # (Block images from loading during tests.)
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
--disable-csp # (This disables the Content Security Policy of websites.)
--enable-ws # (Enable Web Security on Chrome.)
--enable-sync # (Enable "Chrome Sync".)
--use-auto-ext # (Use Chrome's automation extension.)
--swiftshader # (Use Chrome's "--use-gl=swiftshader" feature.)

View File

@ -131,7 +131,7 @@ def _add_chrome_disable_csp_extension(chrome_options):
def _set_chrome_options(
browser_name, downloads_path, headless, locale_code,
proxy_string, proxy_auth, proxy_user, proxy_pass,
user_agent, disable_csp, enable_sync, use_auto_ext,
user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader,
block_images, user_data_dir, extension_zip, extension_dir, servername,
mobile_emulator, device_width, device_height, device_pixel_ratio):
@ -267,7 +267,8 @@ def _set_chrome_options(
if browser_name != constants.Browser.OPERA:
# Opera Chromium doesn't support these switches
chrome_options.add_argument("--ignore-certificate-errors")
chrome_options.add_argument("--disable-web-security")
if not enable_ws:
chrome_options.add_argument("--disable-web-security")
chrome_options.add_argument("--no-sandbox")
else:
# Opera Chromium only!
@ -401,8 +402,8 @@ def get_driver(browser_name, headless=False, locale_code=None,
use_grid=False, servername='localhost', port=4444,
proxy_string=None, user_agent=None,
cap_file=None, cap_string=None,
disable_csp=None, enable_sync=None, use_auto_ext=None,
no_sandbox=None, disable_gpu=None,
disable_csp=None, enable_ws=None, enable_sync=None,
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
incognito=None, guest_mode=None, devtools=None,
swiftshader=None, block_images=None, user_data_dir=None,
extension_zip=None, extension_dir=None,
@ -441,26 +442,26 @@ def get_driver(browser_name, headless=False, locale_code=None,
return get_remote_driver(
browser_name, headless, locale_code, servername, port,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
cap_file, cap_string, disable_csp, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
swiftshader, block_images, user_data_dir,
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
devtools, swiftshader, block_images, user_data_dir,
extension_zip, extension_dir, test_id,
mobile_emulator, device_width, device_height, device_pixel_ratio)
else:
return get_local_driver(
browser_name, headless, locale_code, servername,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
incognito, guest_mode, devtools, swiftshader, block_images,
user_data_dir, extension_zip, extension_dir,
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
disable_gpu, incognito, guest_mode, devtools, swiftshader,
block_images, user_data_dir, extension_zip, extension_dir,
mobile_emulator, device_width, device_height, device_pixel_ratio)
def get_remote_driver(
browser_name, headless, locale_code, servername, port,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
cap_file, cap_string, disable_csp, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode,
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
devtools, swiftshader, block_images,
user_data_dir, extension_zip, extension_dir, test_id,
mobile_emulator, device_width, device_height, device_pixel_ratio):
@ -492,10 +493,11 @@ def get_remote_driver(
chrome_options = _set_chrome_options(
browser_name, downloads_path, headless, locale_code,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
incognito, guest_mode, devtools, swiftshader, block_images,
user_data_dir, extension_zip, extension_dir, servername,
mobile_emulator, device_width, device_height, device_pixel_ratio)
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
disable_gpu, incognito, guest_mode, devtools, swiftshader,
block_images, user_data_dir, extension_zip, extension_dir,
servername, mobile_emulator,
device_width, device_height, device_pixel_ratio)
capabilities = chrome_options.to_capabilities()
for key in desired_caps.keys():
capabilities[key] = desired_caps[key]
@ -618,9 +620,9 @@ def get_remote_driver(
def get_local_driver(
browser_name, headless, locale_code, servername,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
incognito, guest_mode, devtools, swiftshader, block_images,
user_data_dir, extension_zip, extension_dir,
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
disable_gpu, incognito, guest_mode, devtools, swiftshader,
block_images, user_data_dir, extension_zip, extension_dir,
mobile_emulator, device_width, device_height, device_pixel_ratio):
'''
Spins up a new web browser and returns the driver.
@ -710,7 +712,7 @@ def get_local_driver(
chrome_options = _set_chrome_options(
browser_name, downloads_path, headless, locale_code,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_sync, use_auto_ext,
disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
swiftshader, block_images, user_data_dir,
extension_zip, extension_dir, servername,
@ -794,7 +796,8 @@ def get_local_driver(
edge_options.add_argument("--disable-save-password-bubble")
edge_options.add_argument("--disable-single-click-autofill")
edge_options.add_argument("--disable-translate")
edge_options.add_argument("--disable-web-security")
if not enable_ws:
edge_options.add_argument("--disable-web-security")
edge_options.add_argument("--homepage=about:blank")
edge_options.add_argument("--dns-prefetch-disable")
edge_options.add_argument("--dom-automation")
@ -842,7 +845,7 @@ def get_local_driver(
opera_options = _set_chrome_options(
browser_name, downloads_path, headless, locale_code,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_sync, use_auto_ext,
disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
swiftshader, block_images, user_data_dir, extension_zip,
extension_dir, servername, mobile_emulator,
@ -861,7 +864,7 @@ def get_local_driver(
chrome_options = _set_chrome_options(
browser_name, downloads_path, headless, locale_code,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_sync, use_auto_ext,
disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
swiftshader, block_images, user_data_dir, extension_zip,
extension_dir, servername, mobile_emulator,

View File

@ -1716,8 +1716,8 @@ class BaseCase(unittest.TestCase):
def get_new_driver(self, browser=None, headless=None, locale_code=None,
servername=None, port=None, proxy=None, agent=None,
switch_to=True, cap_file=None, cap_string=None,
disable_csp=None, enable_sync=None, use_auto_ext=None,
no_sandbox=None, disable_gpu=None,
disable_csp=None, enable_ws=None, enable_sync=None,
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
incognito=None, guest_mode=None, devtools=None,
swiftshader=None, block_images=None, user_data_dir=None,
extension_zip=None, extension_dir=None, is_mobile=False,
@ -1737,6 +1737,7 @@ class BaseCase(unittest.TestCase):
cap_file - the file containing desired capabilities for the browser
cap_string - the string with desired capabilities for the browser
disable_csp - an option to disable Chrome's Content Security Policy
enable_ws - the option to enable the Web Security feature (Chrome)
enable_sync - the option to enable the Chrome Sync feature (Chrome)
use_auto_ext - the option to enable Chrome's Automation Extension
no_sandbox - the option to enable the "No-Sandbox" feature (Chrome)
@ -1798,6 +1799,8 @@ class BaseCase(unittest.TestCase):
user_agent = self.user_agent
if disable_csp is None:
disable_csp = self.disable_csp
if enable_ws is None:
enable_ws = self.enable_ws
if enable_sync is None:
enable_sync = self.enable_sync
if use_auto_ext is None:
@ -1852,6 +1855,7 @@ class BaseCase(unittest.TestCase):
cap_file=cap_file,
cap_string=cap_string,
disable_csp=disable_csp,
enable_ws=enable_ws,
enable_sync=enable_sync,
use_auto_ext=use_auto_ext,
no_sandbox=no_sandbox,
@ -6103,6 +6107,7 @@ class BaseCase(unittest.TestCase):
self.block_images = sb_config.block_images
self.verify_delay = sb_config.verify_delay
self.disable_csp = sb_config.disable_csp
self.enable_ws = sb_config.enable_ws
self.enable_sync = sb_config.enable_sync
self.use_auto_ext = sb_config.use_auto_ext
self.no_sandbox = sb_config.no_sandbox
@ -6269,6 +6274,7 @@ class BaseCase(unittest.TestCase):
cap_file=self.cap_file,
cap_string=self.cap_string,
disable_csp=self.disable_csp,
enable_ws=self.enable_ws,
enable_sync=self.enable_sync,
use_auto_ext=self.use_auto_ext,
no_sandbox=self.no_sandbox,

View File

@ -48,6 +48,7 @@ def pytest_addoption(parser):
--block-images (Block images from loading during tests.)
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
--disable-csp (Disable the Content Security Policy of websites.)
--enable-ws (Enable Web Security on Chrome.)
--enable-sync (Enable "Chrome Sync".)
--use-auto-ext (Use Chrome's automation extension.)
--swiftshader (Use Chrome's "--use-gl=swiftshader" feature.)
@ -372,8 +373,14 @@ def pytest_addoption(parser):
websites, which may interfere with some features of
SeleniumBase, such as loading custom JavaScript
libraries for various testing actions.
Setting this to True (--disable_csp) overrides the
Setting this to True (--disable-csp) overrides the
value set in seleniumbase/config/settings.py""")
parser.addoption('--enable_ws', '--enable-ws', '--enable-web-security',
action="store_true",
dest='enable_ws',
default=False,
help="""Using this enables the "Web Security" feature of
Chrome and Chromium-based browsers such as Edge.""")
parser.addoption('--enable_sync', '--enable-sync',
action="store_true",
dest='enable_sync',
@ -515,6 +522,7 @@ def pytest_configure(config):
sb_config.block_images = config.getoption('block_images')
sb_config.verify_delay = config.getoption('verify_delay')
sb_config.disable_csp = config.getoption('disable_csp')
sb_config.enable_ws = config.getoption('enable_ws')
sb_config.enable_sync = config.getoption('enable_sync')
sb_config.use_auto_ext = config.getoption('use_auto_ext')
sb_config.no_sandbox = config.getoption('no_sandbox')

View File

@ -38,6 +38,7 @@ class SeleniumBrowser(Plugin):
--block-images (Block images from loading during tests.)
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
--disable-csp (This disables the Content Security Policy of websites.)
--enable-ws (Enable Web Security on Chrome.)
--enable-sync (Enable "Chrome Sync".)
--use-auto-ext (Use Chrome's automation extension.)
--swiftshader (Use Chrome's "--use-gl=swiftshader" feature.)
@ -277,8 +278,15 @@ class SeleniumBrowser(Plugin):
websites, which may interfere with some features of
SeleniumBase, such as loading custom JavaScript
libraries for various testing actions.
Setting this to True (--disable_csp) overrides the
Setting this to True (--disable-csp) overrides the
value set in seleniumbase/config/settings.py""")
parser.add_option(
'--enable_ws', '--enable-ws', '--enable-web-security',
action="store_true",
dest='enable_ws',
default=False,
help="""Using this enables the "Web Security" feature of
Chrome and Chromium-based browsers such as Edge.""")
parser.add_option(
'--enable_sync', '--enable-sync',
action="store_true",
@ -399,6 +407,7 @@ class SeleniumBrowser(Plugin):
test.test.block_images = self.options.block_images
test.test.verify_delay = self.options.verify_delay # MasterQA
test.test.disable_csp = self.options.disable_csp
test.test.enable_ws = self.options.enable_ws
test.test.enable_sync = self.options.enable_sync
test.test.use_auto_ext = self.options.use_auto_ext
test.test.no_sandbox = self.options.no_sandbox