Skip to content

Commit e72e209

Browse files
authored
Merge pull request #617 from seleniumbase/block-images-feature
Add an option to block images from loading; and more
2 parents bb2c2f3 + 53aa0eb commit e72e209

File tree

10 files changed

+54
-17
lines changed

10 files changed

+54
-17
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ html_report.html
8383
report.html
8484
report.xml
8585

86+
# Allure Reports / Results
87+
allure-report
88+
allure-results
89+
8690
# Presentations
8791
presentations_saved
8892
saved_presentations

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".)

requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,12 @@ coverage==5.2
4242
pyotp==2.3.0
4343
boto==2.49.0
4444
cffi==1.14.0
45-
rich==3.0.5;python_version>="3.6" and python_version<"4.0"
45+
rich==3.1.0;python_version>="3.6" and python_version<"4.0"
4646
flake8==3.7.9;python_version<"3.5"
4747
flake8==3.8.3;python_version>="3.5"
4848
pyflakes==2.1.1;python_version<"3.5"
4949
pyflakes==2.2.0;python_version>="3.5"
5050
certifi>=2020.6.20
51+
allure-pytest==2.8.16
5152
pdfminer.six==20191110;python_version<"3.5"
5253
pdfminer.six==20200517;python_version>="3.5"

seleniumbase/core/browser_launcher.py

Lines changed: 15 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:
@@ -209,6 +211,7 @@ def _set_chrome_options(
209211
chrome_options.add_argument("--disable-translate")
210212
chrome_options.add_argument("--disable-web-security")
211213
chrome_options.add_argument("--homepage=about:blank")
214+
chrome_options.add_argument("--dns-prefetch-disable")
212215
chrome_options.add_argument("--dom-automation")
213216
if not use_auto_ext: # (It's ON by default. Disable it when not wanted.)
214217
chrome_options.add_experimental_option("useAutomationExtension", False)
@@ -357,7 +360,8 @@ def get_driver(browser_name, headless=False, use_grid=False,
357360
disable_csp=None, enable_sync=None, use_auto_ext=None,
358361
no_sandbox=None, disable_gpu=None,
359362
incognito=None, guest_mode=None, devtools=None,
360-
user_data_dir=None, extension_zip=None, extension_dir=None,
363+
block_images=None, user_data_dir=None,
364+
extension_zip=None, extension_dir=None,
361365
test_id=None, mobile_emulator=False, device_width=None,
362366
device_height=None, device_pixel_ratio=None):
363367
proxy_auth = False
@@ -395,14 +399,14 @@ def get_driver(browser_name, headless=False, use_grid=False,
395399
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
396400
cap_file, cap_string, disable_csp, enable_sync, use_auto_ext,
397401
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
398-
user_data_dir, extension_zip, extension_dir, test_id,
402+
block_images, user_data_dir, extension_zip, extension_dir, test_id,
399403
mobile_emulator, device_width, device_height, device_pixel_ratio)
400404
else:
401405
return get_local_driver(
402406
browser_name, headless, servername,
403407
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
404408
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
405-
incognito, guest_mode, devtools,
409+
incognito, guest_mode, devtools, block_images,
406410
user_data_dir, extension_zip, extension_dir,
407411
mobile_emulator, device_width, device_height, device_pixel_ratio)
408412

@@ -411,7 +415,7 @@ def get_remote_driver(
411415
browser_name, headless, servername, port, proxy_string, proxy_auth,
412416
proxy_user, proxy_pass, user_agent, cap_file, cap_string,
413417
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
414-
incognito, guest_mode, devtools,
418+
incognito, guest_mode, devtools, block_images,
415419
user_data_dir, extension_zip, extension_dir, test_id,
416420
mobile_emulator, device_width, device_height, device_pixel_ratio):
417421
downloads_path = download_helper.get_downloads_folder()
@@ -443,7 +447,7 @@ def get_remote_driver(
443447
downloads_path, headless,
444448
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
445449
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
446-
incognito, guest_mode, devtools,
450+
incognito, guest_mode, devtools, block_images,
447451
user_data_dir, extension_zip, extension_dir, servername,
448452
mobile_emulator, device_width, device_height, device_pixel_ratio)
449453
capabilities = chrome_options.to_capabilities()
@@ -567,7 +571,7 @@ def get_local_driver(
567571
browser_name, headless, servername,
568572
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
569573
disable_csp, enable_sync, use_auto_ext, no_sandbox, disable_gpu,
570-
incognito, guest_mode, devtools,
574+
incognito, guest_mode, devtools, block_images,
571575
user_data_dir, extension_zip, extension_dir,
572576
mobile_emulator, device_width, device_height, device_pixel_ratio):
573577
'''
@@ -658,7 +662,8 @@ def get_local_driver(
658662
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
659663
disable_csp, enable_sync, use_auto_ext,
660664
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
661-
user_data_dir, extension_zip, extension_dir, servername,
665+
block_images, user_data_dir,
666+
extension_zip, extension_dir, servername,
662667
mobile_emulator, device_width, device_height,
663668
device_pixel_ratio)
664669
if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER):
@@ -715,8 +720,8 @@ def get_local_driver(
715720
proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent,
716721
disable_csp, enable_sync, use_auto_ext,
717722
no_sandbox, disable_gpu, incognito, guest_mode, devtools,
718-
user_data_dir, extension_zip, extension_dir, servername,
719-
mobile_emulator, device_width, device_height,
723+
block_images, user_data_dir, extension_zip, extension_dir,
724+
servername, mobile_emulator, device_width, device_height,
720725
device_pixel_ratio)
721726
if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER):
722727
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

setup.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454

5555
setup(
5656
name='seleniumbase',
57-
version='1.42.6',
57+
version='1.42.7',
5858
description='Fast, Easy, and Reliable Browser Automation & Testing.',
5959
long_description=long_description,
6060
long_description_content_type='text/markdown',
@@ -134,12 +134,13 @@
134134
'pyotp==2.3.0',
135135
'boto==2.49.0',
136136
'cffi==1.14.0',
137-
'rich==3.0.5;python_version>="3.6" and python_version<"4.0"',
137+
'rich==3.1.0;python_version>="3.6" and python_version<"4.0"',
138138
'flake8==3.7.9;python_version<"3.5"',
139139
'flake8==3.8.3;python_version>="3.5"',
140140
'pyflakes==2.1.1;python_version<"3.5"',
141141
'pyflakes==2.2.0;python_version>="3.5"',
142142
'certifi>=2020.6.20',
143+
'allure-pytest==2.8.16',
143144
'pdfminer.six==20191110;python_version<"3.5"',
144145
'pdfminer.six==20200517;python_version>="3.5"',
145146
],

0 commit comments

Comments
 (0)