@@ -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