From be2b76c3a67225863160216c20d7afe78e75137c Mon Sep 17 00:00:00 2001 From: Benoit CIVEL Date: Wed, 22 Jan 2025 13:18:14 +0100 Subject: [PATCH] Scroll to Element for APK/IPA : Change the behavior : stop scrolling when the element is in the middle of the screen --- .../service/appium/impl/AppiumService.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source/src/main/java/org/cerberus/core/service/appium/impl/AppiumService.java b/source/src/main/java/org/cerberus/core/service/appium/impl/AppiumService.java index 71960ed51..accf706a3 100644 --- a/source/src/main/java/org/cerberus/core/service/appium/impl/AppiumService.java +++ b/source/src/main/java/org/cerberus/core/service/appium/impl/AppiumService.java @@ -447,14 +447,16 @@ private boolean scrollDown(TestCaseExecution testCaseExecution, By element, int do { boolean isPresent = driver.findElements(element).size() > 0; if (isPresent && driver.findElement(element).isDisplayed()) { - //Element found, perform another scroll to offset from middle of screen - int pressOffsetX = driver.manage().window().getSize().width / 2; - int pressOffsetY = driver.manage().window().getSize().height / 2; - if (hOffset!=0 && vOffset!=0){ - scroll(driver, pressOffsetX, pressOffsetY, pressOffsetX - hOffset, pressOffsetY - vOffset); - testCaseExecution.addExecutionLog(ExecutionLog.STATUS_INFO, "[Action:ScrollTo] : Element "+element+" displayed. Applied the offset ("+hOffset+";"+vOffset+") scrolling from the coord("+pressOffsetX+";"+pressOffsetY+")"); - } else { - testCaseExecution.addExecutionLog(ExecutionLog.STATUS_INFO, "[Action:ScrollTo] : Element "+element+" displayed. No offset defined."); + + //Element found, perform another scroll to put the element at the middle of the screen at the defined offset. + int distanceFromMiddleOfTheScreen = (driver.manage().window().getSize().height / 2) - driver.findElement(element).getLocation().getY(); + + if (distanceFromMiddleOfTheScreen > 0) { + scroll(driver, pressX, topY, pressX, topY + distanceFromMiddleOfTheScreen + vOffset); + testCaseExecution.addExecutionLog(ExecutionLog.STATUS_INFO, "[Action:ScrollTo] : Element " + element + " displayed. Perform another scroll to get it at the middle of the screen after applied the offset (" + hOffset + ";" + vOffset + ") scrolling from coord("+pressX+";"+topY+") to coord("+pressX+";"+topY + distanceFromMiddleOfTheScreen + vOffset+")"); + } else if (distanceFromMiddleOfTheScreen < 0 ){ + scroll(driver, pressX, bottomY, pressX, bottomY + distanceFromMiddleOfTheScreen + vOffset); + testCaseExecution.addExecutionLog(ExecutionLog.STATUS_INFO, "[Action:ScrollTo] : Element " + element + " displayed. Perform another scroll to get it at the middle of the screen after applied the offset (" + hOffset + ";" + vOffset + ") scrolling from coord("+pressX+";"+bottomY+") to coord("+pressX+";"+bottomY + distanceFromMiddleOfTheScreen + vOffset+")"); } return true;