@@ -64,6 +64,15 @@ def get_browser_geolocation(driver, user_context=None):
6464    """ )
6565
6666
67+ def  get_browser_locale (driver ):
68+     result  =  driver .script ._evaluate (
69+         "Intl.DateTimeFormat().resolvedOptions().locale" ,
70+         {"context" : driver .current_window_handle },
71+         await_promise = False ,
72+     )
73+     return  result .result ["value" ]
74+ 
75+ 
6776def  test_emulation_initialized (driver ):
6877    """Test that the emulation module is initialized properly.""" 
6978    assert  driver .emulation  is  not   None 
@@ -293,3 +302,63 @@ def test_set_timezone_override_using_offset(driver, pages):
293302    assert  timezone_string  ==  "+05:30" , f"Expected timezone '+05:30', got: { timezone_string }  " 
294303
295304    driver .emulation .set_timezone_override (timezone = None , contexts = [context_id ])
305+ 
306+ 
307+ @pytest .mark .parametrize ( 
308+     "locale,expected_locale" , 
309+     [ 
310+         # Locale with Unicode extension keyword for collation.  
311+         ("de-DE-u-co-phonebk" , "de-DE" ), 
312+         # Lowercase language and region.  
313+         ("fr-ca" , "fr-CA" ), 
314+         # Uppercase language and region (should be normalized by Intl.Locale).  
315+         ("FR-CA" , "fr-CA" ), 
316+         # Mixed case language and region (should be normalized by Intl.Locale).  
317+         ("fR-cA" , "fr-CA" ), 
318+         # Locale with transform extension (simple case).  
319+         ("en-t-zh" , "en" ), 
320+     ], 
321+ ) 
322+ def  test_set_locale_override_with_contexts (driver , pages , locale , expected_locale ):
323+     """Test setting locale override with browsing contexts.""" 
324+     context_id  =  driver .current_window_handle 
325+ 
326+     driver .emulation .set_locale_override (locale = locale , contexts = [context_id ])
327+ 
328+     driver .browsing_context .navigate (context_id , pages .url ("formPage.html" ), wait = "complete" )
329+ 
330+     current_locale  =  get_browser_locale (driver )
331+     assert  current_locale  ==  expected_locale , f"Expected locale { expected_locale }  , got { current_locale }  " 
332+ 
333+ 
334+ @pytest .mark .parametrize ( 
335+     "value" , 
336+     [ 
337+         # Simple language code (2-letter).  
338+         "en" , 
339+         # Language and region (both 2-letter).  
340+         "en-US" , 
341+         # Language and script (4-letter).  
342+         "sr-Latn" , 
343+         # Language, script, and region.  
344+         "zh-Hans-CN" , 
345+     ], 
346+ ) 
347+ def  test_set_locale_override_with_user_contexts (driver , pages , value ):
348+     """Test setting locale override with user contexts.""" 
349+     user_context  =  driver .browser .create_user_context ()
350+     try :
351+         context_id  =  driver .browsing_context .create (type = WindowTypes .TAB , user_context = user_context )
352+         try :
353+             driver .switch_to .window (context_id )
354+ 
355+             driver .emulation .set_locale_override (locale = value , user_contexts = [user_context ])
356+ 
357+             driver .browsing_context .navigate (context_id , pages .url ("formPage.html" ), wait = "complete" )
358+ 
359+             current_locale  =  get_browser_locale (driver )
360+             assert  current_locale  ==  value , f"Expected locale { value }  , got { current_locale }  " 
361+         finally :
362+             driver .browsing_context .close (context_id )
363+     finally :
364+         driver .browser .remove_user_context (user_context )
0 commit comments