Skip to content

Commit fb3f669

Browse files
committed
Add "--remote-debug" for Chrome's Remote Debugger
1 parent 24b6407 commit fb3f669

File tree

7 files changed

+74
-26
lines changed

7 files changed

+74
-26
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,7 @@ SeleniumBase provides additional ``pytest`` command-line options for tests:
411411
--enable-ws # (Enable Web Security on Chromium-based browsers.)
412412
--enable-sync # (Enable "Chrome Sync".)
413413
--use-auto-ext # (Use Chrome's automation extension.)
414+
--remote-debug # (Enable Chrome's Remote Debugger on http://localhost:9222)
414415
--swiftshader # (Use Chrome's "--use-gl=swiftshader" feature.)
415416
--incognito # (Enable Chrome's Incognito mode.)
416417
--guest # (Enable Chrome's Guest mode.)

examples/raw_parameter_script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
sb.demo_sleep = 1
7272
sb.message_duration = 2
7373
sb.block_images = False
74+
sb.remote_debug = False
7475
sb.settings_file = None
7576
sb.user_data_dir = None
7677
sb.proxy_string = None

help_docs/customizing_test_runs.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ SeleniumBase provides additional ``pytest`` command-line options for tests:
128128
--enable-ws # (Enable Web Security on Chromium-based browsers.)
129129
--enable-sync # (Enable "Chrome Sync".)
130130
--use-auto-ext # (Use Chrome's automation extension.)
131+
--remote-debug # (Enable Chrome's Remote Debugger on http://localhost:9222)
131132
--swiftshader # (Use Chrome's "--use-gl=swiftshader" feature.)
132133
--incognito # (Enable Chrome's Incognito mode.)
133134
--guest # (Enable Chrome's Guest mode.)

