-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WebDriver BiDi: add tests for browsingContext.activate (#40964)
* WebDriver BiDi: add tests for browsingContext.activate * add more tests * fix types + newline
- Loading branch information
Showing
4 changed files
with
138 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
webdriver/tests/bidi/browsing_context/activate/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
from typing import Any, Mapping | ||
|
||
from webdriver.bidi.modules.script import ContextTarget | ||
|
||
|
||
async def get_visibility_state(bidi_session, context: Mapping[str, Any]) -> str: | ||
result = await bidi_session.script.call_function( | ||
function_declaration="""() => { | ||
return document.visibilityState; | ||
}""", | ||
target=ContextTarget(context["context"]), | ||
await_promise=False) | ||
return result["value"] | ||
|
||
|
||
async def is_selector_focused(bidi_session, context: Mapping[str, Any], selector: str) -> bool: | ||
result = await bidi_session.script.call_function( | ||
function_declaration="""(selector) => { | ||
return document.querySelector(selector) === document.activeElement; | ||
}""", | ||
arguments=[ | ||
{"type": "string", "value": selector}, | ||
], | ||
target=ContextTarget(context["context"]), | ||
await_promise=False) | ||
return result["value"] |
70 changes: 70 additions & 0 deletions
70
webdriver/tests/bidi/browsing_context/activate/activate.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
import pytest | ||
|
||
from webdriver.bidi.modules.script import ContextTarget | ||
from . import get_visibility_state, is_selector_focused | ||
|
||
@pytest.mark.asyncio | ||
async def test_activate(bidi_session, new_tab): | ||
assert await get_visibility_state(bidi_session, new_tab) == 'hidden' | ||
|
||
await bidi_session.browsing_context.activate(context=new_tab["context"]) | ||
|
||
assert await get_visibility_state(bidi_session, new_tab) == 'visible' | ||
|
||
|
||
@pytest.mark.asyncio | ||
async def test_deactivates_other_contexts(bidi_session, new_tab, top_context): | ||
await bidi_session.browsing_context.activate(context=top_context["context"]) | ||
|
||
assert await get_visibility_state(bidi_session, top_context) == 'visible' | ||
assert await get_visibility_state(bidi_session, new_tab) == 'hidden' | ||
|
||
await bidi_session.browsing_context.activate(context=new_tab["context"]) | ||
|
||
assert await get_visibility_state(bidi_session, top_context) == 'hidden' | ||
assert await get_visibility_state(bidi_session, new_tab) == 'visible' | ||
|
||
|
||
@pytest.mark.asyncio | ||
async def test_keeps_focused_area(bidi_session, inline, new_tab, top_context): | ||
await bidi_session.browsing_context.activate(context=new_tab["context"]) | ||
assert await get_visibility_state(bidi_session, new_tab) == 'visible' | ||
|
||
await bidi_session.browsing_context.navigate(context=new_tab["context"], | ||
url=inline("<textarea autofocus></textarea><input>"), | ||
wait="complete") | ||
|
||
await bidi_session.script.evaluate( | ||
expression="""document.querySelector("input").focus()""", | ||
target=ContextTarget(new_tab["context"]), | ||
await_promise=False) | ||
|
||
assert await is_selector_focused(bidi_session, new_tab, "input") | ||
|
||
await bidi_session.browsing_context.activate(context=top_context["context"]) | ||
assert await get_visibility_state(bidi_session, new_tab) == 'hidden' | ||
assert await is_selector_focused(bidi_session, new_tab, "input") | ||
|
||
await bidi_session.browsing_context.activate(context=new_tab["context"]) | ||
assert await get_visibility_state(bidi_session, new_tab) == 'visible' | ||
assert await is_selector_focused(bidi_session, new_tab, "input") | ||
|
||
|
||
@pytest.mark.asyncio | ||
async def test_double_activation(bidi_session, inline, new_tab, top_context): | ||
await bidi_session.browsing_context.activate(context=new_tab["context"]) | ||
assert await get_visibility_state(bidi_session, new_tab) == 'visible' | ||
|
||
await bidi_session.browsing_context.navigate(context=new_tab["context"], | ||
url=inline("<input><script>document.querySelector('input').focus();</script>"), | ||
wait="complete") | ||
assert await is_selector_focused(bidi_session, new_tab, "input") | ||
|
||
await bidi_session.browsing_context.activate(context=new_tab["context"]) | ||
assert await get_visibility_state(bidi_session, new_tab) == 'visible' | ||
assert await is_selector_focused(bidi_session, new_tab, "input") | ||
|
||
# Activate again. | ||
await bidi_session.browsing_context.activate(context=new_tab["context"]) | ||
assert await get_visibility_state(bidi_session, new_tab) == 'visible' | ||
assert await is_selector_focused(bidi_session, new_tab, "input") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import pytest | ||
import webdriver.bidi.error as error | ||
|
||
pytestmark = pytest.mark.asyncio | ||
|
||
@pytest.mark.parametrize("value", [None, False, 42, {}, []]) | ||
async def test_params_context_invalid_type(bidi_session, value): | ||
with pytest.raises(error.InvalidArgumentException): | ||
await bidi_session.browsing_context.activate( | ||
context=value | ||
) | ||
|
||
|
||
@pytest.mark.parametrize("value", ["", "somestring"]) | ||
async def test_params_context_invalid_value(bidi_session, value): | ||
with pytest.raises(error.NoSuchFrameException): | ||
await bidi_session.browsing_context.activate( | ||
context=value | ||
) | ||
|
||
|
||
@pytest.mark.asyncio | ||
async def test_params_context_iframe(bidi_session, new_tab, get_test_page): | ||
url = get_test_page(as_frame=True) | ||
await bidi_session.browsing_context.navigate( | ||
context=new_tab["context"], | ||
url=url, | ||
wait="complete") | ||
|
||
contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"]) | ||
assert len(contexts) == 1 | ||
frames = contexts[0]["children"] | ||
assert len(frames) == 1 | ||
frame_context = frames[0]["context"] | ||
|
||
with pytest.raises(error.InvalidArgumentException): | ||
await bidi_session.browsing_context.activate(context=frame_context) |