Skip to content

Commit 99b63cd

Browse files
committed
Add option to disable JavaScript during tests
1 parent 0253d11 commit 99b63cd

File tree

8 files changed

+66
-5
lines changed

8 files changed

+66
-5
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,10 +522,11 @@ pytest my_first_test.py --pdb
522522
--rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
523523
--rec-sleep # (If the Recorder is enabled, also records self.sleep calls.)
524524
--rec-print # (If the Recorder is enabled, prints output after tests end.)
525+
--disable-js # (Disable JavaScript on websites. Pages might break!)
525526
--disable-csp # (Disable the Content Security Policy of websites.)
526527
--disable-ws # (Disable Web Security on Chromium-based browsers.)
527528
--enable-ws # (Enable Web Security on Chromium-based browsers.)
528-
--enable-sync # (Enable "Chrome Sync".)
529+
--enable-sync # (Enable "Chrome Sync" on websites.)
529530
--use-auto-ext # (Use Chrome's automation extension.)
530531
--undetected | --uc # (Use undetected-chromedriver to evade bot-detection.)
531532
--remote-debug # (Enable Chrome's Remote Debugger on http://localhost:9222)

examples/raw_parameter_script.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
sb.use_auto_ext = False
6868
sb.undetectable = False
6969
sb.no_sandbox = False
70+
sb.disable_js = False
7071
sb.disable_gpu = False
7172
sb._multithreaded = False
7273
sb._reuse_session = False

help_docs/customizing_test_runs.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,11 @@ pytest my_first_test.py --settings-file=custom_settings.py
156156
--rec-behave # (Same as Recorder Mode, but also generates behave-gherkin.)
157157
--rec-sleep # (If the Recorder is enabled, also records self.sleep calls.)
158158
--rec-print # (If the Recorder is enabled, prints output after tests end.)
159+
--disable-js # (Disable JavaScript on websites. Pages might break!)
159160
--disable-csp # (Disable the Content Security Policy of websites.)
160161
--disable-ws # (Disable Web Security on Chromium-based browsers.)
161162
--enable-ws # (Enable Web Security on Chromium-based browsers.)
162-
--enable-sync # (Enable "Chrome Sync".)
163+
--enable-sync # (Enable "Chrome Sync" on websites.)
163164
--use-auto-ext # (Use Chrome's automation extension.)
164165
--undetected | --uc # (Use undetected-chromedriver to evade bot-detection.)
165166
--remote-debug # (Enable Chrome's Remote Debugger on http://localhost:9222)

seleniumbase/behave/behave_sb.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
-D rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
6767
-D rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
6868
-D rec-print (If the Recorder is enabled, prints output after tests end.)
69+
-D disable-js (Disable JavaScript on Chromium. May break websites!)
6970
-D disable-csp (Disable the Content Security Policy of websites.)
7071
-D disable-ws (Disable Web Security on Chromium-based browsers.)
7172
-D enable-ws (Enable Web Security on Chromium-based browsers.)
@@ -161,6 +162,7 @@ def get_configured_sb(context):
161162
sb.database_env = "test"
162163
sb.log_path = "latest_logs" + os.sep
163164
sb.archive_logs = False
165+
sb.disable_js = False
164166
sb.disable_csp = False
165167
sb.disable_ws = False
166168
sb.enable_ws = False
@@ -471,6 +473,10 @@ def get_configured_sb(context):
471473
if low_key in ["archive-logs", "archive_logs"]:
472474
sb.archive_logs = True
473475
continue
476+
# Handle: -D disable-js / disable_js
477+
if low_key in ["disable-js", "disable_js"]:
478+
sb.disable_js = True
479+
continue
474480
# Handle: -D disable-csp / disable_csp
475481
if low_key in ["disable-csp", "disable_csp"]:
476482
sb.disable_csp = True
@@ -821,6 +827,8 @@ def get_configured_sb(context):
821827
sb_config.pdb_option = sb.pdb_option
822828
sb_config.rec_behave = sb.rec_behave
823829
sb_config.rec_print = sb.rec_print
830+
sb_config.disable_js = sb.disable_js
831+
sb_config.disable_csp = sb.disable_csp
824832
sb_config.record_sleep = sb.record_sleep
825833
sb_config._is_timeout_changed = False
826834
sb_config._SMALL_TIMEOUT = settings.SMALL_TIMEOUT