seleniumbase/core/browser_launcher.py

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,9 @@ def _set_chrome_options(
132132
browser_name, downloads_path, headless, locale_code,
133133
proxy_string, proxy_auth, proxy_user, proxy_pass,
134134
user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext,
135-
no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader,
136-
block_images, user_data_dir, extension_zip, extension_dir, servername,
135+
no_sandbox, disable_gpu, incognito, guest_mode,
136+
devtools, remote_debug, swiftshader, block_images,
137+
user_data_dir, extension_zip, extension_dir, servername,
137138
mobile_emulator, device_width, device_height, device_pixel_ratio):
138139
chrome_options = webdriver.ChromeOptions()
139140
prefs = {
@@ -283,6 +284,11 @@ def _set_chrome_options(
283284
else:
284285
# Opera Chromium only!
285286
chrome_options.add_argument("--allow-elevated-browser")
287+
if remote_debug:
288+
# To access the Remote Debugger, go to: http://localhost:9222
289+
# while a Chromium driver is running.
290+
# Info: https://chromedevtools.github.io/devtools-protocol/
291+
chrome_options.add_argument('--remote-debugging-port=9222')
286292
if swiftshader:
287293
chrome_options.add_argument("--use-gl=swiftshader")
288294
else:
@@ -418,9 +424,10 @@ def get_driver(browser_name, headless=False, locale_code=None,
418424
cap_file=None, cap_string=None,
419425
disable_csp=None, enable_ws=None, enable_sync=None,
420426
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
421-
incognito=None, guest_mode=None, devtools=None,
422-
swiftshader=None, block_images=None, user_data_dir=None,
423-
extension_zip=None, extension_dir=None,
427+
incognito=None, guest_mode=None,
428+
devtools=None, remote_debug=None,
429+
swiftshader=None, block_images=None,
430+
user_data_dir=None, extension_zip=None, extension_dir=None,
424431
test_id=None, mobile_emulator=False, device_width=None,
425432
device_height=None, device_pixel_ratio=None):
426433
proxy_auth = False
@@ -458,16 +465,17 @@ def get_driver(browser_name, headless=False, locale_code=None,
458465
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
459466
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
460467
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
461-
devtools, swiftshader, block_images, user_data_dir,
462-
extension_zip, extension_dir, test_id,
468+
devtools, remote_debug, swiftshader, block_images,
469+
user_data_dir, extension_zip, extension_dir, test_id,
463470
mobile_emulator, device_width, device_height, device_pixel_ratio)
464471
else:
465472
return get_local_driver(
466473
browser_name, headless, locale_code, servername,
467474
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
468-
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
469-
disable_gpu, incognito, guest_mode, devtools, swiftshader,
470-
block_images, user_data_dir, extension_zip, extension_dir,
475+
disable_csp, enable_ws, enable_sync,
476+
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
477+
devtools, remote_debug, swiftshader, block_images,
478+
user_data_dir, extension_zip, extension_dir,
471479
mobile_emulator, device_width, device_height, device_pixel_ratio)
472480

473481

@@ -476,7 +484,7 @@ def get_remote_driver(
476484
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
477485
cap_file, cap_string, disable_csp, enable_ws, enable_sync,
478486
use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode,
479-
devtools, swiftshader, block_images,
487+
devtools, remote_debug, swiftshader, block_images,
480488
user_data_dir, extension_zip, extension_dir, test_id,
481489
mobile_emulator, device_width, device_height, device_pixel_ratio):
482490
downloads_path = download_helper.get_downloads_folder()
@@ -508,8 +516,9 @@ def get_remote_driver(
508516
browser_name, downloads_path, headless, locale_code,
509517
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
510518
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
511-
disable_gpu, incognito, guest_mode, devtools, swiftshader,
512-
block_images, user_data_dir, extension_zip, extension_dir,
519+
disable_gpu, incognito, guest_mode,
520+
devtools, remote_debug, swiftshader, block_images,
521+
user_data_dir, extension_zip, extension_dir,
513522
servername, mobile_emulator,
514523
device_width, device_height, device_pixel_ratio)
515524
capabilities = chrome_options.to_capabilities()
@@ -635,8 +644,9 @@ def get_local_driver(
635644
browser_name, headless, locale_code, servername,
636645
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
637646
disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox,
638-
disable_gpu, incognito, guest_mode, devtools, swiftshader,
639-
block_images, user_data_dir, extension_zip, extension_dir,
647+
disable_gpu, incognito, guest_mode,
648+
devtools, remote_debug, swiftshader, block_images,
649+
user_data_dir, extension_zip, extension_dir,
640650
mobile_emulator, device_width, device_height, device_pixel_ratio):
641651
'''
642652
Spins up a new web browser and returns the driver.
@@ -727,9 +737,9 @@ def get_local_driver(
727737
browser_name, downloads_path, headless, locale_code,
728738
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
729739
disable_csp, enable_ws, enable_sync, use_auto_ext,
730-
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
731-
swiftshader, block_images, user_data_dir,
732-
extension_zip, extension_dir, servername,
740+
no_sandbox, disable_gpu, incognito, guest_mode,
741+
devtools, remote_debug, swiftshader, block_images,
742+
user_data_dir, extension_zip, extension_dir, servername,
733743
mobile_emulator, device_width, device_height,
734744
device_pixel_ratio)
735745
if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER):
@@ -839,6 +849,11 @@ def get_local_driver(
839849
if user_agent:
840850
edge_options.add_argument("--user-agent=%s" % user_agent)
841851
edge_options.add_argument("--no-sandbox")
852+
if remote_debug:
853+
# To access the Remote Debugger, go to: http://localhost:9222
854+
# while a Chromium driver is running.
855+
# Info: https://chromedevtools.github.io/devtools-protocol/
856+
edge_options.add_argument('--remote-debugging-port=9222')
842857
if swiftshader:
843858
edge_options.add_argument("--use-gl=swiftshader")
844859
else:
@@ -868,9 +883,10 @@ def get_local_driver(
868883
browser_name, downloads_path, headless, locale_code,
869884
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
870885
disable_csp, enable_ws, enable_sync, use_auto_ext,
871-
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
872-
swiftshader, block_images, user_data_dir, extension_zip,
873-
extension_dir, servername, mobile_emulator,
886+
no_sandbox, disable_gpu, incognito, guest_mode,
887+
devtools, remote_debug, swiftshader, block_images,
888+
user_data_dir, extension_zip, extension_dir,
889+
servername, mobile_emulator,
874890
device_width, device_height, device_pixel_ratio)
875891
opera_options.headless = False # No support for headless Opera
876892
return webdriver.Opera(options=opera_options)
@@ -887,9 +903,10 @@ def get_local_driver(
887903
browser_name, downloads_path, headless, locale_code,
888904
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
889905
disable_csp, enable_ws, enable_sync, use_auto_ext,
890-
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
891-
swiftshader, block_images, user_data_dir, extension_zip,
892-
extension_dir, servername, mobile_emulator,
906+
no_sandbox, disable_gpu, incognito, guest_mode,
907+
devtools, remote_debug, swiftshader, block_images,
908+
user_data_dir, extension_zip, extension_dir,
909+
servername, mobile_emulator,
893910
device_width, device_height, device_pixel_ratio)
894911
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER):
895912
try:

seleniumbase/fixtures/base_case.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,7 +1782,8 @@ def get_new_driver(self, browser=None, headless=None, locale_code=None,
17821782
switch_to=True, cap_file=None, cap_string=None,
17831783
disable_csp=None, enable_ws=None, enable_sync=None,
17841784
use_auto_ext=None, no_sandbox=None, disable_gpu=None,
1785-
incognito=None, guest_mode=None, devtools=None,
1785+
incognito=None, guest_mode=None,
1786+
devtools=None, remote_debug=None,
17861787
swiftshader=None, block_images=None, user_data_dir=None,
17871788
extension_zip=None, extension_dir=None, is_mobile=False,
17881789
d_width=None, d_height=None, d_p_r=None):
@@ -1809,7 +1810,8 @@ def get_new_driver(self, browser=None, headless=None, locale_code=None,
18091810
incognito - the option to enable Chrome's Incognito mode (Chrome)
18101811
guest - the option to enable Chrome's Guest mode (Chrome)
18111812
devtools - the option to open Chrome's DevTools on start (Chrome)
1812-
swiftshader the option to use "--use-gl=swiftshader" (Chrome-only)
1813+
remote_debug - the option to enable Chrome's Remote Debugger
1814+
swiftshader - the option to use Chrome's swiftshader (Chrome-only)
18131815
block_images - the option to block images from loading (Chrome)
18141816
user_data_dir - Chrome's User Data Directory to use (Chrome-only)
18151817
extension_zip - A Chrome Extension ZIP file to use (Chrome-only)
@@ -1879,6 +1881,8 @@ def get_new_driver(self, browser=None, headless=None, locale_code=None,
18791881
guest_mode = self.guest_mode
18801882
if devtools is None:
18811883
devtools = self.devtools
1884+
if remote_debug is None:
1885+
remote_debug = self.remote_debug
18821886
if swiftshader is None:
18831887
swiftshader = self.swiftshader
18841888
if block_images is None:
@@ -1927,6 +1931,7 @@ def get_new_driver(self, browser=None, headless=None, locale_code=None,
19271931
incognito=incognito,
19281932
guest_mode=guest_mode,
19291933
devtools=devtools,
1934+
remote_debug=remote_debug,
19301935
swiftshader=swiftshader,
19311936
block_images=block_images,
19321937
user_data_dir=user_data_dir,
@@ -6255,6 +6260,7 @@ def setUp(self, masterqa_mode=False):
62556260
self.incognito = sb_config.incognito
62566261
self.guest_mode = sb_config.guest_mode
62576262
self.devtools = sb_config.devtools
6263+
self.remote_debug = sb_config.remote_debug
62586264
self.swiftshader = sb_config.swiftshader
62596265
self.user_data_dir = sb_config.user_data_dir
62606266
self.extension_zip = sb_config.extension_zip
@@ -6422,6 +6428,7 @@ def setUp(self, masterqa_mode=False):
64226428
incognito=self.incognito,
64236429
guest_mode=self.guest_mode,
64246430
devtools=self.devtools,
6431+
remote_debug=self.remote_debug,
64256432
swiftshader=self.swiftshader,
64266433
block_images=self.block_images,
64276434
user_data_dir=self.user_data_dir,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def pytest_addoption(parser):
5252
--enable-ws (Enable Web Security on Chromium-based browsers.)
5353
--enable-sync (Enable "Chrome Sync".)
5454
--use-auto-ext (Use Chrome's automation extension.)
55+
--remote-debug (Enable Chrome's Remote Debugger on http://localhost:9222)
5556
--swiftshader (Use Chrome's "--use-gl=swiftshader" feature.)
5657
--incognito (Enable Chrome's Incognito mode.)
5758
--guest (Enable Chrome's Guest mode.)
@@ -413,6 +414,14 @@ def pytest_addoption(parser):
413414
default=False,
414415
help="""Using this enables the "Disable GPU" feature.
415416
(This setting is now always enabled by default.)""")
417+
parser.addoption('--remote_debug', '--remote-debug',
418+
action="store_true",
419+
dest='remote_debug',
420+
default=False,
421+
help="""This enables Chromium's remote debugger.
422+
To access the remote debugging interface, go to:
423+
http://localhost:9222 while Chromedriver is running.
424+
Info: chromedevtools.github.io/devtools-protocol/""")
416425
parser.addoption('--swiftshader',
417426
action="store_true",
418427
dest='swiftshader',
@@ -538,6 +547,7 @@ def pytest_configure(config):
538547
sb_config.use_auto_ext = config.getoption('use_auto_ext')
539548
sb_config.no_sandbox = config.getoption('no_sandbox')
540549
sb_config.disable_gpu = config.getoption('disable_gpu')
550+
sb_config.remote_debug = config.getoption('remote_debug')
541551
sb_config.swiftshader = config.getoption('swiftshader')
542552
sb_config.incognito = config.getoption('incognito')
543553
sb_config.guest_mode = config.getoption('guest_mode')

seleniumbase/plugins/selenium_plugin.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class SeleniumBrowser(Plugin):
4242
--enable-ws (Enable Web Security on Chromium-based browsers.)
4343
--enable-sync (Enable "Chrome Sync".)
4444
--use-auto-ext (Use Chrome's automation extension.)
45+
--remote-debug (Enable Chrome's Remote Debugger on http://localhost:9222)
4546
--swiftshader (Use Chrome's "--use-gl=swiftshader" feature.)
4647
--incognito (Enable Chrome's Incognito mode.)
4748
--guest (Enable Chrome's Guest mode.)
@@ -323,6 +324,15 @@ def options(self, parser, env):
323324
default=False,
324325
help="""Using this enables the "Disable GPU" feature.
325326
(This setting is now always enabled by default.)""")
327+
parser.add_option(
328+
'--remote_debug', '--remote-debug',
329+
action="store_true",
330+
dest='remote_debug',
331+
default=False,
332+
help="""This enables Chromium's remote debugger.
333+
To access the remote debugging interface, go to:
334+
http://localhost:9222 while Chromedriver is running.
335+
Info: chromedevtools.github.io/devtools-protocol/""")
326336
parser.add_option(
327337
'--swiftshader',
328338
action="store_true",
@@ -423,6 +433,7 @@ def beforeTest(self, test):
423433
test.test.use_auto_ext = self.options.use_auto_ext
424434
test.test.no_sandbox = self.options.no_sandbox
425435
test.test.disable_gpu = self.options.disable_gpu
436+
test.text.remote_debug = self.options.remote_debug
426437
test.test.swiftshader = self.options.swiftshader
427438
test.test.incognito = self.options.incognito
428439
test.test.guest_mode = self.options.guest_mode

0 commit comments

Comments
 (0)