Add custom Chromium args with: --chromium-arg="ARG,ARG"

This commit is contained in:
Michael Mintz 2021-03-23 15:00:21 -04:00
parent c9c450e32a
commit 02c84f9463
5 changed files with 68 additions and 14 deletions

View File

@ -76,6 +76,7 @@ except (ImportError, ValueError):
sb.remote_debug = False
sb.settings_file = None
sb.user_data_dir = None
sb.chromium_arg = None
sb.proxy_string = None
sb.swiftshader = False
sb.ad_block_on = False

View File

@ -133,7 +133,7 @@ def _set_chrome_options(
proxy_string, proxy_auth, proxy_user, proxy_pass,
user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
devtools, remote_debug, swiftshader, block_images, chromium_arg,
user_data_dir, extension_zip, extension_dir, servername,
mobile_emulator, device_width, device_height, device_pixel_ratio):
chrome_options = webdriver.ChromeOptions()
@ -298,6 +298,18 @@ def _set_chrome_options(
chrome_options.add_argument("--disable-gpu")
if "linux" in PLATFORM:
chrome_options.add_argument("--disable-dev-shm-usage")
if chromium_arg:
# Can be a comma-separated list of Chromium args
chromium_arg_list = chromium_arg.split(',')
for chromium_arg_item in chromium_arg_list:
chromium_arg_item = chromium_arg_item.strip()
if not chromium_arg_item.startswith("--"):
if chromium_arg_item.startswith("-"):
chromium_arg_item = "-" + chromium_arg_item
else:
chromium_arg_item = "--" + chromium_arg_item
if len(chromium_arg_item) >= 3:
chrome_options.add_argument(chromium_arg_item)
return chrome_options
@ -459,7 +471,7 @@ def get_driver(browser_name, headless=False, locale_code=None,
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
incognito=None, guest_mode=None,
devtools=None, remote_debug=None,
swiftshader=None, block_images=None,
swiftshader=None, block_images=None, chromium_arg=None,
user_data_dir=None, extension_zip=None, extension_dir=None,
test_id=None, mobile_emulator=False, device_width=None,
device_height=None, device_pixel_ratio=None):
@ -498,7 +510,7 @@ def get_driver(browser_name, headless=False, locale_code=None,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
devtools, remote_debug, swiftshader, block_images, chromium_arg,
user_data_dir, extension_zip, extension_dir, test_id,
mobile_emulator, device_width, device_height, device_pixel_ratio)
else:
@ -507,7 +519,7 @@ def get_driver(browser_name, headless=False, locale_code=None,
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_ws, enable_sync,
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
devtools, remote_debug, swiftshader, block_images, chromium_arg,
user_data_dir, extension_zip, extension_dir,
mobile_emulator, device_width, device_height, device_pixel_ratio)
@ -517,7 +529,7 @@ def get_remote_driver(
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
devtools, remote_debug, swiftshader, block_images, chromium_arg,
user_data_dir, extension_zip, extension_dir, test_id,
mobile_emulator, device_width, device_height, device_pixel_ratio):
downloads_path = download_helper.get_downloads_folder()
@ -549,7 +561,7 @@ def get_remote_driver(
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
devtools, remote_debug, swiftshader, block_images, chromium_arg,
user_data_dir, extension_zip, extension_dir,
servername, mobile_emulator,
device_width, device_height, device_pixel_ratio)
@ -677,7 +689,7 @@ def get_local_driver(
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
devtools, remote_debug, swiftshader, block_images, chromium_arg,
user_data_dir, extension_zip, extension_dir,
mobile_emulator, device_width, device_height, device_pixel_ratio):
'''
@ -765,8 +777,8 @@ def get_local_driver(
disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
user_data_dir, extension_zip, extension_dir, servername,
mobile_emulator, device_width, device_height,
chromium_arg, user_data_dir, extension_zip, extension_dir,
servername, mobile_emulator, device_width, device_height,
device_pixel_ratio)
if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER):
try:
@ -910,6 +922,18 @@ def get_local_driver(
edge_options.add_argument("--disable-gpu")
if "linux" in PLATFORM:
edge_options.add_argument("--disable-dev-shm-usage")
if chromium_arg:
# Can be a comma-separated list of Chromium args
chromium_arg_list = chromium_arg.split(',')
for chromium_arg_item in chromium_arg_list:
chromium_arg_item = chromium_arg_item.strip()
if not chromium_arg_item.startswith("--"):
if chromium_arg_item.startswith("-"):
chromium_arg_item = "-" + chromium_arg_item
else:
chromium_arg_item = "--" + chromium_arg_item
if len(chromium_arg_item) >= 3:
edge_options.add_argument(chromium_arg_item)
capabilities = edge_options.to_capabilities()
capabilities["platform"] = ''
return Edge(
@ -935,7 +959,7 @@ def get_local_driver(
disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
user_data_dir, extension_zip, extension_dir,
chromium_arg, user_data_dir, extension_zip, extension_dir,
servername, mobile_emulator,
device_width, device_height, device_pixel_ratio)
opera_options.headless = False # No support for headless Opera
@ -955,7 +979,7 @@ def get_local_driver(
disable_csp, enable_ws, enable_sync, use_auto_ext,
no_sandbox, disable_gpu, incognito, guest_mode,
devtools, remote_debug, swiftshader, block_images,
user_data_dir, extension_zip, extension_dir,
chromium_arg, user_data_dir, extension_zip, extension_dir,
servername, mobile_emulator,
device_width, device_height, device_pixel_ratio)
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER):

View File

@ -1899,9 +1899,9 @@ class BaseCase(unittest.TestCase):
switch_to=True, cap_file=None, cap_string=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, remote_debug=None,
swiftshader=None, block_images=None, user_data_dir=None,
incognito=None, guest_mode=None, devtools=None,
remote_debug=None, swiftshader=None, block_images=None,
chromium_arg=None, user_data_dir=None,
extension_zip=None, extension_dir=None, is_mobile=False,
d_width=None, d_height=None, d_p_r=None):
""" This method spins up an extra browser for tests that require
@ -1930,6 +1930,7 @@ class BaseCase(unittest.TestCase):
remote_debug - the option to enable Chrome's Remote Debugger
swiftshader - the option to use Chrome's swiftshader (Chrome-only)
block_images - the option to block images from loading (Chrome)
chromium_arg - the option to add a Chromium arg to Chrome/Edge
user_data_dir - Chrome's User Data Directory to use (Chrome-only)
extension_zip - A Chrome Extension ZIP file to use (Chrome-only)
extension_dir - A Chrome Extension folder to use (Chrome-only)
@ -2005,6 +2006,8 @@ class BaseCase(unittest.TestCase):
swiftshader = self.swiftshader
if block_images is None:
block_images = self.block_images
if chromium_arg is None:
chromium_arg = self.chromium_arg
if user_data_dir is None:
user_data_dir = self.user_data_dir
if extension_zip is None:
@ -2052,6 +2055,7 @@ class BaseCase(unittest.TestCase):
remote_debug=remote_debug,
swiftshader=swiftshader,
block_images=block_images,
chromium_arg=chromium_arg,
user_data_dir=user_data_dir,
extension_zip=extension_zip,
extension_dir=extension_dir,
@ -7075,6 +7079,7 @@ class BaseCase(unittest.TestCase):
self.js_checking_on = sb_config.js_checking_on
self.ad_block_on = sb_config.ad_block_on
self.block_images = sb_config.block_images
self.chromium_arg = sb_config.chromium_arg
self.verify_delay = sb_config.verify_delay
self.disable_csp = sb_config.disable_csp
self.disable_ws = sb_config.disable_ws
@ -7278,6 +7283,7 @@ class BaseCase(unittest.TestCase):
remote_debug=self.remote_debug,
swiftshader=self.swiftshader,
block_images=self.block_images,
chromium_arg=self.chromium_arg,
user_data_dir=self.user_data_dir,
extension_zip=self.extension_zip,
extension_dir=self.extension_dir,

View File

@ -41,6 +41,7 @@ def pytest_addoption(parser):
--agent=STRING (Modify the web browser's User-Agent string.)
--mobile (Use the mobile device emulator while running tests.)
--metrics=STRING (Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio".)
--chromium-arg=ARG (Add a Chromium arg for Chrome/Edge, comma-separated.)
--extension-zip=ZIP (Load a Chrome Extension .zip|.crx, comma-separated.)
--extension-dir=DIR (Load a Chrome Extension directory, comma-separated.)
--headless (Run tests headlessly. Default mode on Linux OS.)
@ -311,6 +312,15 @@ def pytest_addoption(parser):
Format: A comma-separated string with the 3 values.
Example: "375,734,3"
Default: None. (Will use default values if None)""")
parser.addoption('--chromium_arg', '--chromium-arg',
action='store',
dest='chromium_arg',
default=None,
help="""Add a Chromium argument for Chrome/Edge browsers.
Format: A comma-separated list of Chromium args.
If an arg doesn't start with "--", that will be
added to the beginning of the arg automatically.
Default: None.""")
parser.addoption('--extension_zip', '--extension-zip', '--crx',
action='store',
dest='extension_zip',
@ -671,6 +681,7 @@ def pytest_configure(config):
sb_config.locale_code = config.getoption('locale_code')
sb_config.interval = config.getoption('interval')
sb_config.start_page = config.getoption('start_page')
sb_config.chromium_arg = config.getoption('chromium_arg')
sb_config.extension_zip = config.getoption('extension_zip')
sb_config.extension_dir = config.getoption('extension_dir')
sb_config.with_testing_base = config.getoption('with_testing_base')

View File

@ -21,6 +21,7 @@ class SeleniumBrowser(Plugin):
--agent=STRING (Modify the web browser's User-Agent string.)
--mobile (Use the mobile device emulator while running tests.)
--metrics=STRING (Set mobile metrics: "CSSWidth,CSSHeight,PixelRatio".)
--chromium-arg=ARG (Add a Chromium arg for Chrome/Edge, comma-separated.)
--extension-zip=ZIP (Load a Chrome Extension .zip|.crx, comma-separated.)
--extension-dir=DIR (Load a Chrome Extension directory, comma-separated.)
--headless (Run tests headlessly. Default mode on Linux OS.)
@ -149,6 +150,16 @@ class SeleniumBrowser(Plugin):
Format: A comma-separated string with the 3 values.
Example: "375,734,3"
Default: None. (Will use default values if None)""")
parser.add_option(
'--chromium_arg', '--chromium-arg',
action='store',
dest='chromium_arg',
default=None,
help="""Add a Chromium argument for Chrome/Edge browsers.
Format: A comma-separated list of Chromium args.
If an arg doesn't start with "--", that will be
added to the beginning of the arg automatically.
Default: None.""")
parser.add_option(
'--extension_zip', '--extension-zip', '--crx',
action='store',
@ -423,6 +434,7 @@ class SeleniumBrowser(Plugin):
test.test.user_data_dir = self.options.user_data_dir
test.test.extension_zip = self.options.extension_zip
test.test.extension_dir = self.options.extension_dir
test.test.chromium_arg = self.options.chromium_arg
test.test.proxy_string = self.options.proxy_string
test.test.user_agent = self.options.user_agent
test.test.mobile_emulator = self.options.mobile_emulator