Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

from copy import deepcopy
import pytest
from webdriver.bidi.error import UnsupportedOperationException
from webdriver.bidi.modules.input import Actions
from webdriver.bidi.modules.script import ContextTarget
pytestmark = pytest.mark.asyncio
@pytest.mark.geckodriver(allow_system_access=True)
async def test_release_actions_chrome_window_with_system_access(
bidi_session, default_chrome_handler, new_chrome_window
):
# Bug 1762066: Skip this test on Android, as it currently causes the browser to crash
# when attempting to register a chrome handler for files that cannot be found.
# Since we cannot disable the test via the manifest, we return early instead.
if bidi_session.capabilities["platformName"] == "android":
return
chrome_url = f"{default_chrome_handler}test.xhtml"
new_window = new_chrome_window(chrome_url)
chrome_context = {"context": new_window.id}
await bidi_session.script.call_function(
function_declaration="""() => {{
window.allEvents = [];
document.addEventListener("keydown", ev => allEvents.push("keydown " + ev.key));
document.addEventListener("keyup", ev => allEvents.push("keyup " + ev.key));
}}
""",
target=ContextTarget(chrome_context["context"]),
await_promise=False,
)
actions = Actions()
(actions.add_key().key_down("a"))
await bidi_session.input.perform_actions(
actions=actions, context=chrome_context["context"]
)
await bidi_session.input.release_actions(context=chrome_context["context"])
result = await bidi_session.script.evaluate(
expression="JSON.stringify(allEvents)",
target=ContextTarget(chrome_context["context"]),
await_promise=False,
)
assert result["value"] == '["keydown a","keyup a"]'
async def test_release_actions_parent_process_context(parent_process_context):
bidi_session, context_id = parent_process_context
with pytest.raises(UnsupportedOperationException):
await bidi_session.input.release_actions(context=context_id)
async def test_release_actions_privilegedabout_context(configuration, geckodriver):
# Runs in a "privilegedabout" process with a content principal.
url = "about:certificate"
config = deepcopy(configuration)
config["capabilities"]["moz:firefoxOptions"]["args"].append(url)
config["capabilities"]["moz:firefoxOptions"]["androidIntentArguments"] = [
"-d",
url,
]
config["capabilities"]["webSocketUrl"] = True
driver = geckodriver(config=config, force_new=True)
try:
driver.new_session()
bidi_session = driver.session.bidi_session
await bidi_session.start()
contexts = await bidi_session.browsing_context.get_tree(max_depth=0)
page_context = next((ctx for ctx in contexts if ctx["url"] == url), None)
assert page_context is not None, f"No context found with URL {url}"
with pytest.raises(UnsupportedOperationException):
await bidi_session.input.release_actions(context=page_context["context"])
finally:
await driver.stop()