seleniumbase/core/browser_launcher.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ def _set_chrome_options(
348348
proxy_pac_url,
349349
user_agent,
350350
recorder_ext,
351+
disable_js,
351352
disable_csp,
352353
enable_ws,
353354
enable_sync,
@@ -405,6 +406,8 @@ def _set_chrome_options(
405406
prefs["intl.accept_languages"] = locale_code
406407
if block_images:
407408
prefs["profile.managed_default_content_settings.images"] = 2
409+
if disable_js:
410+
prefs["profile.managed_default_content_settings.javascript"] = 2
408411
if do_not_track:
409412
prefs["enable_do_not_track"] = True
410413
if external_pdf:
@@ -660,6 +663,7 @@ def _set_firefox_options(
660663
proxy_bypass_list,
661664
proxy_pac_url,
662665
user_agent,
666+
disable_js,
663667
disable_csp,
664668
firefox_arg,
665669
firefox_pref,
@@ -732,6 +736,8 @@ def _set_firefox_options(
732736
"security.mixed_content.block_active_content", False
733737
)
734738
options.set_preference("security.warn_submit_insecure", False)
739+
if disable_js:
740+
options.set_preference("javascript.enabled", False)
735741
if settings.DISABLE_CSP_ON_FIREFOX or disable_csp:
736742
options.set_preference("security.csp.enable", False)
737743
options.set_preference(
@@ -883,6 +889,7 @@ def get_driver(
883889
cap_file=None,
884890
cap_string=None,
885891
recorder_ext=False,
892+
disable_js=False,
886893
disable_csp=False,
887894
enable_ws=False,
888895
enable_sync=False,
@@ -980,6 +987,7 @@ def get_driver(
980987
headless
981988
and (
982989
proxy_auth
990+
or disable_js
983991
or ad_block_on
984992
or disable_csp
985993
or recorder_ext
@@ -1032,6 +1040,7 @@ def get_driver(
10321040
cap_file,
10331041
cap_string,
10341042
recorder_ext,
1043+
disable_js,
10351044
disable_csp,
10361045
enable_ws,
10371046
enable_sync,
@@ -1076,6 +1085,7 @@ def get_driver(
10761085
proxy_pac_url,
10771086
user_agent,
10781087
recorder_ext,
1088+
disable_js,
10791089
disable_csp,
10801090
enable_ws,
10811091
enable_sync,
@@ -1124,6 +1134,7 @@ def get_remote_driver(
11241134
cap_file,
11251135
cap_string,
11261136
recorder_ext,
1137+
disable_js,
11271138
disable_csp,
11281139
enable_ws,
11291140
enable_sync,
@@ -1222,6 +1233,7 @@ def get_remote_driver(
12221233
proxy_pac_url,
12231234
user_agent,
12241235
recorder_ext,
1236+
disable_js,
12251237
disable_csp,
12261238
enable_ws,
12271239
enable_sync,
@@ -1314,6 +1326,7 @@ def get_remote_driver(
13141326
proxy_bypass_list,
13151327
proxy_pac_url,
13161328
user_agent,
1329+
disable_js,
13171330
disable_csp,
13181331
firefox_arg,
13191332
firefox_pref,
@@ -1448,6 +1461,7 @@ def get_remote_driver(
14481461
proxy_pac_url,
14491462
user_agent,
14501463
recorder_ext,
1464+
disable_js,
14511465
disable_csp,
14521466
enable_ws,
14531467
enable_sync,
@@ -1641,6 +1655,7 @@ def get_local_driver(
16411655
proxy_pac_url,
16421656
user_agent,
16431657
recorder_ext,
1658+
disable_js,
16441659
disable_csp,
16451660
enable_ws,
16461661
enable_sync,
@@ -1685,6 +1700,7 @@ def get_local_driver(
16851700
proxy_bypass_list,
16861701
proxy_pac_url,
16871702
user_agent,
1703+
disable_js,
16881704
disable_csp,
16891705
firefox_arg,
16901706
firefox_pref,
@@ -1930,6 +1946,8 @@ def get_local_driver(
19301946
prefs["intl.accept_languages"] = locale_code
19311947
if block_images:
19321948
prefs["profile.managed_default_content_settings.images"] = 2
1949+
if disable_js:
1950+
prefs["profile.managed_default_content_settings.javascript"] = 2
19331951
if do_not_track:
19341952
prefs["enable_do_not_track"] = True
19351953
if external_pdf:
@@ -2236,6 +2254,7 @@ def get_local_driver(
22362254
proxy_pac_url,
22372255
user_agent,
22382256
recorder_ext,
2257+
disable_js,
22392258
disable_csp,
22402259
enable_ws,
22412260
enable_sync,
@@ -2297,6 +2316,7 @@ def get_local_driver(
22972316
proxy_pac_url,
22982317
user_agent,
22992318
recorder_ext,
2319+
disable_js,
23002320
disable_csp,
23012321
enable_ws,
23022322
enable_sync,
@@ -2674,6 +2694,7 @@ def get_local_driver(
26742694
proxy_pac_url,
26752695
user_agent,
26762696
recorder_ext,
2697+
disable_js,
26772698
disable_csp,
26782699
enable_ws,
26792700
enable_sync,

seleniumbase/fixtures/base_case.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3164,6 +3164,7 @@ def get_new_driver(
31643164
cap_file=None,
31653165
cap_string=None,
31663166
recorder_ext=None,
3167+
disable_js=None,
31673168
disable_csp=None,
31683169
enable_ws=None,
31693170
enable_sync=None,
@@ -3211,6 +3212,7 @@ def get_new_driver(
32113212
cap_file - the file containing desired capabilities for the browser
32123213
cap_string - the string with desired capabilities for the browser
32133214
recorder_ext - the option to enable the SBase Recorder extension
3215+
disable_js - the option to disable JavaScript (May break websites!)
32143216
disable_csp - an option to disable Chrome's Content Security Policy
32153217
enable_ws - the option to enable the Web Security feature (Chrome)
32163218
enable_sync - the option to enable the Chrome Sync feature (Chrome)
@@ -3298,6 +3300,8 @@ def get_new_driver(
32983300
user_agent = self.user_agent
32993301
if recorder_ext is None:
33003302
recorder_ext = self.recorder_ext
3303+
if disable_js is None:
3304+
disable_js = self.disable_js
33013305
if disable_csp is None:
33023306
disable_csp = self.disable_csp
33033307
if enable_ws is None:
@@ -3383,6 +3387,7 @@ def get_new_driver(
33833387
cap_file=cap_file,
33843388
cap_string=cap_string,
33853389
recorder_ext=recorder_ext,
3390+
disable_js=disable_js,
33863391
disable_csp=disable_csp,
33873392
enable_ws=enable_ws,
33883393
enable_sync=enable_sync,
@@ -12645,6 +12650,7 @@ def setUp(self, masterqa_mode=False):
1264512650
elif self.record_sleep and not self.recorder_mode:
1264612651
self.recorder_mode = True
1264712652
self.recorder_ext = True
12653+
self.disable_js = sb_config.disable_js
1264812654
self.disable_csp = sb_config.disable_csp
1264912655
self.disable_ws = sb_config.disable_ws
1265012656
self.enable_ws = sb_config.enable_ws
@@ -12938,6 +12944,7 @@ def setUp(self, masterqa_mode=False):
1293812944
cap_file=self.cap_file,
1293912945
cap_string=self.cap_string,
1294012946
recorder_ext=self.recorder_ext,
12947+
disable_js=self.disable_js,
1294112948
disable_csp=self.disable_csp,
1294212949
enable_ws=self.enable_ws,
1294312950
enable_sync=self.enable_sync,

seleniumbase/plugins/pytest_plugin.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,11 @@ def pytest_addoption(parser):
8484
--rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
8585
--rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
8686
--rec-print (If the Recorder is enabled, prints output after tests end.)
87+
--disable-js (Disable JavaScript on websites. Pages might break!)
8788
--disable-csp (Disable the Content Security Policy of websites.)
8889
--disable-ws (Disable Web Security on Chromium-based browsers.)
8990
--enable-ws (Enable Web Security on Chromium-based browsers.)
90-
--enable-sync (Enable "Chrome Sync".)
91+
--enable-sync (Enable "Chrome Sync" on websites.)
9192
--use-auto-ext (Use Chrome's automation extension.)
9293
--undetected | --uc (Use undetected-chromedriver to evade bot-detection.)
9394
--remote-debug (Enable Chrome's Remote Debugger on http://localhost:9222)
@@ -834,6 +835,15 @@ def pytest_addoption(parser):
834835
help="""If Recorder Mode is enabled,
835836
prints output after tests end.""",
836837
)
838+
parser.addoption(
839+
"--disable_js",
840+
"--disable-js",
841+
action="store_true",
842+
dest="disable_js",
843+
default=False,
844+
help="""The option to disable JavaScript on web pages.
845+
Warning: Most web pages will stop working!""",
846+
)
837847
parser.addoption(
838848
"--disable_csp",
839849
"--disable-csp",
@@ -1344,6 +1354,7 @@ def pytest_configure(config):
13441354
elif sb_config.record_sleep and not sb_config.recorder_mode:
13451355
sb_config.recorder_mode = True
13461356
sb_config.recorder_ext = True
1357+
sb_config.disable_js = config.getoption("disable_js")
13471358
sb_config.disable_csp = config.getoption("disable_csp")
13481359
sb_config.disable_ws = config.getoption("disable_ws")
13491360
sb_config.enable_ws = config.getoption("enable_ws")
@@ -1363,9 +1374,9 @@ def pytest_configure(config):
13631374
sb_config.guest_mode = config.getoption("guest_mode")
13641375
sb_config.devtools = config.getoption("devtools")
13651376
sb_config.reuse_session = config.getoption("reuse_session")
1377+
sb_config.shared_driver = None # The default driver for session reuse
13661378
sb_config.crumbs = config.getoption("crumbs")
13671379
sb_config._disable_beforeunload = config.getoption("_disable_beforeunload")
1368-
sb_config.shared_driver = None # The default driver for session reuse
13691380
sb_config.window_size = config.getoption("window_size")
13701381
sb_config.maximize_option = config.getoption("maximize_option")
13711382
sb_config.save_screenshot = config.getoption("save_screenshot")

seleniumbase/plugins/selenium_plugin.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,11 @@ class SeleniumBrowser(Plugin):
6262
--rec-behave (Same as Recorder Mode, but also generates behave-gherkin.)
6363
--rec-sleep (If the Recorder is enabled, also records self.sleep calls.)
6464
--rec-print (If the Recorder is enabled, prints output after tests end.)
65+
--disable-js (Disable JavaScript on websites. Pages might break!)
6566
--disable-csp (Disable the Content Security Policy of websites.)
6667
--disable-ws (Disable Web Security on Chromium-based browsers.)
6768
--enable-ws (Enable Web Security on Chromium-based browsers.)
68-
--enable-sync (Enable "Chrome Sync".)
69+
--enable-sync (Enable "Chrome Sync" on websites.)
6970
--use-auto-ext (Use Chrome's automation extension.)
7071
--undetected | --uc (Use undetected-chromedriver to evade bot-detection.)
7172
--remote-debug (Enable Chrome's Remote Debugger on http://localhost:9222)
@@ -558,6 +559,15 @@ def options(self, parser, env):
558559
help="""If Recorder Mode is enabled,
559560
prints output after tests end.""",
560561
)
562+
parser.add_option(
563+
"--disable_js",
564+
"--disable-js",
565+
action="store_true",
566+
dest="disable_js",
567+
default=False,
568+
help="""The option to disable JavaScript on web pages.
569+
Warning: Most web pages will stop working!""",
570+
)
561571
parser.add_option(
562572
"--disable_csp",
563573
"--disable-csp",
@@ -870,6 +880,7 @@ def beforeTest(self, test):
870880
elif self.options.record_sleep:
871881
test.test.recorder_mode = True
872882
test.test.recorder_ext = True
883+
test.test.disable_js = self.options.disable_js
873884
test.test.disable_csp = self.options.disable_csp
874885
test.test.disable_ws = self.options.disable_ws
875886
test.test.enable_ws = self.options.enable_ws

0 commit comments

Comments
 (0)