From 8d7847865aecf276c8febf6b891b970504f2caeb Mon Sep 17 00:00:00 2001 From: MattL1989 Date: Thu, 29 Oct 2026 22:18:52 +0000 Subject: [PATCH] fix(flutter): support horizontal scrolling in scroll_till_visible ScrollDirection only defined UP and DOWN, so scroll_till_visible could not scroll a horizontal list, although the Flutter integration server accepts 'left' and 'right' as scrollDirection (AxisDirectionEnumMap in appium-flutter-server's scroll_till_visible model). Add the LEFT and RIGHT members. The default stays DOWN. Co-Authored-By: Claude Opus 5.5 --- .../flutter_integration/flutter_commands.py | 2 +- .../flutter_integration/scroll_directions.py | 2 ++ .../flutter_actions_test.py | 26 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/appium/webdriver/extensions/flutter_integration/flutter_commands.py b/appium/webdriver/extensions/flutter_integration/flutter_commands.py index 365ee29f4..007292e44 100644 --- a/appium/webdriver/extensions/flutter_integration/flutter_commands.py +++ b/appium/webdriver/extensions/flutter_integration/flutter_commands.py @@ -128,7 +128,7 @@ def scroll_till_visible( Args: scroll_to (FlutterFinder): The Flutter element to scroll to. - scroll_direction (ScrollDirection): The direction to scroll up or down. Defaults to `ScrollDirection.DOWN`. + scroll_direction (ScrollDirection): The direction to scroll. Defaults to `ScrollDirection.DOWN`. KeywordArgs: scrollView (str): The view of the scroll. Default value is 'Scrollable' diff --git a/appium/webdriver/extensions/flutter_integration/scroll_directions.py b/appium/webdriver/extensions/flutter_integration/scroll_directions.py index 7624b5b2e..bd0d05e8b 100644 --- a/appium/webdriver/extensions/flutter_integration/scroll_directions.py +++ b/appium/webdriver/extensions/flutter_integration/scroll_directions.py @@ -4,3 +4,5 @@ class ScrollDirection(Enum): UP = 'up' DOWN = 'down' + LEFT = 'left' + RIGHT = 'right' diff --git a/test/unit/webdriver/flutter_integration/flutter_actions_test.py b/test/unit/webdriver/flutter_integration/flutter_actions_test.py index 8c54a357c..39c720381 100644 --- a/test/unit/webdriver/flutter_integration/flutter_actions_test.py +++ b/test/unit/webdriver/flutter_integration/flutter_actions_test.py @@ -15,6 +15,7 @@ import os import httpretty +import pytest from appium.common.helper import encode_file_to_base64 from appium.webdriver.extensions.flutter_integration.flutter_commands import FlutterCommand @@ -86,6 +87,31 @@ def test_scroll_till_visible(self): assert request_body['script'] == 'flutter: scrollTillVisible' assert arguments == expected_arguments + @pytest.mark.parametrize( + ('scroll_direction', 'expected_value'), + [(ScrollDirection.LEFT, 'left'), (ScrollDirection.RIGHT, 'right')], + ) + @httpretty.activate + def test_scroll_till_visible_horizontally(self, scroll_direction, expected_value): + driver = flutter_w3c_driver() + flutter = FlutterCommand(driver) + + httpretty.register_uri( + httpretty.POST, + appium_command('/session/1234567890/execute/sync'), + ) + + finder = FlutterFinder.by_key('message_field') + flutter.scroll_till_visible(finder, scroll_direction) + + request_body = get_httpretty_request_body(httpretty.last_request()) + arguments = request_body['args'][0] + assert request_body['script'] == 'flutter: scrollTillVisible' + assert arguments == { + 'finder': {'using': '-flutter key', 'value': 'message_field'}, + 'scrollDirection': expected_value, + } + @httpretty.activate def test_scroll_till_visible_with_kwargs(self): driver = flutter_w3c_driver()