From 44f3bbd123ef94b2260a4684d2604e0543a7e197 Mon Sep 17 00:00:00 2001 From: eugene_matsyuk Date: Sun, 14 Nov 2021 15:02:00 +0300 Subject: [PATCH] #249. Reverted the previous behavior of ObjectAutoScrollProviderImpl --- .../ObjectAutoScrollProviderImpl.kt | 42 ++++++++++++++----- .../ElementLoaderObjectBehaviorInterceptor.kt | 4 +- .../FlakySafeObjectBehaviorInterceptor.kt | 4 +- .../interaction/UiObjectInteraction.kt | 2 +- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/ObjectAutoScrollProviderImpl.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/ObjectAutoScrollProviderImpl.kt index 2d009de1b..9137d5d6a 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/ObjectAutoScrollProviderImpl.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/ObjectAutoScrollProviderImpl.kt @@ -47,16 +47,36 @@ class ObjectAutoScrollProviderImpl( * @return the result of [action] invocation. */ override fun scroll(interaction: UiObjectInteraction, action: () -> T, cachedError: Throwable): T { - return try { - // Looks for a scrollable content - val scrollable = UiScrollable(UiSelector().scrollable(true)) - // Scrolls to the bottom and looks for the given view. Invokes the action if the view was found. - scrollable.scrollForward() - logger.i("UiObject autoscroll successfully performed.") - action.invoke() - } catch (error: Throwable) { - logger.i("UiObject autoscroll did not help. Throwing exception.") - throw cachedError - } + /** + * Looks for a scrollable content + */ + val scrollable = UiScrollable(UiSelector().scrollable(true)) + + /** + * Scrolls to the bottom and looks for the given view. Invokes the action if the view was found. + */ + do { + if (interaction.uiObject2 != null) { + logger.i("UiObject autoscroll to the bottom successfully performed.") + return action.invoke() + } else { + interaction.reCalculateUiObject() + } + } while (scrollable.scrollForward()) + + /** + * Scrolls to the beginning and looks for the given view. Invokes the action if the view was found. + */ + do { + if (interaction.uiObject2 != null) { + logger.i("UiObject autoscroll to the beginning successfully performed.") + return action.invoke() + } else { + interaction.reCalculateUiObject() + } + } while (scrollable.scrollBackward()) + + logger.i("UiObject autoscroll did not help. Throwing exception.") + throw cachedError } } diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/elementloader/ElementLoaderObjectBehaviorInterceptor.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/elementloader/ElementLoaderObjectBehaviorInterceptor.kt index 1084183c4..6ad51d8b8 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/elementloader/ElementLoaderObjectBehaviorInterceptor.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/elementloader/ElementLoaderObjectBehaviorInterceptor.kt @@ -28,7 +28,7 @@ class ElementLoaderObjectBehaviorInterceptor( assertion: UiObjectAssertion, activity: () -> T ): T = passAction( - elementLoader = { interaction.reFindUiObject() }, + elementLoader = { interaction.reCalculateUiObject() }, action = activity ) @@ -43,7 +43,7 @@ class ElementLoaderObjectBehaviorInterceptor( action: UiObjectAction, activity: () -> T ): T = passAction( - elementLoader = { interaction.reFindUiObject() }, + elementLoader = { interaction.reCalculateUiObject() }, action = activity ) } diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/flakysafety/FlakySafeObjectBehaviorInterceptor.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/flakysafety/FlakySafeObjectBehaviorInterceptor.kt index 4056e5303..890bf2d17 100644 --- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/flakysafety/FlakySafeObjectBehaviorInterceptor.kt +++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorkautomator/impl/flakysafety/FlakySafeObjectBehaviorInterceptor.kt @@ -31,7 +31,7 @@ class FlakySafeObjectBehaviorInterceptor( assertion: UiObjectAssertion, activity: () -> T ): T = flakySafely(action = { - interaction.reFindUiObject() + interaction.reCalculateUiObject() activity.invoke() }) @@ -47,7 +47,7 @@ class FlakySafeObjectBehaviorInterceptor( action: UiObjectAction, activity: () -> T ): T = flakySafely(action = { - interaction.reFindUiObject() + interaction.reCalculateUiObject() activity.invoke() }) } diff --git a/kautomator/src/main/kotlin/com/kaspersky/components/kautomator/intercept/interaction/UiObjectInteraction.kt b/kautomator/src/main/kotlin/com/kaspersky/components/kautomator/intercept/interaction/UiObjectInteraction.kt index 585a35c87..a6536d8e4 100644 --- a/kautomator/src/main/kotlin/com/kaspersky/components/kautomator/intercept/interaction/UiObjectInteraction.kt +++ b/kautomator/src/main/kotlin/com/kaspersky/components/kautomator/intercept/interaction/UiObjectInteraction.kt @@ -35,7 +35,7 @@ class UiObjectInteraction( action.execute(uiObject2 ?: throw UnfoundedUiObjectException(selector)) } - fun reFindUiObject() { + fun reCalculateUiObject() { uiObject2 = calculateUiObject() }