Skip to content

Commit

Permalink
[remote] Convert delta values for wheel scroll actions from CSS to de…
Browse files Browse the repository at this point in the history
…vice pixels.

Differential Revision: https://phabricator.services.mozilla.com/D186534

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1849229
gecko-commit: 4ade93d36333519be8b904d5b0c99f27c602b909
gecko-reviewers: webdriver-reviewers, jdescottes
  • Loading branch information
moz-wptsync-bot authored and sideshowbarker committed Sep 1, 2023
1 parent 80f7e73 commit 95d9950
Show file tree
Hide file tree
Showing 4 changed files with 191 additions and 152 deletions.
50 changes: 25 additions & 25 deletions webdriver/tests/bidi/input/perform_actions/wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@


@pytest.mark.parametrize("delta_x, delta_y", [(0, 10), (5, 0), (5, 10)])
async def test_wheel_scroll(
async def test_scroll_not_scrollable(
bidi_session, setup_wheel_test, top_context, get_element, delta_x, delta_y
):
actions = Actions()

outer = await get_element("#outer")
target = await get_element("#not-scrollable")
actions.add_wheel().scroll(
x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=get_element_origin(outer)
x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=get_element_origin(target)
)

await bidi_session.input.perform_actions(
Expand All @@ -27,21 +27,26 @@ async def test_wheel_scroll(

assert len(events) == 1
assert events[0]["type"] == "wheel"
assert events[0]["deltaX"] >= delta_x
assert events[0]["deltaY"] >= delta_y
assert events[0]["deltaX"] == delta_x
assert events[0]["deltaY"] == delta_y
assert events[0]["deltaZ"] == 0
assert events[0]["target"] == "outer"
assert events[0]["target"] == "not-scrollable-content"


@pytest.mark.parametrize("delta_x, delta_y", [(0, 10), (5, 0), (5, 10)])
async def test_wheel_scroll_iframe(
async def test_scroll_scrollable_overflow(
bidi_session, setup_wheel_test, top_context, get_element, delta_x, delta_y
):
actions = Actions()

subframe = await get_element("#subframe")
scrollable = await get_element("#scrollable")

actions.add_wheel().scroll(
x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=get_element_origin(subframe)
x=0,
y=0,
delta_x=delta_x,
delta_y=delta_y,
origin=get_element_origin(scrollable),
)

await bidi_session.input.perform_actions(
Expand All @@ -50,26 +55,21 @@ async def test_wheel_scroll_iframe(
events = await get_events(bidi_session, top_context["context"])
assert len(events) == 1
assert events[0]["type"] == "wheel"
assert events[0]["deltaX"] >= delta_x
assert events[0]["deltaY"] >= delta_y
assert events[0]["deltaX"] == delta_x
assert events[0]["deltaY"] == delta_y
assert events[0]["deltaZ"] == 0
assert events[0]["target"] == "iframeContent"
assert events[0]["target"] == "scrollable-content"


@pytest.mark.parametrize("delta_x, delta_y", [(0, 10), (5, 0), (5, 10)])
async def test_wheel_scroll_overflow(
async def test_scroll_iframe(
bidi_session, setup_wheel_test, top_context, get_element, delta_x, delta_y
):
actions = Actions()

scrollable = await get_element("#scrollable")

target = await get_element("#iframe")
actions.add_wheel().scroll(
x=0,
y=0,
delta_x=delta_x,
delta_y=delta_y,
origin=get_element_origin(scrollable),
x=0, y=0, delta_x=delta_x, delta_y=delta_y, origin=get_element_origin(target)
)

await bidi_session.input.perform_actions(
Expand All @@ -78,15 +78,15 @@ async def test_wheel_scroll_overflow(
events = await get_events(bidi_session, top_context["context"])
assert len(events) == 1
assert events[0]["type"] == "wheel"
assert events[0]["deltaX"] >= delta_x
assert events[0]["deltaY"] >= delta_y
assert events[0]["deltaX"] == delta_x
assert events[0]["deltaY"] == delta_y
assert events[0]["deltaZ"] == 0
assert events[0]["target"] == "scrollContent"
assert events[0]["target"] == "iframeContent"


@pytest.mark.parametrize("mode", ["open", "closed"])
@pytest.mark.parametrize("nested", [False, True], ids=["outer", "inner"])
async def test_wheel_scroll_shadow_tree(
async def test_scroll_shadow_tree(
bidi_session, top_context, get_test_page, mode, nested
):
await bidi_session.browsing_context.navigate(
Expand Down Expand Up @@ -149,4 +149,4 @@ async def test_wheel_scroll_shadow_tree(
assert len(events) == 1
assert events[0]["deltaX"] >= 5
assert events[0]["deltaY"] >= 10
assert events[0]["target"] == "scrollableShadowTreeContent"
assert events[0]["target"] == "scrollableShadowTreeContent"
15 changes: 15 additions & 0 deletions webdriver/tests/classic/perform_actions/invalid.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import pytest

from webdriver.error import InvalidArgumentException

from tests.support.asserts import assert_error
from . import perform_actions

Expand Down Expand Up @@ -821,3 +823,16 @@ def test_wheel_action_scroll_origin_element_invalid_value(session):
]
response = perform_actions(session, actions)
assert_error(response, "no such element")


@pytest.mark.parametrize("missing", ["x", "y", "deltaX", "deltaY"])
def test_wheel_action_scroll_missing_property(
session, test_actions_scroll_page, wheel_chain, missing
):
target = session.find.css("#scrollable", all=False)

actions = wheel_chain.scroll(0, 0, 5, 10, origin=target)
del actions._actions[-1][missing]

with pytest.raises(InvalidArgumentException):
actions.perform()
62 changes: 25 additions & 37 deletions webdriver/tests/classic/perform_actions/wheel.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import pytest

from webdriver.error import InvalidArgumentException, NoSuchWindowException
from webdriver.error import NoSuchWindowException


from tests.classic.perform_actions.support.refine import get_events
from tests.support.asserts import assert_move_to_coordinates
from tests.support.helpers import filter_dict


def test_null_response_value(session, wheel_chain):
Expand All @@ -22,51 +21,51 @@ def test_no_browsing_context(session, closed_window, wheel_chain):
wheel_chain.scroll(0, 0, 0, 10).perform()


def test_wheel_scroll(session, test_actions_scroll_page, wheel_chain):
session.execute_script("document.scrollingElement.scrollTop = 0")
def test_scroll_not_scrollable(session, test_actions_scroll_page, wheel_chain):
target = session.find.css("#not-scrollable", all=False)

wheel_chain.scroll(0, 0, 5, 10, origin=target).perform()

outer = session.find.css("#outer", all=False)
wheel_chain.scroll(0, 0, 5, 10, origin=outer).perform()
events = get_events(session)
assert len(events) == 1
assert events[0]["type"] == "wheel"
assert events[0]["deltaX"] >= 5
assert events[0]["deltaY"] >= 10
assert events[0]["deltaX"] == 5
assert events[0]["deltaY"] == 10
assert events[0]["deltaZ"] == 0
assert events[0]["target"] == "outer"
assert events[0]["target"] == "not-scrollable-content"


def test_wheel_scroll_overflow(session, test_actions_scroll_page, wheel_chain):
session.execute_script("document.scrollingElement.scrollTop = 0")
def test_scroll_scrollable_overflow(session, test_actions_scroll_page, wheel_chain):
target = session.find.css("#scrollable", all=False)

wheel_chain.scroll(0, 0, 5, 10, origin=target).perform()

scrollable = session.find.css("#scrollable", all=False)
wheel_chain.scroll(0, 0, 5, 10, origin=scrollable).perform()
events = get_events(session)
assert len(events) == 1
assert events[0]["type"] == "wheel"
assert events[0]["deltaX"] >= 5
assert events[0]["deltaY"] >= 10
assert events[0]["deltaX"] == 5
assert events[0]["deltaY"] == 10
assert events[0]["deltaZ"] == 0
assert events[0]["target"] == "scrollContent"
assert events[0]["target"] == "scrollable-content"


def test_wheel_scroll_iframe(session, test_actions_scroll_page, wheel_chain):
session.execute_script("document.scrollingElement.scrollTop = 0")
def test_scroll_iframe(session, test_actions_scroll_page, wheel_chain):
target = session.find.css("#iframe", all=False)

wheel_chain.scroll(0, 0, 5, 10, origin=target).perform()

subframe = session.find.css("#subframe", all=False)
wheel_chain.scroll(0, 0, 5, 10, origin=subframe).perform()
events = get_events(session)
assert len(events) == 1
assert events[0]["type"] == "wheel"
assert events[0]["deltaX"] >= 5
assert events[0]["deltaY"] >= 10
assert events[0]["deltaX"] == 5
assert events[0]["deltaY"] == 10
assert events[0]["deltaZ"] == 0
assert events[0]["target"] == "iframeContent"


@pytest.mark.parametrize("mode", ["open", "closed"])
@pytest.mark.parametrize("nested", [False, True], ids=["outer", "inner"])
def test_wheel_scroll_shadow_tree(session, get_test_page, wheel_chain, mode, nested):
def test_scroll_shadow_tree(session, get_test_page, wheel_chain, mode, nested):
session.url = get_test_page(
shadow_doc="""
<div id="scrollableShadowTree"
Expand Down Expand Up @@ -109,17 +108,6 @@ def test_wheel_scroll_shadow_tree(session, get_test_page, wheel_chain, mode, nes

events = session.execute_script("return window.wheelEvents;") or []
assert len(events) == 1
assert events[0]["deltaX"] >= 5
assert events[0]["deltaY"] >= 10
assert events[0]["deltaX"] == 5
assert events[0]["deltaY"] == 10
assert events[0]["target"] == "scrollableShadowTreeContent"


@pytest.mark.parametrize("missing", ["x", "y", "deltaX", "deltaY"])
def test_wheel_missing_prop(session, test_actions_scroll_page, wheel_chain, missing):
session.execute_script("document.scrollingElement.scrollTop = 0")

outer = session.find.css("#outer", all=False)
actions = wheel_chain.scroll(0, 0, 5, 10, origin=outer)
del actions._actions[-1][missing]
with pytest.raises(InvalidArgumentException):
actions.perform()
Loading

0 comments on commit 95d9950

Please sign in to comment.