Skip to content

Commit 1df75c1

Browse files
authored
[py][bidi]: add emulation command set_user_agent_override (#16595)
1 parent ea49009 commit 1df75c1

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,3 +399,35 @@ def set_screen_orientation_override(
399399
params["userContexts"] = user_contexts
400400

401401
self.conn.execute(command_builder("emulation.setScreenOrientationOverride", params))
402+
403+
def set_user_agent_override(
404+
self,
405+
user_agent: str | None = None,
406+
contexts: list[str] | None = None,
407+
user_contexts: list[str] | None = None,
408+
) -> None:
409+
"""Set user agent override for the given contexts or user contexts.
410+
411+
Args:
412+
user_agent: User agent string to emulate, or None to clear the override.
413+
contexts: List of browsing context IDs to apply the override to.
414+
user_contexts: List of user context IDs to apply the override to.
415+
416+
Raises:
417+
ValueError: If both contexts and user_contexts are provided, or if neither
418+
contexts nor user_contexts are provided.
419+
"""
420+
if contexts is not None and user_contexts is not None:
421+
raise ValueError("Cannot specify both contexts and user_contexts")
422+
423+
if contexts is None and user_contexts is None:
424+
raise ValueError("Must specify either contexts or user_contexts")
425+
426+
params: dict[str, Any] = {"userAgent": user_agent}
427+
428+
if contexts is not None:
429+
params["contexts"] = contexts
430+
elif user_contexts is not None:
431+
params["userContexts"] = user_contexts
432+
433+
self.conn.execute(command_builder("emulation.setUserAgentOverride", params))

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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,15 @@ def get_screen_orientation(driver, context_id):
9898
return {"type": orientation_type, "angle": orientation_angle}
9999

100100

101+
def get_browser_user_agent(driver):
102+
result = driver.script._evaluate(
103+
"navigator.userAgent",
104+
{"context": driver.current_window_handle},
105+
await_promise=False,
106+
)
107+
return result.result["value"]
108+
109+
101110
def test_emulation_initialized(driver):
102111
assert driver.emulation is not None
103112
assert isinstance(driver.emulation, Emulation)
@@ -527,3 +536,41 @@ def test_set_screen_orientation_override_with_user_contexts(driver, pages, natur
527536
driver.browsing_context.close(context_id)
528537
finally:
529538
driver.browser.remove_user_context(user_context)
539+
540+
541+
def test_set_user_agent_override_with_contexts(driver, pages):
542+
context_id = driver.current_window_handle
543+
url = pages.url("formPage.html")
544+
driver.browsing_context.navigate(context_id, url, wait="complete")
545+
initial_user_agent = get_browser_user_agent(driver)
546+
547+
custom_user_agent = "Mozilla/5.0 (Custom Test Agent)"
548+
driver.emulation.set_user_agent_override(user_agent=custom_user_agent, contexts=[context_id])
549+
550+
assert get_browser_user_agent(driver) == custom_user_agent
551+
552+
driver.emulation.set_user_agent_override(user_agent=None, contexts=[context_id])
553+
assert get_browser_user_agent(driver) == initial_user_agent
554+
555+
556+
def test_set_user_agent_override_with_user_contexts(driver, pages):
557+
user_context = driver.browser.create_user_context()
558+
try:
559+
context_id = driver.browsing_context.create(type=WindowTypes.TAB, user_context=user_context)
560+
try:
561+
driver.switch_to.window(context_id)
562+
url = pages.url("formPage.html")
563+
driver.browsing_context.navigate(context_id, url, wait="complete")
564+
initial_user_agent = get_browser_user_agent(driver)
565+
566+
custom_user_agent = "Mozilla/5.0 (Custom User Context Agent)"
567+
driver.emulation.set_user_agent_override(user_agent=custom_user_agent, user_contexts=[user_context])
568+
569+
assert get_browser_user_agent(driver) == custom_user_agent
570+
571+
driver.emulation.set_user_agent_override(user_agent=None, user_contexts=[user_context])
572+
assert get_browser_user_agent(driver) == initial_user_agent
573+
finally:
574+
driver.browsing_context.close(context_id)
575+
finally:
576+
driver.browser.remove_user_context(user_context)

0 commit comments

Comments
 (0)