From 22d48fa0ffc8e9672ee12b64da43c7f45539f1b8 Mon Sep 17 00:00:00 2001 From: pdenert Date: Tue, 21 Jan 2025 17:32:23 +0100 Subject: [PATCH 1/2] Fix native tap with instance --- packages/patrol/CHANGELOG.md | 4 ++++ .../kotlin/pl/leancode/patrol/AutomatorServer.kt | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/patrol/CHANGELOG.md b/packages/patrol/CHANGELOG.md index 996cbf20a..9f73fd841 100644 --- a/packages/patrol/CHANGELOG.md +++ b/packages/patrol/CHANGELOG.md @@ -1,3 +1,7 @@ +## Unreleased + +- Fix `$.native.tap()` not working with `Selector` having `instance` set. + ## 3.14.0 - Remove `exception` from `StepEntry`. When it was too long, it caused crash because of badly formed JSON. (#2481) diff --git a/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt b/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt index 32b5392fc..5c8e6713a 100644 --- a/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt +++ b/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt @@ -168,16 +168,24 @@ class AutomatorServer(private val automation: Automator) : NativeAutomatorServer override fun tap(request: TapRequest) { if (request.selector != null) { + /// Remove instance before creating bySelector + var selector2 = request.selector.copy(instance = null) + val bySelector = selector2.toBySelector() + automation.tap( uiSelector = request.selector.toUiSelector(), - bySelector = request.selector.toBySelector(), + bySelector = bySelector, index = request.selector.instance?.toInt() ?: 0, timeout = request.timeoutMillis ) } else if (request.androidSelector != null) { + /// Remove instance before creating bySelector + var androidSelector2 = request.androidSelector.copy(instance = null) + val bySelector = androidSelector2.toBySelector() + automation.tap( uiSelector = request.androidSelector.toUiSelector(), - bySelector = request.androidSelector.toBySelector(), + bySelector = bySelector, index = request.androidSelector.instance?.toInt() ?: 0, timeout = request.timeoutMillis ) From 0994c5be6b2ddef3ef1dbc3486f4f1e07f3c3ba7 Mon Sep 17 00:00:00 2001 From: pdenert Date: Wed, 22 Jan 2025 10:28:01 +0100 Subject: [PATCH 2/2] Modify comment describing removing instance --- .../src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt b/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt index 5c8e6713a..d039689b4 100644 --- a/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt +++ b/packages/patrol/android/src/main/kotlin/pl/leancode/patrol/AutomatorServer.kt @@ -168,7 +168,7 @@ class AutomatorServer(private val automation: Automator) : NativeAutomatorServer override fun tap(request: TapRequest) { if (request.selector != null) { - /// Remove instance before creating bySelector + // Remove instance before creating bySelector, as it's not supported var selector2 = request.selector.copy(instance = null) val bySelector = selector2.toBySelector() @@ -179,7 +179,7 @@ class AutomatorServer(private val automation: Automator) : NativeAutomatorServer timeout = request.timeoutMillis ) } else if (request.androidSelector != null) { - /// Remove instance before creating bySelector + // Remove instance before creating bySelector, as it's not supported var androidSelector2 = request.androidSelector.copy(instance = null) val bySelector = androidSelector2.toBySelector()