From 8a91117e1f143c5e7e524df875ed1765e4aba16c Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Tue, 23 Apr 2024 09:38:56 +0000 Subject: [PATCH] Bug 1857961 - [wdspec] Add tests for the "devicePixelRatio" argument for "browsingContext.setViewport". r=webdriver-reviewers,whimboo Differential Revision: https://phabricator.services.mozilla.com/D207012 --- .../capture_screenshot.py.ini | 8 +++ .../capture_screenshot/clip.py.ini | 9 +++- .../capture_screenshot/capture_screenshot.py | 23 ++++++++ .../capture_screenshot/clip.py | 39 ++++++++++++++ .../set_viewport/device_pixel_ratio.py | 53 +++++++++++++++++++ 5 files changed, 130 insertions(+), 2 deletions(-) diff --git a/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py.ini b/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py.ini index 7b783752b44b..de6c22177548 100644 --- a/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py.ini +++ b/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py.ini @@ -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 diff --git a/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py.ini b/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py.ini index 60533fba258b..763c93f85b65 100644 --- a/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py.ini +++ b/testing/web-platform/meta/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py.ini @@ -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 diff --git a/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py b/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py index 40497ce6ac79..0a75e68cbeda 100644 --- a/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py +++ b/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/capture_screenshot.py @@ -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("
") + 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"]) diff --git a/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py b/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py index 8300e962b92c..67d4b0d06c43 100644 --- a/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py +++ b/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/capture_screenshot/clip.py @@ -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"""
""") + 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"""
""") + 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() diff --git a/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/set_viewport/device_pixel_ratio.py b/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/set_viewport/device_pixel_ratio.py index e4db779bd5dd..88de2de334ae 100644 --- a/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/set_viewport/device_pixel_ratio.py +++ b/testing/web-platform/tests/webdriver/tests/bidi/browsing_context/set_viewport/device_pixel_ratio.py @@ -1,4 +1,5 @@ import pytest +from webdriver.bidi.modules.script import ContextTarget from ... import get_device_pixel_ratio, get_viewport_dimensions @@ -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): @@ -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"""
foo
""" + 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