blob: 9eb459afb5d4295f39938c92915f75caf8ef210a [file] [log] [blame]
import pytest
from ... import get_viewport_dimensions
import webdriver.bidi.error as error
from webdriver.bidi.modules.browsing_context import ElementOptions, BoxOptions
from webdriver.bidi.modules.script import ContextTarget
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.capture_screenshot(context=value)
@pytest.mark.parametrize("value", ["", "somestring"])
async def test_invalid_frame(bidi_session, value):
with pytest.raises(error.NoSuchFrameException):
await bidi_session.browsing_context.capture_screenshot(context=value)
async def test_closed_frame(bidi_session, top_context, inline, add_and_remove_iframe):
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=top_context["context"], url=url, wait="complete"
)
frame_id = await add_and_remove_iframe(top_context)
with pytest.raises(error.NoSuchFrameException):
await bidi_session.browsing_context.capture_screenshot(context=frame_id)
@pytest.mark.parametrize("value", [False, 42, "foo", []])
async def test_params_clip_invalid_type(bidi_session, top_context, value):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"], clip=value
)
@pytest.mark.parametrize("value", [None, False, 42, {}, []])
async def test_params_clip_type_invalid_type(bidi_session, top_context, value):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"], clip={"type": value}
)
async def test_params_clip_type_invalid_value(bidi_session, top_context):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"], clip={"type": "foo"}
)
@pytest.mark.parametrize("value", [None, False, 42, "foo", []])
async def test_params_clip_element_invalid_type(bidi_session, top_context, value):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=ElementOptions(element=value),
)
@pytest.mark.parametrize("value", [None, False, 42, {}, []])
async def test_params_clip_element_sharedId_invalid_type(
bidi_session, top_context, value
):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=ElementOptions(element={"shareId": value}),
)
async def test_params_clip_element_sharedId_invalid_value(bidi_session, top_context):
with pytest.raises(error.NoSuchNodeException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=ElementOptions(element={"sharedId": "foo"}),
)
@pytest.mark.parametrize("value", [None, False, "foo", {}, []])
async def test_params_clip_viewport_x_invalid_type(bidi_session, top_context, value):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=BoxOptions(x=value, y=0, width=0, height=0),
)
@pytest.mark.parametrize("value", [None, False, "foo", {}, []])
async def test_params_clip_viewport_y_invalid_type(bidi_session, top_context, value):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=BoxOptions(x=0, y=value, width=0, height=0),
)
@pytest.mark.parametrize("value", [None, False, "foo", {}, []])
async def test_params_clip_viewport_width_invalid_type(
bidi_session, top_context, value
):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=BoxOptions(x=0, y=0, width=value, height=0),
)
@pytest.mark.parametrize("value", [None, False, "foo", {}, []])
async def test_params_clip_viewport_height_invalid_type(
bidi_session, top_context, value
):
with pytest.raises(error.InvalidArgumentException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=BoxOptions(x=0, y=0, width=0, height=value),
)
async def test_params_clip_viewport_dimensions_invalid_value(bidi_session, top_context):
with pytest.raises(error.UnableToCaptureScreenException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=BoxOptions(x=0, y=0, width=0, height=0),
)
async def test_params_clip_viewport_outside_of_window_viewport(
bidi_session, top_context
):
viewport_dimensions = await get_viewport_dimensions(bidi_session, top_context)
with pytest.raises(error.UnableToCaptureScreenException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=BoxOptions(
x=viewport_dimensions["width"],
y=viewport_dimensions["height"],
width=1,
height=1,
),
)
async def test_params_clip_element_outside_of_window_viewport(
bidi_session, top_context, inline
):
viewport_dimensions = await get_viewport_dimensions(bidi_session, top_context)
element_styles = "background-color: black; width: 50px; height:50px;"
# Render element outside of viewport.
url = inline(
f"""<div style="{element_styles} margin-top: {viewport_dimensions["height"]}px"></div>"""
)
await bidi_session.browsing_context.navigate(
context=top_context["context"], url=url, wait="complete"
)
element = await bidi_session.script.evaluate(
await_promise=False,
expression="document.querySelector('div')",
target=ContextTarget(top_context["context"]),
)
with pytest.raises(error.UnableToCaptureScreenException):
await bidi_session.browsing_context.capture_screenshot(
context=top_context["context"],
clip=ElementOptions(element=element),
)