From 5532d0024b0b4015831f19fdaa064671683039b5 Mon Sep 17 00:00:00 2001 From: MummanaSubramanya Date: Thu, 29 Aug 2024 10:52:05 +0200 Subject: [PATCH] fix: scroll issue in flutter integration driver --- .../java_client/android/CommandTest.java | 31 ++++++++++++++++--- .../flutter/commands/ScrollParameter.java | 9 +++--- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/e2eFlutterTest/java/io/appium/java_client/android/CommandTest.java b/src/e2eFlutterTest/java/io/appium/java_client/android/CommandTest.java index d8f587e52..4a9b31c6f 100644 --- a/src/e2eFlutterTest/java/io/appium/java_client/android/CommandTest.java +++ b/src/e2eFlutterTest/java/io/appium/java_client/android/CommandTest.java @@ -12,7 +12,9 @@ import org.openqa.selenium.WebElement; import java.io.IOException; +import java.time.Duration; +import static java.lang.Boolean.parseBoolean; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -52,18 +54,37 @@ void testScrollTillVisibleCommand() { openScreen("Vertical Swiping"); WebElement firstElement = driver.scrollTillVisible(new ScrollParameter(AppiumBy.flutterText("Java"))); - assertTrue(Boolean.parseBoolean(firstElement.getAttribute("displayed"))); + assertTrue(parseBoolean(firstElement.getAttribute("displayed"))); WebElement lastElement = driver.scrollTillVisible(new ScrollParameter(AppiumBy.flutterText("Protractor"))); - assertTrue(Boolean.parseBoolean(lastElement.getAttribute("displayed"))); - assertFalse(Boolean.parseBoolean(firstElement.getAttribute("displayed"))); + assertTrue(parseBoolean(lastElement.getAttribute("displayed"))); + assertFalse(parseBoolean(firstElement.getAttribute("displayed"))); firstElement = driver.scrollTillVisible( new ScrollParameter(AppiumBy.flutterText("Java"), ScrollParameter.ScrollDirection.UP) ); - assertTrue(Boolean.parseBoolean(firstElement.getAttribute("displayed"))); - assertFalse(Boolean.parseBoolean(lastElement.getAttribute("displayed"))); + assertTrue(parseBoolean(firstElement.getAttribute("displayed"))); + assertFalse(parseBoolean(lastElement.getAttribute("displayed"))); + } + + @Test + void testScrollTillVisibleWithScrollParametersCommand() { + WebElement loginButton = driver.findElement(BaseFlutterTest.LOGIN_BUTTON); + loginButton.click(); + openScreen("Vertical Swiping"); + + ScrollParameter scrollParameter = new ScrollParameter(AppiumBy.flutterText("Protractor")); + scrollParameter + .setScrollView(AppiumBy.flutterType("Scrollable")) + .setMaxScrolls(30) + .setDelta(30) + // Drag duration currently works when the value is greater than 34 secs + .setDragDuration(Duration.ofMillis(35000)) + .setSettleBetweenScrollsTimeout(10); + + WebElement element = driver.scrollTillVisible(scrollParameter); + assertTrue(parseBoolean(element.getAttribute("displayed"))); } @Test diff --git a/src/main/java/io/appium/java_client/flutter/commands/ScrollParameter.java b/src/main/java/io/appium/java_client/flutter/commands/ScrollParameter.java index 773ece810..d2a2674c7 100644 --- a/src/main/java/io/appium/java_client/flutter/commands/ScrollParameter.java +++ b/src/main/java/io/appium/java_client/flutter/commands/ScrollParameter.java @@ -4,7 +4,6 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import org.openqa.selenium.WebElement; import org.openqa.selenium.internal.Require; import java.time.Duration; @@ -18,7 +17,7 @@ @Setter public class ScrollParameter extends FlutterCommandParameter { private AppiumBy.FlutterBy scrollTo; - private WebElement scrollView; + private AppiumBy.FlutterBy scrollView; private ScrollDirection scrollDirection; private Integer delta; private Integer maxScrolls; @@ -56,13 +55,13 @@ public Map toJson() { params.put("finder", parseFlutterLocator(scrollTo)); Optional.ofNullable(scrollView) - .ifPresent(scrollView -> params.put("scrollView", scrollView)); + .ifPresent(scrollView -> params.put("scrollView", parseFlutterLocator(scrollView))); Optional.ofNullable(delta) .ifPresent(delta -> params.put("delta", delta)); Optional.ofNullable(maxScrolls) - .ifPresent(maxScrolls -> params.put("delta", maxScrolls)); + .ifPresent(maxScrolls -> params.put("maxScrolls", maxScrolls)); Optional.ofNullable(settleBetweenScrollsTimeout) - .ifPresent(timeout -> params.put("delta", settleBetweenScrollsTimeout)); + .ifPresent(timeout -> params.put("settleBetweenScrollsTimeout", settleBetweenScrollsTimeout)); Optional.ofNullable(scrollDirection) .ifPresent(direction -> params.put("scrollDirection", direction.getDirection())); Optional.ofNullable(dragDuration)