@@ -74,13 +74,11 @@ def get_browser_locale(driver):
7474
7575
7676def test_emulation_initialized (driver ):
77- """Test that the emulation module is initialized properly."""
7877 assert driver .emulation is not None
7978 assert isinstance (driver .emulation , Emulation )
8079
8180
8281def test_set_geolocation_override_with_coordinates_in_context (driver , pages ):
83- """Test setting geolocation override with coordinates."""
8482 context_id = driver .current_window_handle
8583 pages .load ("blank.html" )
8684 coords = GeolocationCoordinates (45.5 , - 122.4194 , accuracy = 10.0 )
@@ -96,7 +94,6 @@ def test_set_geolocation_override_with_coordinates_in_context(driver, pages):
9694
9795
9896def test_set_geolocation_override_with_coordinates_in_user_context (driver , pages ):
99- """Test setting geolocation override with coordinates in a user context."""
10097 # Create a user context
10198 user_context = driver .browser .create_user_context ()
10299
@@ -121,7 +118,6 @@ def test_set_geolocation_override_with_coordinates_in_user_context(driver, pages
121118
122119
123120def test_set_geolocation_override_all_coords (driver , pages ):
124- """Test setting geolocation override with coordinates."""
125121 context_id = driver .current_window_handle
126122 pages .load ("blank.html" )
127123 coords = GeolocationCoordinates (
@@ -147,7 +143,6 @@ def test_set_geolocation_override_all_coords(driver, pages):
147143
148144
149145def test_set_geolocation_override_with_multiple_contexts (driver , pages ):
150- """Test setting geolocation override with multiple browsing contexts."""
151146 # Create two browsing contexts
152147 context1_id = driver .browsing_context .create (type = WindowTypes .TAB )
153148 context2_id = driver .browsing_context .create (type = WindowTypes .TAB )
@@ -181,7 +176,6 @@ def test_set_geolocation_override_with_multiple_contexts(driver, pages):
181176
182177
183178def test_set_geolocation_override_with_multiple_user_contexts (driver , pages ):
184- """Test setting geolocation override with multiple user contexts."""
185179 # Create two user contexts
186180 user_context1 = driver .browser .create_user_context ()
187181 user_context2 = driver .browser .create_user_context ()
@@ -229,7 +223,6 @@ def test_set_geolocation_override_with_multiple_user_contexts(driver, pages):
229223
230224@pytest .mark .xfail_firefox
231225def test_set_geolocation_override_with_error (driver , pages ):
232- """Test setting geolocation override with error."""
233226 context_id = driver .current_window_handle
234227 pages .load ("blank.html" )
235228
@@ -242,7 +235,6 @@ def test_set_geolocation_override_with_error(driver, pages):
242235
243236
244237def test_set_timezone_override_with_context (driver , pages ):
245- """Test setting timezone override with a browsing context."""
246238 context_id = driver .current_window_handle
247239 pages .load ("blank.html" )
248240
@@ -267,7 +259,6 @@ def test_set_timezone_override_with_context(driver, pages):
267259
268260
269261def test_set_timezone_override_with_user_context (driver , pages ):
270- """Test setting timezone override with a user context."""
271262 user_context = driver .browser .create_user_context ()
272263 context_id = driver .browsing_context .create (type = WindowTypes .TAB , user_context = user_context )
273264
@@ -287,7 +278,6 @@ def test_set_timezone_override_with_user_context(driver, pages):
287278
288279@pytest .mark .xfail_firefox (reason = "Firefox returns UTC as timezone string in case of offset." )
289280def test_set_timezone_override_using_offset (driver , pages ):
290- """Test setting timezone override using offset."""
291281 context_id = driver .current_window_handle
292282 pages .load ("blank.html" )
293283
@@ -320,7 +310,6 @@ def test_set_timezone_override_using_offset(driver, pages):
320310 ],
321311)
322312def test_set_locale_override_with_contexts (driver , pages , locale , expected_locale ):
323- """Test setting locale override with browsing contexts."""
324313 context_id = driver .current_window_handle
325314
326315 driver .emulation .set_locale_override (locale = locale , contexts = [context_id ])
@@ -345,7 +334,6 @@ def test_set_locale_override_with_contexts(driver, pages, locale, expected_local
345334 ],
346335)
347336def test_set_locale_override_with_user_contexts (driver , pages , value ):
348- """Test setting locale override with user contexts."""
349337 user_context = driver .browser .create_user_context ()
350338 try :
351339 context_id = driver .browsing_context .create (type = WindowTypes .TAB , user_context = user_context )
@@ -362,3 +350,72 @@ def test_set_locale_override_with_user_contexts(driver, pages, value):
362350 driver .browsing_context .close (context_id )
363351 finally :
364352 driver .browser .remove_user_context (user_context )
353+
354+
355+ @pytest .mark .xfail_firefox (reason = "Not yet supported" )
356+ def test_set_scripting_enabled_with_contexts (driver , pages ):
357+ context_id = driver .current_window_handle
358+
359+ # disable scripting
360+ driver .emulation .set_scripting_enabled (enabled = False , contexts = [context_id ])
361+
362+ driver .browsing_context .navigate (
363+ context = context_id ,
364+ url = "data:text/html,<script>window.foo=123;</script>" ,
365+ wait = "complete" ,
366+ )
367+ result = driver .script ._evaluate ("'foo' in window" , {"context" : context_id }, await_promise = False )
368+ assert result .result ["value" ] is False , "Page script should not have executed when scripting is disabled"
369+
370+ # clear override via None to restore JS
371+ driver .emulation .set_scripting_enabled (enabled = None , contexts = [context_id ])
372+ driver .browsing_context .navigate (
373+ context = context_id ,
374+ url = "data:text/html,<script>window.foo=123;</script>" ,
375+ wait = "complete" ,
376+ )
377+ result = driver .script ._evaluate ("'foo' in window" , {"context" : context_id }, await_promise = False )
378+ assert result .result ["value" ] is True , "Page script should execute after clearing the override"
379+
380+
381+ @pytest .mark .xfail_firefox (reason = "Not yet supported" )
382+ def test_set_scripting_enabled_with_user_contexts (driver , pages ):
383+ user_context = driver .browser .create_user_context ()
384+ try :
385+ context_id = driver .browsing_context .create (type = WindowTypes .TAB , user_context = user_context )
386+ try :
387+ driver .switch_to .window (context_id )
388+
389+ driver .emulation .set_scripting_enabled (enabled = False , user_contexts = [user_context ])
390+
391+ url = pages .url ("javascriptPage.html" )
392+ driver .browsing_context .navigate (context_id , url , wait = "complete" )
393+
394+ # Check that inline event handlers don't work; this page has an onclick handler
395+ click_field = driver .find_element ("id" , "clickField" )
396+ initial_value = click_field .get_attribute ("value" ) # initial value is 'Hello'
397+ click_field .click ()
398+
399+ # Get the value after click, it should remain unchanged if scripting is disabled
400+ result_value = driver .script ._evaluate (
401+ "document.getElementById('clickField').value" , {"context" : context_id }, await_promise = False
402+ )
403+ assert result_value .result ["value" ] == initial_value , (
404+ "Inline onclick handler should not execute, i.e, value should not change to 'clicked'"
405+ )
406+
407+ # Clear the scripting override
408+ driver .emulation .set_scripting_enabled (enabled = None , user_contexts = [user_context ])
409+
410+ driver .browsing_context .navigate (context_id , url , wait = "complete" )
411+
412+ # Click the element again, it should change to 'Clicked' now
413+ driver .find_element ("id" , "clickField" ).click ()
414+ result_value = driver .script ._evaluate (
415+ "document.getElementById('clickField').value" , {"context" : context_id }, await_promise = False
416+ )
417+ assert result_value .result ["value" ] == "Clicked"
418+ finally :
419+ driver .browsing_context .close (context_id )
420+ finally :
421+ driver .browser .remove_user_context (user_context )
0 commit comments