mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-07 18:04:46 +00:00
Bug 1824224 - [wdspec] Add implementation tests for "browsingContext.handleUserPrompt" command. r=webdriver-reviewers,whimboo
Differential Revision: https://phabricator.services.mozilla.com/D186019
This commit is contained in:
parent
1a8a1dcebc
commit
4e4272ae52
@ -0,0 +1,4 @@
|
||||
[handle_user_prompt.py]
|
||||
[test_two_top_level_contexts[window\]]
|
||||
disabled:
|
||||
if os == "android": Not supported
|
@ -0,0 +1,176 @@
|
||||
import asyncio
|
||||
import pytest
|
||||
|
||||
import webdriver.bidi.error as error
|
||||
from webdriver.bidi.modules.script import ContextTarget
|
||||
|
||||
pytestmark = pytest.mark.asyncio
|
||||
|
||||
USER_PROMPT_OPENED_EVENT = "browsingContext.userPromptOpened"
|
||||
|
||||
|
||||
async def test_alert(bidi_session, wait_for_event, top_context, subscribe_events):
|
||||
await subscribe_events([USER_PROMPT_OPENED_EVENT])
|
||||
on_entry = wait_for_event(USER_PROMPT_OPENED_EVENT)
|
||||
|
||||
# Save as the task to await for it later.
|
||||
task = asyncio.create_task(
|
||||
bidi_session.script.evaluate(
|
||||
expression="window.alert('test')",
|
||||
target=ContextTarget(top_context["context"]),
|
||||
await_promise=False,
|
||||
)
|
||||
)
|
||||
|
||||
# Wait for prompt to appear.
|
||||
await on_entry
|
||||
|
||||
await bidi_session.browsing_context.handle_user_prompt(
|
||||
context=top_context["context"]
|
||||
)
|
||||
|
||||
# Make sure that script returned.
|
||||
result = await task
|
||||
|
||||
assert result == {"type": "undefined"}
|
||||
|
||||
|
||||
@pytest.mark.parametrize("accept", [True, False])
|
||||
async def test_confirm(
|
||||
bidi_session, wait_for_event, top_context, subscribe_events, accept
|
||||
):
|
||||
await subscribe_events([USER_PROMPT_OPENED_EVENT])
|
||||
on_entry = wait_for_event(USER_PROMPT_OPENED_EVENT)
|
||||
|
||||
# Save as the task to await for it later.
|
||||
task = asyncio.create_task(
|
||||
bidi_session.script.evaluate(
|
||||
expression="window.confirm('test')",
|
||||
target=ContextTarget(top_context["context"]),
|
||||
await_promise=False,
|
||||
)
|
||||
)
|
||||
|
||||
# Wait for prompt to appear.
|
||||
await on_entry
|
||||
|
||||
await bidi_session.browsing_context.handle_user_prompt(
|
||||
context=top_context["context"], accept=accept
|
||||
)
|
||||
|
||||
# Check that return result of confirm is correct.
|
||||
result = await task
|
||||
|
||||
assert result == {"type": "boolean", "value": accept}
|
||||
|
||||
|
||||
@pytest.mark.parametrize("accept", [True, False])
|
||||
async def test_prompt(
|
||||
bidi_session, wait_for_event, top_context, subscribe_events, accept
|
||||
):
|
||||
await subscribe_events([USER_PROMPT_OPENED_EVENT])
|
||||
on_entry = wait_for_event(USER_PROMPT_OPENED_EVENT)
|
||||
|
||||
# Save as the task to await for it later.
|
||||
task = asyncio.create_task(
|
||||
bidi_session.script.evaluate(
|
||||
expression="window.prompt('Enter Your Name: ')",
|
||||
target=ContextTarget(top_context["context"]),
|
||||
await_promise=False,
|
||||
)
|
||||
)
|
||||
|
||||
# Wait for prompt to appear.
|
||||
await on_entry
|
||||
|
||||
test_user_text = "Test"
|
||||
await bidi_session.browsing_context.handle_user_prompt(
|
||||
context=top_context["context"], accept=accept, user_text=test_user_text
|
||||
)
|
||||
|
||||
# Check that return result of prompt is correct.
|
||||
result = await task
|
||||
|
||||
if accept is True:
|
||||
assert result == {"type": "string", "value": test_user_text}
|
||||
else:
|
||||
assert result == {"type": "null"}
|
||||
|
||||
|
||||
@pytest.mark.parametrize("type_hint", ["tab", "window"])
|
||||
async def test_two_top_level_contexts(
|
||||
bidi_session, top_context, inline, subscribe_events, wait_for_event, type_hint
|
||||
):
|
||||
new_context = await bidi_session.browsing_context.create(type_hint=type_hint)
|
||||
|
||||
await subscribe_events([USER_PROMPT_OPENED_EVENT])
|
||||
on_entry = wait_for_event(USER_PROMPT_OPENED_EVENT)
|
||||
|
||||
await bidi_session.browsing_context.navigate(
|
||||
context=new_context["context"],
|
||||
url=inline("<script>window.alert('test')</script>"),
|
||||
)
|
||||
|
||||
# Wait for prompt to appear.
|
||||
await on_entry
|
||||
|
||||
# Try to close the prompt in another context.
|
||||
with pytest.raises(error.NoSuchAlertException):
|
||||
await bidi_session.browsing_context.handle_user_prompt(
|
||||
context=top_context["context"]
|
||||
)
|
||||
|
||||
# Close the prompt in the correct context
|
||||
await bidi_session.browsing_context.handle_user_prompt(
|
||||
context=new_context["context"]
|
||||
)
|
||||
|
||||
await bidi_session.browsing_context.close(context=new_context["context"])
|
||||
|
||||
|
||||
async def test_multiple_frames(
|
||||
bidi_session,
|
||||
top_context,
|
||||
inline,
|
||||
test_page_multiple_frames,
|
||||
subscribe_events,
|
||||
wait_for_event,
|
||||
):
|
||||
await subscribe_events([USER_PROMPT_OPENED_EVENT])
|
||||
on_entry = wait_for_event(USER_PROMPT_OPENED_EVENT)
|
||||
|
||||
await bidi_session.browsing_context.navigate(
|
||||
context=top_context["context"],
|
||||
url=test_page_multiple_frames,
|
||||
wait="complete",
|
||||
)
|
||||
|
||||
contexts = await bidi_session.browsing_context.get_tree(root=top_context["context"])
|
||||
assert len(contexts) == 1
|
||||
|
||||
assert len(contexts[0]["children"]) == 2
|
||||
frame_1 = contexts[0]["children"][0]
|
||||
frame_2 = contexts[0]["children"][1]
|
||||
|
||||
# Open a prompt in the first frame
|
||||
await bidi_session.browsing_context.navigate(
|
||||
context=frame_1["context"],
|
||||
url=inline("<script>window.response = window.confirm('test')</script>"),
|
||||
)
|
||||
|
||||
# Wait for prompt to appear.
|
||||
await on_entry
|
||||
|
||||
# Close prompt from the second frame.
|
||||
await bidi_session.browsing_context.handle_user_prompt(
|
||||
context=frame_2["context"], accept=True
|
||||
)
|
||||
|
||||
# Check that return result of confirm is correct.
|
||||
result = await bidi_session.script.evaluate(
|
||||
expression="window.response",
|
||||
target=ContextTarget(frame_1["context"]),
|
||||
await_promise=False,
|
||||
)
|
||||
|
||||
assert result == {"type": "boolean", "value": True}
|
Loading…
Reference in New Issue
Block a user