Skip to content

Commit 9e052e8

Browse files
committed
Add a command-line option to block images in tests
1 parent bb2c2f3 commit 9e052e8

File tree

7 files changed

+44
-14
lines changed

7 files changed

+44
-14
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ SeleniumBase provides additional Pytest command-line options for tests:
321321
--message-duration=SECONDS # (The time length for Messenger alerts.)
322322
--check-js # (The option to check for JavaScript errors after page loads.)
323323
--ad-block # (The option to block some display ads after page loads.)
324+
--block-images # (The option to block images from loading during tests.)
324325
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
325326
--disable-csp # (This disables the Content Security Policy of websites.)
326327
--enable-sync # (The option to enable "Chrome Sync".)

examples/raw_parameter_script.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,17 @@
5757
sb.save_screenshot_after_test = False
5858
sb.timeout_multiplier = None
5959
sb.pytest_html_report = None
60-
sb.report_on = False
6160
sb.with_db_reporting = False
6261
sb.with_s3_logging = False
6362
sb.js_checking_on = False
63+
sb.report_on = False
6464
sb.is_pytest = False
65-
sb.time_limit = None
6665
sb.slow_mode = False
6766
sb.demo_mode = False
67+
sb.time_limit = None
6868
sb.demo_sleep = 1
6969
sb.message_duration = 2
70+
sb.block_images = False
7071
sb.settings_file = None
7172
sb.user_data_dir = None
7273
sb.proxy_string = None

help_docs/customizing_test_runs.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ SeleniumBase provides additional Pytest command-line options for tests:
118118
--message-duration=SECONDS # (The time length for Messenger alerts.)
119119
--check-js # (The option to check for JavaScript errors after page loads.)
120120
--ad-block # (The option to block some display ads after page loads.)
121+
--block-images # (The option to block images from loading during tests.)
121122
--verify-delay=SECONDS # (The delay before MasterQA verification checks.)
122123
--disable-csp # (This disables the Content Security Policy of websites.)
123124
--enable-sync # (The option to enable "Chrome Sync".)

seleniumbase/core/browser_launcher.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def _set_chrome_options(
132132
downloads_path, headless,
133133
proxy_string, proxy_auth, proxy_user, proxy_pass,
134134
user_agent, disable_csp, enable_sync, use_auto_ext,
135-
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
135+
no_sandbox, disable_gpu, incognito, guest_mode, devtools, block_images,
136136
user_data_dir, extension_zip, extension_dir, servername,
137137
mobile_emulator, device_width, device_height, device_pixel_ratio):
138138
chrome_options = webdriver.ChromeOptions()
@@ -144,6 +144,8 @@ def _set_chrome_options(
144144
"password_manager_enabled": False
145145
}
146146
}
147+
if block_images:
148+
prefs["profile.managed_default_content_settings.images"] = 2
147149
chrome_options.add_experimental_option("prefs", prefs)
148150
chrome_options.add_experimental_option("w3c", True)
149151
if enable_sync:
@@ -357,7 +359,8 @@ def get_driver(browser_name, headless=False, use_grid=False,
357359
disable_csp=None, enable_sync=None, use_auto_ext=None,
358360
no_sandbox=None, disable_gpu=None,
359361
incognito=None, guest_mode=None, devtools=None,
360-
user_data_dir=None, extension_zip=None, extension_dir=None,
362+
block_images=None, user_data_dir=None,
363+
extension_zip=None, extension_dir=None,
361364
test_id=None, mobile_emulator=False, device_width=None,
362365
device_height=None, device_pixel_ratio=None):
363366
proxy_auth = False
@@ -395,14 +398,14 @@ def get_driver(browser_name, headless=False, use_grid=False,
395398
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
396399
cap_file, cap_string, disable_csp, enable_sync, use_auto_ext,
397400
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
398-
user_data_dir, extension_zip, extension_dir, test_id,
401+
block_images, user_data_dir, extension_zip, extension_dir, test_id,
399402
mobile_emulator, device_width, device_height, device_pixel_ratio)
400403
else:
401404
return get_local_driver(
402405
browser_name, headless, servername,
403406
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
404407
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
405-
incognito, guest_mode, devtools,
408+
incognito, guest_mode, devtools, block_images,
406409
user_data_dir, extension_zip, extension_dir,
407410
mobile_emulator, device_width, device_height, device_pixel_ratio)
408411

