Skip to content

Commit

Permalink
WebDriver BiDi: add tests for browsingContext.activate (#40964)
Browse files Browse the repository at this point in the history
* WebDriver BiDi: add tests for browsingContext.activate

* add more tests

* fix types + newline
  • Loading branch information
OrKoN authored Jul 13, 2023
1 parent befe663 commit 6803a09
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 0 deletions.
5 changes: 5 additions & 0 deletions tools/webdriver/webdriver/bidi/modules/browsing_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@


class BrowsingContext(BidiModule):
@command
def activate(self,
context: str) -> Mapping[str, Any]:
return {"context": context}

@command
def capture_screenshot(self, context: str) -> Mapping[str, Any]:
params: MutableMapping[str, Any] = {"context": context}
Expand Down
26 changes: 26 additions & 0 deletions webdriver/tests/bidi/browsing_context/activate/__init__.py
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 webdriver/tests/bidi/browsing_context/activate/activate.py
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")
37 changes: 37 additions & 0 deletions webdriver/tests/bidi/browsing_context/activate/invalid.py
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)

0 comments on commit 6803a09

Please sign in to comment.