Skip to content

Commit d665c5b

Browse files
authored
Merge branch 'trunk' into feat/pretty-properties-docstrings
2 parents b51d2a7 + 7e1e0a8 commit d665c5b

File tree

4 files changed

+125
-22
lines changed

4 files changed

+125
-22
lines changed

common/mirror/selenium

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11
[
22
{
3-
"tag_name": "selenium-4.38.0",
3+
"tag_name": "nightly",
44
"assets": [
55
{
6-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-dotnet-4.38.0.zip"
7-
},
8-
{
9-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-dotnet-strongnamed-4.38.0.zip"
10-
},
11-
{
12-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-java-4.38.0.zip"
6+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/nightly/selenium-java-4.39.0-SNAPSHOT.zip"
137
},
148
{
15-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-server-4.38.0.jar"
9+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/nightly/selenium-server-4.39.0-SNAPSHOT.jar"
1610
},
1711
{
18-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-server-4.38.0.zip"
12+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/nightly/selenium-server-4.39.0-SNAPSHOT.zip"
1913
}
2014
]
2115
},
2216
{
23-
"tag_name": "nightly",
17+
"tag_name": "selenium-4.38.0",
2418
"assets": [
2519
{
26-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/nightly/selenium-java-4.39.0-SNAPSHOT.zip"
20+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-dotnet-4.38.0.zip"
2721
},
2822
{
29-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/nightly/selenium-server-4.39.0-SNAPSHOT.jar"
23+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-dotnet-strongnamed-4.38.0.zip"
3024
},
3125
{
32-
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/nightly/selenium-server-4.39.0-SNAPSHOT.zip"
26+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-java-4.38.0.zip"
27+
},
28+
{
29+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-server-4.38.0.jar"
30+
},
31+
{
32+
"browser_download_url": "https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.38.0/selenium-server-4.38.0.zip"
3333
}
3434
]
3535
},

common/repositories.bzl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ js_library(
5050

5151
http_archive(
5252
name = "linux_beta_firefox",
53-
url = "https://ftp.mozilla.org/pub/firefox/releases/145.0b5/linux-x86_64/en-US/firefox-145.0b5.tar.xz",
54-
sha256 = "3724a4f868c94be4ac82ce7f0437523c6ca5f52aa7a5b9aad1fba66775cfce6c",
53+
url = "https://ftp.mozilla.org/pub/firefox/releases/145.0b6/linux-x86_64/en-US/firefox-145.0b6.tar.xz",
54+
sha256 = "661732f5dc7b3068b73cd28b38db094cf60f77d233ce6949ce604beffce20856",
5555
build_file_content = """
5656
load("@aspect_rules_js//js:defs.bzl", "js_library")
5757
package(default_visibility = ["//visibility:public"])
@@ -72,8 +72,8 @@ js_library(
7272

7373
dmg_archive(
7474
name = "mac_beta_firefox",
75-
url = "https://ftp.mozilla.org/pub/firefox/releases/145.0b5/mac/en-US/Firefox%20145.0b5.dmg",
76-
sha256 = "f1cc4967d8e58f1ea746420a6a3946af3f2585843573539ff285c521597a465f",
75+
url = "https://ftp.mozilla.org/pub/firefox/releases/145.0b6/mac/en-US/Firefox%20145.0b6.dmg",
76+
sha256 = "cbd701f0312cd6893577dfaae03c150eb83232deb952780e4b16dbe912bfba5d",
7777
build_file_content = """
7878
load("@aspect_rules_js//js:defs.bzl", "js_library")
7979
package(default_visibility = ["//visibility:public"])
@@ -165,8 +165,8 @@ js_library(
165165

166166
http_archive(
167167
name = "linux_edgedriver",
168-
url = "https://msedgedriver.microsoft.com/141.0.3537.92/edgedriver_linux64.zip",
169-
sha256 = "fe50eb46a2524798705743b49059bb587d072e7544e49d10c5c1adce2c3d8d5e",
168+
url = "https://msedgedriver.microsoft.com/141.0.3537.99/edgedriver_linux64.zip",
169+
sha256 = "92b75bd04d1c52df4762f78c3c4559d5592d621f2e67cbb828744f846650f956",
170170
build_file_content = """
171171
load("@aspect_rules_js//js:defs.bzl", "js_library")
172172
package(default_visibility = ["//visibility:public"])
@@ -182,8 +182,8 @@ js_library(
182182

183183
http_archive(
184184
name = "mac_edgedriver",
185-
url = "https://msedgedriver.microsoft.com/141.0.3537.92/edgedriver_mac64.zip",
186-
sha256 = "a0feeb73db2fa8f7b256eebaf4f97aa3fd6b40ed14ffd3f605d8f7605d262e07",
185+
url = "https://msedgedriver.microsoft.com/141.0.3537.99/edgedriver_mac64.zip",
186+
sha256 = "06ffd6cd08355676d7624dc2445afa447c668d549a1fafb037f43f62184c9bb0",
187187
build_file_content = """
188188
load("@aspect_rules_js//js:defs.bzl", "js_library")
189189
package(default_visibility = ["//visibility:public"])

py/selenium/webdriver/common/bidi/emulation.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,37 @@ def set_timezone_override(
245245
params["userContexts"] = user_contexts
246246

247247
self.conn.execute(command_builder("emulation.setTimezoneOverride", params))
248+
249+
def set_locale_override(
250+
self,
251+
locale: Optional[str] = None,
252+
contexts: Optional[list[str]] = None,
253+
user_contexts: Optional[list[str]] = None,
254+
) -> None:
255+
"""Set locale override for the given contexts or user contexts.
256+
257+
Parameters:
258+
-----------
259+
locale: Locale string as per BCP 47, or None to clear override.
260+
contexts: List of browsing context IDs to apply the override to.
261+
user_contexts: List of user context IDs to apply the override to.
262+
263+
Raises:
264+
------
265+
ValueError: If both contexts and user_contexts are provided, or if neither
266+
contexts nor user_contexts are provided, or if locale is invalid.
267+
"""
268+
if contexts is not None and user_contexts is not None:
269+
raise ValueError("Cannot specify both contexts and userContexts")
270+
271+
if contexts is None and user_contexts is None:
272+
raise ValueError("Must specify either contexts or userContexts")
273+
274+
params: dict[str, Any] = {"locale": locale}
275+
276+
if contexts is not None:
277+
params["contexts"] = contexts
278+
elif user_contexts is not None:
279+
params["userContexts"] = user_contexts
280+
281+
self.conn.execute(command_builder("emulation.setLocaleOverride", params))

py/test/selenium/webdriver/common/bidi_emulation_tests.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
6776
def 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

Comments
 (0)