Skip to content

Commit

Permalink
Bug 1857961 - [wdspec] Add tests for the "devicePixelRatio" argument …
Browse files Browse the repository at this point in the history
…for "browsingContext.setViewport". r=webdriver-reviewers,whimboo

Differential Revision: https://phabricator.services.mozilla.com/D207012
  • Loading branch information
lutien committed Apr 23, 2024
1 parent d93d2c6 commit 8a91117
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,11 @@
[test_capture_with_viewport[height larger-width larger\]]
disabled:
if os == "android": bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1840084

[test_capture_with_different_dpr[0.5\]]
disabled:
if os == "android": bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1840084

[test_capture_with_different_dpr[2\]]
disabled:
if os == "android": bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1840084
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
[clip.py]
expected:
if (processor == "x86") and not debug: [OK, TIMEOUT]
[test_clip_with_different_dpr[0.5\]]
disabled:
if os == "android": bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1840084

[test_clip_with_different_dpr[2\]]
disabled:
if os == "android": bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1840084
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,26 @@ async def test_capture_with_viewport(bidi_session, new_tab, delta_width, delta_h
result = await bidi_session.browsing_context.capture_screenshot(
context=new_tab["context"])
assert png_dimensions(result) == (expected_size["width"], expected_size["height"])


@pytest.mark.parametrize("dpr", [0.5, 2])
@pytest.mark.asyncio
async def test_capture_with_different_dpr(bidi_session, new_tab, inline, dpr):
page = inline("<div style='background-color: black; width: 100px; height: 100px;'></div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=page, wait="complete"
)

original_viewport = await get_viewport_dimensions(bidi_session, new_tab)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
device_pixel_ratio=dpr)

expected_size = {
"width": floor(original_viewport["width"] * dpr),
"height": floor(original_viewport["height"] * dpr)
}

data = await bidi_session.browsing_context.capture_screenshot(context=new_tab["context"])
assert png_dimensions(data) == (expected_size["width"], expected_size["height"])
Original file line number Diff line number Diff line change
Expand Up @@ -373,3 +373,42 @@ async def test_clip_element_outside_of_window_viewport(

comparison = await compare_png_bidi(reference_data, data)
assert comparison.equal()


@pytest.mark.parametrize("dpr", [0.5, 2])
async def test_clip_with_different_dpr(bidi_session, new_tab, inline, compare_png_bidi, dpr):
div_size = {"width": 100, "height": 100}

reference_page = inline(f"""<div style='background-color: black; width: {div_size["width"]*dpr}px; height: {div_size["height"]*dpr}px;'></div>""")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=reference_page, wait="complete"
)
element = await bidi_session.script.evaluate(
await_promise=False,
expression="document.querySelector('div')",
target=ContextTarget(new_tab["context"]),
)
reference_data = await bidi_session.browsing_context.capture_screenshot(
context=new_tab["context"], clip=ElementOptions(element=element)
)

page = inline(f"""<div style='background-color: black; width: {div_size["width"]}px; height: {div_size["height"]}px;'></div>""")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=page, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
device_pixel_ratio=dpr)

element = await bidi_session.script.evaluate(
await_promise=False,
expression="document.querySelector('div')",
target=ContextTarget(new_tab["context"]),
)
data = await bidi_session.browsing_context.capture_screenshot(
context=new_tab["context"], clip=ElementOptions(element=element)
)

comparison = await compare_png_bidi(data, reference_data)
assert comparison.equal()
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import pytest
from webdriver.bidi.modules.script import ContextTarget

from ... import get_device_pixel_ratio, get_viewport_dimensions

Expand Down Expand Up @@ -45,6 +46,14 @@ async def test_device_pixel_ratio_with_viewport(
assert await get_viewport_dimensions(bidi_session, new_tab) == test_viewport
assert await get_device_pixel_ratio(bidi_session, new_tab) == device_pixel_ratio

result = await bidi_session.script.evaluate(
await_promise=False,
expression="window.devicePixelRatio",
target=ContextTarget(new_tab["context"]),
)

assert result == {"type": "number", "value": device_pixel_ratio}


@pytest.mark.asyncio
async def test_reset_device_pixel_ratio(bidi_session, inline, new_tab):
Expand All @@ -68,3 +77,47 @@ async def test_reset_device_pixel_ratio(bidi_session, inline, new_tab):
device_pixel_ratio=None)

assert await get_device_pixel_ratio(bidi_session, new_tab) == original_dpr


@pytest.mark.asyncio
@pytest.mark.parametrize("device_pixel_ratio", [0.5, 2])
@pytest.mark.parametrize(
"use_horizontal_scrollbar, use_vertical_scrollbar",
[
(True, False),
(False, True),
(True, True),
],
ids=["horizontal", "vertical", "both"],
)
async def test_device_pixel_ratio_with_scrollbar(
bidi_session,
inline,
new_tab,
device_pixel_ratio,
use_horizontal_scrollbar,
use_vertical_scrollbar,
):
viewport_dimensions = await get_viewport_dimensions(bidi_session, new_tab)

width = 100
if use_horizontal_scrollbar:
width = viewport_dimensions["width"] + 100

height = 100
if use_vertical_scrollbar:
height = viewport_dimensions["height"] + 100

html = f"""<div style="width: {width}px; height: {height}px;">foo</div>"""
page_url = inline(html)

await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=page_url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"], device_pixel_ratio=device_pixel_ratio
)

assert await get_device_pixel_ratio(bidi_session, new_tab) == device_pixel_ratio
assert await get_viewport_dimensions(bidi_session, new_tab) == viewport_dimensions

0 comments on commit 8a91117

Please sign in to comment.