Skip to content

Commit 15df327

Browse files
authored
Merge pull request #465 from seleniumbase/incognito-mode-for-chrome
Add option for Chrome's Incognito mode with "--incognito"
2 parents 1e3bb4d + c221f75 commit 15df327

File tree

6 files changed

+42
-16
lines changed

6 files changed

+42
-16
lines changed

examples/raw_parameter_script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
sb.data = None
3636
sb.environment = "test"
3737
sb.user_agent = None
38+
sb.incognito = False
3839
sb.mobile_emulator = False
3940
sb.device_metrics = None
4041
sb.extension_zip = None

seleniumbase/core/browser_launcher.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,9 @@ def _add_chrome_disable_csp_extension(chrome_options):
124124

125125

126126
def _set_chrome_options(
127-
downloads_path, headless, proxy_string, proxy_auth,
128-
proxy_user, proxy_pass, user_agent, disable_csp, enable_sync,
127+
downloads_path, headless,
128+
proxy_string, proxy_auth, proxy_user, proxy_pass,
129+
user_agent, disable_csp, enable_sync, incognito,
129130
user_data_dir, extension_zip, extension_dir, servername,
130131
mobile_emulator, device_width, device_height, device_pixel_ratio):
131132
chrome_options = webdriver.ChromeOptions()
@@ -164,6 +165,8 @@ def _set_chrome_options(
164165
chrome_options.add_experimental_option(
165166
"excludeSwitches", ["disable-sync"])
166167
chrome_options.add_argument("--enable-sync")
168+
if incognito:
169+
chrome_options.add_argument("--incognito")
167170
if user_data_dir:
168171
abs_path = os.path.abspath(user_data_dir)
169172
chrome_options.add_argument("user-data-dir=%s" % abs_path)
@@ -323,7 +326,7 @@ def validate_proxy_string(proxy_string):
323326
def get_driver(browser_name, headless=False, use_grid=False,
324327
servername='localhost', port=4444, proxy_string=None,
325328
user_agent=None, cap_file=None, disable_csp=None,
326-
enable_sync=None, user_data_dir=None,
329+
enable_sync=None, incognito=None, user_data_dir=None,
327330
extension_zip=None, extension_dir=None, mobile_emulator=False,
328331
device_width=None, device_height=None, device_pixel_ratio=None):
329332
proxy_auth = False
@@ -358,22 +361,22 @@ def get_driver(browser_name, headless=False, use_grid=False,
358361
return get_remote_driver(
359362
browser_name, headless, servername, port,
360363
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
361-
cap_file, disable_csp, enable_sync, user_data_dir,
364+
cap_file, disable_csp, enable_sync, incognito, user_data_dir,
362365
extension_zip, extension_dir, mobile_emulator,
363366
device_width, device_height, device_pixel_ratio)
364367
else:
365368
return get_local_driver(
366369
browser_name, headless, servername,
367370
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
368-
disable_csp, enable_sync, user_data_dir,
371+
disable_csp, enable_sync, incognito, user_data_dir,
369372
extension_zip, extension_dir, mobile_emulator,
370373
device_width, device_height, device_pixel_ratio)
371374

372375

373376
def get_remote_driver(
374377
browser_name, headless, servername, port, proxy_string, proxy_auth,
375378
proxy_user, proxy_pass, user_agent, cap_file, disable_csp,
376-
enable_sync, user_data_dir, extension_zip, extension_dir,
379+
enable_sync, incognito, user_data_dir, extension_zip, extension_dir,
377380
mobile_emulator, device_width, device_height, device_pixel_ratio):
378381
downloads_path = download_helper.get_downloads_folder()
379382
download_helper.reset_downloads_folder()
@@ -383,8 +386,9 @@ def get_remote_driver(
383386
desired_caps = capabilities_parser.get_desired_capabilities(cap_file)
384387
if browser_name == constants.Browser.GOOGLE_CHROME:
385388
chrome_options = _set_chrome_options(
386-
downloads_path, headless, proxy_string, proxy_auth,
387-
proxy_user, proxy_pass, user_agent, disable_csp, enable_sync,
389+
downloads_path, headless,
390+
proxy_string, proxy_auth, proxy_user, proxy_pass,
391+
user_agent, disable_csp, enable_sync, incognito,
388392
user_data_dir, extension_zip, extension_dir, servername,
389393
mobile_emulator, device_width, device_height, device_pixel_ratio)
390394
capabilities = chrome_options.to_capabilities()
@@ -495,7 +499,7 @@ def get_remote_driver(
495499
def get_local_driver(
496500
browser_name, headless, servername,
497501
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
498-
disable_csp, enable_sync, user_data_dir,
502+
disable_csp, enable_sync, incognito, user_data_dir,
499503
extension_zip, extension_dir,
500504
mobile_emulator, device_width, device_height, device_pixel_ratio):
501505
'''
@@ -587,8 +591,8 @@ def get_local_driver(
587591
# The new Microsoft Edge browser is based on Chromium
588592
chrome_options = _set_chrome_options(
589593
downloads_path, headless,
590-
proxy_string, proxy_auth, proxy_user, proxy_pass,
591-
user_agent, disable_csp, enable_sync, user_data_dir,
594+
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
595+
disable_csp, enable_sync, incognito, user_data_dir,
592596
extension_zip, extension_dir, servername, mobile_emulator,
593597
device_width, device_height, device_pixel_ratio)
594598
return webdriver.Chrome(executable_path=LOCAL_EDGEDRIVER,
@@ -616,8 +620,8 @@ def get_local_driver(
616620
try:
617621
chrome_options = _set_chrome_options(
618622
downloads_path, headless,
619-
proxy_string, proxy_auth, proxy_user, proxy_pass,
620-
user_agent, disable_csp, enable_sync, user_data_dir,
623+
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
624+
disable_csp, enable_sync, incognito, user_data_dir,
621625
extension_zip, extension_dir, servername, mobile_emulator,
622626
device_width, device_height, device_pixel_ratio)
623627
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER):

seleniumbase/fixtures/base_case.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1363,7 +1363,7 @@ def switch_to_default_window(self):
13631363
def get_new_driver(self, browser=None, headless=None,
13641364
servername=None, port=None, proxy=None, agent=None,
13651365
switch_to=True, cap_file=None, disable_csp=None,
1366-
enable_sync=None, user_data_dir=None,
1366+
enable_sync=None, incognito=None, user_data_dir=None,
13671367
extension_zip=None, extension_dir=None, is_mobile=False,
13681368
d_width=None, d_height=None, d_p_r=None):
13691369
""" This method spins up an extra browser for tests that require
@@ -1379,7 +1379,8 @@ def get_new_driver(self, browser=None, headless=None,
13791379
switch_to - the option to switch to the new driver (default = True)
13801380
cap_file - the file containing desired capabilities for the browser
13811381
disable_csp - an option to disable Chrome's Content Security Policy
1382-
enable_sync - the option to enable the "Chrome Sync" feature
1382+
enable_sync - the option to enable the Chrome Sync feature (Chrome)
1383+
incognito - the option to enable Chrome's Incognito mode (Chrome)
13831384
user_data_dir - Chrome's User Data Directory to use (Chrome-only)
13841385
extension_zip - A Chrome Extension ZIP file to use (Chrome-only)
13851386
extension_dir - A Chrome Extension folder to use (Chrome-only)
@@ -1432,6 +1433,8 @@ def get_new_driver(self, browser=None, headless=None,
14321433
disable_csp = self.disable_csp
14331434
if enable_sync is None:
14341435
enable_sync = self.enable_sync
1436+
if incognito is None:
1437+
incognito = self.incognito
14351438
if user_data_dir is None:
14361439
user_data_dir = self.user_data_dir
14371440
if extension_zip is None:
@@ -1467,6 +1470,7 @@ def get_new_driver(self, browser=None, headless=None,
14671470
cap_file=cap_file,
14681471
disable_csp=disable_csp,
14691472
enable_sync=enable_sync,
1473+
incognito=incognito,
14701474
user_data_dir=user_data_dir,
14711475
extension_zip=extension_zip,
14721476
extension_dir=extension_dir,
@@ -4166,6 +4170,7 @@ def setUp(self, masterqa_mode=False):
41664170
self.verify_delay = sb_config.verify_delay
41674171
self.disable_csp = sb_config.disable_csp
41684172
self.enable_sync = sb_config.enable_sync
4173+
self.incognito = sb_config.incognito
41694174
self.user_data_dir = sb_config.user_data_dir
41704175
self.extension_zip = sb_config.extension_zip
41714176
self.extension_dir = sb_config.extension_dir
@@ -4306,6 +4311,7 @@ def setUp(self, masterqa_mode=False):
43064311
cap_file=self.cap_file,
43074312
disable_csp=self.disable_csp,
43084313
enable_sync=self.enable_sync,
4314+
incognito=self.incognito,
43094315
user_data_dir=self.user_data_dir,
43104316
extension_zip=self.extension_zip,
43114317
extension_dir=self.extension_dir,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def pytest_addoption(parser):
4141
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
4242
--disable-csp (This disables the Content Security Policy of websites.)
4343
--enable-sync (The option to enable "Chrome Sync".)
44+
--incognito (The option to enable Chrome's Incognito mode.)
4445
--reuse-session (The option to reuse the browser session between tests.)
4546
--maximize-window (The option to start with the web browser maximized.)
4647
--save-screenshot (The option to save a screenshot after each test.)
@@ -310,6 +311,11 @@ def pytest_addoption(parser):
310311
dest='enable_sync',
311312
default=False,
312313
help="""Using this enables the "Chrome Sync" feature.""")
314+
parser.addoption('--incognito',
315+
action="store_true",
316+
dest='incognito',
317+
default=False,
318+
help="""Using this enables Chrome's Incognito mode.""")
313319
parser.addoption('--reuse_session', '--reuse-session',
314320
action="store_true",
315321
dest='reuse_session',
@@ -386,6 +392,7 @@ def pytest_configure(config):
386392
sb_config.verify_delay = config.getoption('verify_delay')
387393
sb_config.disable_csp = config.getoption('disable_csp')
388394
sb_config.enable_sync = config.getoption('enable_sync')
395+
sb_config.incognito = config.getoption('incognito')
389396
sb_config.reuse_session = config.getoption('reuse_session')
390397
sb_config.shared_driver = None # The default driver for session reuse
391398
sb_config.maximize_option = config.getoption('maximize_option')

seleniumbase/plugins/selenium_plugin.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class SeleniumBrowser(Plugin):
3434
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
3535
--disable-csp (This disables the Content Security Policy of websites.)
3636
--enable-sync (The option to enable "Chrome Sync".)
37+
--incognito (The option to enable Chrome's Incognito mode.)
3738
--maximize-window (The option to start with the web browser maximized.)
3839
--save-screenshot (The option to save a screenshot after each test.)
3940
--visual-baseline (Set the visual baseline for Visual/Layout tests.)
@@ -239,6 +240,12 @@ def options(self, parser, env):
239240
dest='enable_sync',
240241
default=False,
241242
help="""Using this enables the "Chrome Sync" feature.""")
243+
parser.add_option(
244+
'--incognito',
245+
action="store_true",
246+
dest='incognito',
247+
default=False,
248+
help="""Using this enables Chrome's Incognito mode.""")
242249
parser.add_option(
243250
'--maximize_window', '--maximize-window', '--maximize',
244251
'--fullscreen',
@@ -303,6 +310,7 @@ def beforeTest(self, test):
303310
test.test.verify_delay = self.options.verify_delay # MasterQA
304311
test.test.disable_csp = self.options.disable_csp
305312
test.test.enable_sync = self.options.enable_sync
313+
test.test.incognito = self.options.incognito
306314
test.test.maximize_option = self.options.maximize_option
307315
test.test.save_screenshot_after_test = self.options.save_screenshot
308316
test.test.visual_baseline = self.options.visual_baseline

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545

4646
setup(
4747
name='seleniumbase',
48-
version='1.34.13',
48+
version='1.34.14',
4949
description='Fast, Easy, and Reliable Browser Automation & Testing.',
5050
long_description=long_description,
5151
long_description_content_type='text/markdown',

0 commit comments

Comments
 (0)