@@ -411,7 +414,7 @@ def get_remote_driver(
411414
browser_name, headless, servername, port, proxy_string, proxy_auth,
412415
proxy_user, proxy_pass, user_agent, cap_file, cap_string,
413416
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
414-
incognito, guest_mode, devtools,
417+
incognito, guest_mode, devtools, block_images,
415418
user_data_dir, extension_zip, extension_dir, test_id,
416419
mobile_emulator, device_width, device_height, device_pixel_ratio):
417420
downloads_path = download_helper.get_downloads_folder()
@@ -443,7 +446,7 @@ def get_remote_driver(
443446
downloads_path, headless,
444447
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
445448
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
446-
incognito, guest_mode, devtools,
449+
incognito, guest_mode, devtools, block_images,
447450
user_data_dir, extension_zip, extension_dir, servername,
448451
mobile_emulator, device_width, device_height, device_pixel_ratio)
449452
capabilities = chrome_options.to_capabilities()
@@ -567,7 +570,7 @@ def get_local_driver(
567570
browser_name, headless, servername,
568571
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
569572
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
570-
incognito, guest_mode, devtools,
573+
incognito, guest_mode, devtools, block_images,
571574
user_data_dir, extension_zip, extension_dir,
572575
mobile_emulator, device_width, device_height, device_pixel_ratio):
573576
'''
@@ -658,7 +661,8 @@ def get_local_driver(
658661
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
659662
disable_csp, enable_sync, use_auto_ext,
660663
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
661-
user_data_dir, extension_zip, extension_dir, servername,
664+
block_images, user_data_dir,
665+
extension_zip, extension_dir, servername,
662666
mobile_emulator, device_width, device_height,
663667
device_pixel_ratio)
664668
if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER):
@@ -715,8 +719,8 @@ def get_local_driver(
715719
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
716720
disable_csp, enable_sync, use_auto_ext,
717721
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
718-
user_data_dir, extension_zip, extension_dir, servername,
719-
mobile_emulator, device_width, device_height,
722+
block_images, user_data_dir, extension_zip, extension_dir,
723+
servername, mobile_emulator, device_width, device_height,
720724
device_pixel_ratio)
721725
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER):
722726
try:

seleniumbase/fixtures/base_case.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1592,8 +1592,8 @@ def get_new_driver(self, browser=None, headless=None,
15921592
disable_csp=None, enable_sync=None, use_auto_ext=None,
15931593
no_sandbox=None, disable_gpu=None,
15941594
incognito=None, guest_mode=None, devtools=None,
1595-
user_data_dir=None, extension_zip=None,
1596-
extension_dir=None, is_mobile=False,
1595+
block_images=None, user_data_dir=None,
1596+
extension_zip=None, extension_dir=None, is_mobile=False,
15971597
d_width=None, d_height=None, d_p_r=None):
15981598
""" This method spins up an extra browser for tests that require
15991599
more than one. The first browser is already provided by tests
@@ -1616,6 +1616,7 @@ def get_new_driver(self, browser=None, headless=None,
16161616
incognito - the option to enable Chrome's Incognito mode (Chrome)
16171617
guest - the option to enable Chrome's Guest mode (Chrome)
16181618
devtools - the option to open Chrome's DevTools on start (Chrome)
1619+
block_images - the option to block images from loading (Chrome)
16191620
user_data_dir - Chrome's User Data Directory to use (Chrome-only)
16201621
extension_zip - A Chrome Extension ZIP file to use (Chrome-only)
16211622
extension_dir - A Chrome Extension folder to use (Chrome-only)
@@ -1680,6 +1681,8 @@ def get_new_driver(self, browser=None, headless=None,
16801681
guest_mode = self.guest_mode
16811682
if devtools is None:
16821683
devtools = self.devtools
1684+
if block_images is None:
1685+
block_images = self.block_images
16831686
if user_data_dir is None:
16841687
user_data_dir = self.user_data_dir
16851688
if extension_zip is None:
@@ -1725,6 +1728,7 @@ def get_new_driver(self, browser=None, headless=None,
17251728
incognito=incognito,
17261729
guest_mode=guest_mode,
17271730
devtools=devtools,
1731+
block_images=block_images,
17281732
user_data_dir=user_data_dir,
17291733
extension_zip=extension_zip,
17301734
extension_dir=extension_dir,
@@ -5269,6 +5273,7 @@ def setUp(self, masterqa_mode=False):
52695273
self.message_duration = sb_config.message_duration
52705274
self.js_checking_on = sb_config.js_checking_on
52715275
self.ad_block_on = sb_config.ad_block_on
5276+
self.block_images = sb_config.block_images
52725277
self.verify_delay = sb_config.verify_delay
52735278
self.disable_csp = sb_config.disable_csp
52745279
self.enable_sync = sb_config.enable_sync
@@ -5440,6 +5445,7 @@ def setUp(self, masterqa_mode=False):
54405445
incognito=self.incognito,
54415446
guest_mode=self.guest_mode,
54425447
devtools=self.devtools,
5448+
block_images=self.block_images,
54435449
user_data_dir=self.user_data_dir,
54445450
extension_zip=self.extension_zip,
54455451
extension_dir=self.extension_dir,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ def pytest_addoption(parser):
4242
--message-duration=SECONDS (The time length for Messenger alerts.)
4343
--check-js (The option to check for JavaScript errors after page loads.)
4444
--ad-block (The option to block some display ads after page loads.)
45+
--block-images (The option to block images from loading during tests.)
4546
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
4647
--disable-csp (This disables the Content Security Policy of websites.)
4748
--enable-sync (The option to enable "Chrome Sync".)
@@ -330,6 +331,12 @@ def pytest_addoption(parser):
330331
default=False,
331332
help="""Using this makes WebDriver block display ads
332333
that are defined in ad_block_list.AD_BLOCK_LIST.""")
334+
parser.addoption('--block_images', '--block-images',
335+
action="store_true",
336+
dest='block_images',
337+
default=False,
338+
help="""Using this makes WebDriver block images from
339+
loading on web pages during tests.""")
333340
parser.addoption('--verify_delay', '--verify-delay',
334341
action='store',
335342
dest='verify_delay',
@@ -477,6 +484,7 @@ def pytest_configure(config):
477484
sb_config.message_duration = config.getoption('message_duration')
478485
sb_config.js_checking_on = config.getoption('js_checking_on')
479486
sb_config.ad_block_on = config.getoption('ad_block_on')
487+
sb_config.block_images = config.getoption('block_images')
480488
sb_config.verify_delay = config.getoption('verify_delay')
481489
sb_config.disable_csp = config.getoption('disable_csp')
482490
sb_config.enable_sync = config.getoption('enable_sync')

seleniumbase/plugins/selenium_plugin.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class SeleniumBrowser(Plugin):
3333
--message-duration=SECONDS (The time length for Messenger alerts.)
3434
--check-js (The option to check for JavaScript errors after page loads.)
3535
--ad-block (The option to block some display ads after page loads.)
36+
--block-images (The option to block images from loading during tests.)
3637
--verify-delay=SECONDS (The delay before MasterQA verification checks.)
3738
--disable-csp (This disables the Content Security Policy of websites.)
3839
--enable-sync (The option to enable "Chrome Sync".)
@@ -240,6 +241,13 @@ def options(self, parser, env):
240241
default=False,
241242
help="""Using this makes WebDriver block display ads
242243
that are defined in ad_block_list.AD_BLOCK_LIST.""")
244+
parser.add_option(
245+
'--block_images', '--block-images',
246+
action="store_true",
247+
dest='block_images',
248+
default=False,
249+
help="""Using this makes WebDriver block images from
250+
loading on web pages during tests.""")
243251
parser.add_option(
244252
'--verify_delay', '--verify-delay',
245253
action='store',
@@ -367,6 +375,7 @@ def beforeTest(self, test):
367375
test.test.message_duration = self.options.message_duration
368376
test.test.js_checking_on = self.options.js_checking_on
369377
test.test.ad_block_on = self.options.ad_block_on
378+
test.test.block_images = self.options.block_images
370379
test.test.verify_delay = self.options.verify_delay # MasterQA
371380
test.test.disable_csp = self.options.disable_csp
372381
test.test.enable_sync = self.options.enable_sync

0 commit comments

Comments
 (0)