Skip to content

Commit efa7a7c

Browse files
committed
Add a cmd option to use Chrome's Automation Extension
1 parent 678e90a commit efa7a7c

File tree

5 files changed

+41
-15
lines changed

5 files changed

+41
-15
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.archive_logs = False
4848
sb.disable_csp = False
4949
sb.enable_sync = False
50+
sb.use_auto_ext = False
5051
sb.no_sandbox = False
5152
sb.disable_gpu = False
5253
sb._reuse_session = False

seleniumbase/core/browser_launcher.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ def _add_chrome_disable_csp_extension(chrome_options):
132132
def _set_chrome_options(
133133
downloads_path, headless,
134134
proxy_string, proxy_auth, proxy_user, proxy_pass,
135-
user_agent, disable_csp, enable_sync, no_sandbox, disable_gpu,
136-
incognito, guest_mode, devtools,
135+
user_agent, disable_csp, enable_sync, use_auto_ext,
136+
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
137137
user_data_dir, extension_zip, extension_dir, servername,
138138
mobile_emulator, device_width, device_height, device_pixel_ratio):
139139
chrome_options = webdriver.ChromeOptions()
@@ -211,7 +211,7 @@ def _set_chrome_options(
211211
chrome_options.add_argument("--disable-web-security")
212212
chrome_options.add_argument("--homepage=about:blank")
213213
chrome_options.add_argument("--dom-automation")
214-
if servername == "localhost" or servername == "127.0.0.1":
214+
if not use_auto_ext: # (It's ON by default. Disable it when not wanted.)
215215
chrome_options.add_experimental_option("useAutomationExtension", False)
216216
if (settings.DISABLE_CSP_ON_CHROME or disable_csp) and not headless:
217217
# Headless Chrome doesn't support extensions, which are required
@@ -348,7 +348,7 @@ def validate_proxy_string(proxy_string):
348348
def get_driver(browser_name, headless=False, use_grid=False,
349349
servername='localhost', port=4444, proxy_string=None,
350350
user_agent=None, cap_file=None, cap_string=None,
351-
disable_csp=None, enable_sync=None,
351+
disable_csp=None, enable_sync=None, use_auto_ext=None,
352352
no_sandbox=None, disable_gpu=None,
353353
incognito=None, guest_mode=None, devtools=None,
354354
user_data_dir=None, extension_zip=None, extension_dir=None,
@@ -387,15 +387,15 @@ def get_driver(browser_name, headless=False, use_grid=False,
387387
return get_remote_driver(
388388
browser_name, headless, servername, port,
389389
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
390-
cap_file, cap_string, disable_csp, enable_sync,
390+
cap_file, cap_string, disable_csp, enable_sync, use_auto_ext,
391391
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
392392
user_data_dir, extension_zip, extension_dir,
393393
mobile_emulator, device_width, device_height, device_pixel_ratio)
394394
else:
395395
return get_local_driver(
396396
browser_name, headless, servername,
397397
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
398-
disable_csp, enable_sync, no_sandbox, disable_gpu,
398+
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
399399
incognito, guest_mode, devtools,
400400
user_data_dir, extension_zip, extension_dir,
401401
mobile_emulator, device_width, device_height, device_pixel_ratio)
@@ -404,7 +404,7 @@ def get_driver(browser_name, headless=False, use_grid=False,
404404
def get_remote_driver(
405405
browser_name, headless, servername, port, proxy_string, proxy_auth,
406406
proxy_user, proxy_pass, user_agent, cap_file, cap_string,
407-
disable_csp, enable_sync, no_sandbox, disable_gpu,
407+
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
408408
incognito, guest_mode, devtools,
409409
user_data_dir, extension_zip, extension_dir,
410410
mobile_emulator, device_width, device_height, device_pixel_ratio):
@@ -431,7 +431,7 @@ def get_remote_driver(
431431
chrome_options = _set_chrome_options(
432432
downloads_path, headless,
433433
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
434-
disable_csp, enable_sync, no_sandbox, disable_gpu,
434+
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
435435
incognito, guest_mode, devtools,
436436
user_data_dir, extension_zip, extension_dir, servername,
437437
mobile_emulator, device_width, device_height, device_pixel_ratio)
@@ -543,7 +543,7 @@ def get_remote_driver(
543543
def get_local_driver(
544544
browser_name, headless, servername,
545545
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
546-
disable_csp, enable_sync, no_sandbox, disable_gpu,
546+
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
547547
incognito, guest_mode, devtools,
548548
user_data_dir, extension_zip, extension_dir,
549549
mobile_emulator, device_width, device_height, device_pixel_ratio):
@@ -633,8 +633,8 @@ def get_local_driver(
633633
chrome_options = _set_chrome_options(
634634
downloads_path, headless,
635635
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
636-
disable_csp, enable_sync, no_sandbox, disable_gpu,
637-
incognito, guest_mode, devtools,
636+
disable_csp, enable_sync, use_auto_ext,
637+
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
638638
user_data_dir, extension_zip, extension_dir, servername,
639639
mobile_emulator, device_width, device_height,
640640
device_pixel_ratio)
@@ -689,8 +689,8 @@ def get_local_driver(
689689
chrome_options = _set_chrome_options(
690690
downloads_path, headless,
691691
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
692-
disable_csp, enable_sync, no_sandbox, disable_gpu,
693-
incognito, guest_mode, devtools,
692+
disable_csp, enable_sync, use_auto_ext,
693+
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
694694
user_data_dir, extension_zip, extension_dir, servername,
695695
mobile_emulator, device_width, device_height,
696696
device_pixel_ratio)

seleniumbase/fixtures/base_case.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,7 +1522,7 @@ def switch_to_default_window(self):
15221522
def get_new_driver(self, browser=None, headless=None,
15231523
servername=None, port=None, proxy=None, agent=None,
15241524
switch_to=True, cap_file=None, cap_string=None,
1525-
disable_csp=None, enable_sync=None,
1525+
disable_csp=None, enable_sync=None, use_auto_ext=None,
15261526
no_sandbox=None, disable_gpu=None,
15271527
incognito=None, guest_mode=None, devtools=None,
15281528
user_data_dir=None, extension_zip=None,
@@ -1543,6 +1543,7 @@ def get_new_driver(self, browser=None, headless=None,
15431543
cap_string - the string with desired capabilities for the browser
15441544
disable_csp - an option to disable Chrome's Content Security Policy
15451545
enable_sync - the option to enable the Chrome Sync feature (Chrome)
1546+
use_auto_ext - the option to enable Chrome's Automation Extension
15461547
no_sandbox - the option to enable the "No-Sandbox" feature (Chrome)
15471548
disable_gpu - the option to enable Chrome's "Disable GPU" feature
15481549
incognito - the option to enable Chrome's Incognito mode (Chrome)
@@ -1600,6 +1601,8 @@ def get_new_driver(self, browser=None, headless=None,
16001601
disable_csp = self.disable_csp
16011602
if enable_sync is None:
16021603
enable_sync = self.enable_sync
1604+
if use_auto_ext is None:
1605+
use_auto_ext = self.use_auto_ext
16031606
if no_sandbox is None:
16041607
no_sandbox = self.no_sandbox
16051608
if disable_gpu is None:
@@ -1648,6 +1651,7 @@ def get_new_driver(self, browser=None, headless=None,
16481651
cap_string=cap_string,
16491652
disable_csp=disable_csp,
16501653
enable_sync=enable_sync,
1654+
use_auto_ext=use_auto_ext,
16511655
no_sandbox=no_sandbox,
16521656
disable_gpu=disable_gpu,
16531657
incognito=incognito,
@@ -4547,6 +4551,7 @@ def setUp(self, masterqa_mode=False):
45474551
self.verify_delay = sb_config.verify_delay
45484552
self.disable_csp = sb_config.disable_csp
45494553
self.enable_sync = sb_config.enable_sync
4554+
self.use_auto_ext = sb_config.use_auto_ext
45504555
self.no_sandbox = sb_config.no_sandbox
45514556
self.disable_gpu = sb_config.disable_gpu
45524557
self.incognito = sb_config.incognito
@@ -4705,6 +4710,7 @@ def setUp(self, masterqa_mode=False):
47054710
cap_string=self.cap_string,
47064711
disable_csp=self.disable_csp,
47074712
enable_sync=self.enable_sync,
4713+
use_auto_ext=self.use_auto_ext,
47084714
no_sandbox=self.no_sandbox,
47094715
disable_gpu=self.disable_gpu,
47104716
incognito=self.incognito,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def pytest_addoption(parser):
4545
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
4646
--disable-csp (This disables the Content Security Policy of websites.)
4747
--enable-sync (The option to enable "Chrome Sync".)
48+
--use-auto-ext (The option to use Chrome's automation extension.)
4849
--no-sandbox (The option to enable Chrome's "No-Sandbox" feature.)
4950
--disable-gpu (The option to enable Chrome's "Disable GPU" feature.)
5051
--incognito (The option to enable Chrome's Incognito mode.)
@@ -350,6 +351,13 @@ def pytest_addoption(parser):
350351
dest='enable_sync',
351352
default=False,
352353
help="""Using this enables the "Chrome Sync" feature.""")
354+
parser.addoption('--use_auto_ext', '--use-auto-ext', '--auto-ext',
355+
action="store_true",
356+
dest='use_auto_ext',
357+
default=False,
358+
help="""Using this enables Chrome's Automation Extension.
359+
It's not required, but some commands & advanced
360+
features may need it.""")
353361
parser.addoption('--no_sandbox', '--no-sandbox',
354362
action="store_true",
355363
dest='no_sandbox',
@@ -462,6 +470,7 @@ def pytest_configure(config):
462470
sb_config.verify_delay = config.getoption('verify_delay')
463471
sb_config.disable_csp = config.getoption('disable_csp')
464472
sb_config.enable_sync = config.getoption('enable_sync')
473+
sb_config.use_auto_ext = config.getoption('use_auto_ext')
465474
sb_config.no_sandbox = config.getoption('no_sandbox')
466475
sb_config.disable_gpu = config.getoption('disable_gpu')
467476
sb_config.incognito = config.getoption('incognito')

seleniumbase/plugins/selenium_plugin.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,9 @@ class SeleniumBrowser(Plugin):
3636
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
3737
--disable-csp (This disables the Content Security Policy of websites.)
3838
--enable-sync (The option to enable "Chrome Sync".)
39+
--use-auto-ext (The option to use Chrome's automation extension.)
3940
--no-sandbox (The option to enable Chrome's "No-Sandbox" feature.)
40-
--disable_gpu (The option to enable Chrome's "Disable GPU" feature.)
41+
--disable-gpu (The option to enable Chrome's "Disable GPU" feature.)
4142
--incognito (The option to enable Chrome's Incognito mode.)
4243
--guest (The option to enable Chrome's Guest mode.)
4344
--devtools (The option to open Chrome's DevTools when the browser opens.)
@@ -265,6 +266,14 @@ def options(self, parser, env):
265266
dest='enable_sync',
266267
default=False,
267268
help="""Using this enables the "Chrome Sync" feature.""")
269+
parser.add_option(
270+
'--use_auto_ext', '--use-auto-ext', '--auto-ext',
271+
action="store_true",
272+
dest='use_auto_ext',
273+
default=False,
274+
help="""Using this enables Chrome's Automation Extension.
275+
It's not required, but some commands & advanced
276+
features may need it.""")
268277
parser.add_option(
269278
'--no_sandbox', '--no-sandbox',
270279
action="store_true",
@@ -361,6 +370,7 @@ def beforeTest(self, test):
361370
test.test.verify_delay = self.options.verify_delay # MasterQA
362371
test.test.disable_csp = self.options.disable_csp
363372
test.test.enable_sync = self.options.enable_sync
373+
test.test.use_auto_ext = self.options.use_auto_ext
364374
test.test.no_sandbox = self.options.no_sandbox
365375
test.test.disable_gpu = self.options.disable_gpu
366376
test.test.incognito = self.options.incognito

0 commit comments

Comments
 (0)