appium-espresso-driver 8.0.0 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +5 -0
- package/build/lib/server-builder.d.ts +8 -3
- package/build/lib/server-builder.d.ts.map +1 -1
- package/build/lib/server-builder.js +8 -0
- package/build/lib/server-builder.js.map +1 -1
- package/espresso-server/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk +0 -0
- package/espresso-server/app/build.gradle.kts +20 -15
- package/espresso-server/build.gradle.kts +3 -18
- package/espresso-server/buildSrc/.gradle/9.4.1/executionHistory/executionHistory.bin +0 -0
- package/espresso-server/buildSrc/.gradle/9.4.1/executionHistory/executionHistory.lock +0 -0
- package/espresso-server/buildSrc/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/espresso-server/buildSrc/.gradle/buildOutputCleanup/cache.properties +1 -1
- package/espresso-server/buildSrc/.gradle/file-system.probe +0 -0
- package/espresso-server/buildSrc/build/classes/kotlin/main/META-INF/buildSrc.kotlin_module +0 -0
- package/espresso-server/buildSrc/build/classes/kotlin/main/io/appium/espressoserver/gradle/CapabilityVersionKt.class +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin +0 -0
- package/espresso-server/buildSrc/build/kotlin/compileKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/espresso-server/buildSrc/build/libs/buildSrc.jar +0 -0
- package/espresso-server/buildSrc/build.gradle.kts +2 -1
- package/espresso-server/buildSrc/src/main/kotlin/io/appium/espressoserver/gradle/CapabilityVersion.kt +12 -0
- package/espresso-server/gradle/libs.versions.toml +16 -0
- package/espresso-server/gradle.properties +1 -12
- package/espresso-server/library/build.gradle.kts +53 -32
- package/espresso-server/library/src/composeOff/java/io/appium/espressoserver/lib/compose/ComposeHandlerBridge.kt +73 -0
- package/espresso-server/library/src/composeOff/java/io/appium/espressoserver/lib/helpers/ComposeViewCache.kt +29 -0
- package/espresso-server/library/src/composeOff/java/io/appium/espressoserver/lib/http/Server.kt +21 -0
- package/espresso-server/library/src/composeOff/java/io/appium/espressoserver/lib/model/SourceDocumentComposeHooks.kt +26 -0
- package/espresso-server/library/src/composeOn/java/io/appium/espressoserver/lib/compose/ComposeHandlerBridge.kt +180 -0
- package/espresso-server/library/src/composeOn/java/io/appium/espressoserver/lib/compose/ComposeScreenshot.kt +49 -0
- package/espresso-server/library/src/composeOn/java/io/appium/espressoserver/lib/drivers/DriverContextComposeRule.kt +29 -0
- package/espresso-server/library/src/{main → composeOn}/java/io/appium/espressoserver/lib/helpers/ComposeNodeFinder.kt +1 -0
- package/espresso-server/library/src/composeOn/java/io/appium/espressoserver/lib/helpers/ComposeViewCache.kt +37 -0
- package/espresso-server/library/src/composeOn/java/io/appium/espressoserver/lib/http/Server.kt +30 -0
- package/espresso-server/library/src/composeOn/java/io/appium/espressoserver/lib/model/ComposeElement.kt +33 -0
- package/espresso-server/library/src/composeOn/java/io/appium/espressoserver/lib/model/SourceDocumentComposeHooks.kt +103 -0
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/drivers/DriverContext.kt +3 -6
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/Clear.kt +2 -12
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/Click.kt +2 -12
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/DeleteSession.kt +2 -2
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/ElementScreenshot.kt +2 -3
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/ElementValue.kt +2 -12
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/FindElement.kt +3 -12
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/FindElements.kt +3 -7
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt +3 -7
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt +2 -9
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt +2 -4
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetLocation.kt +2 -6
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetName.kt +2 -6
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetRect.kt +2 -4
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetSelected.kt +2 -4
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetSize.kt +2 -6
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/Keys.kt +2 -16
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt +2 -24
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/RequestHandler.kt +8 -1
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/Text.kt +2 -4
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/exceptions/ComposeNotSupportedException.kt +28 -0
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/exceptions/InvalidArgumentException.kt +1 -1
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/helpers/EspressoViewsCache.kt +0 -17
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/helpers/ScreenshotHelpers.kt +0 -13
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/helpers/Version.kt +1 -1
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/http/Router.kt +1 -1
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/http/{Server.kt → ServerBase.kt} +32 -20
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/model/Element.kt +0 -13
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/model/SourceDocument.kt +4 -85
- package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/model/settings/DriverSetting.kt +15 -4
- package/espresso-server/settings.gradle.kts +30 -0
- package/lib/server-builder.ts +15 -2
- package/npm-shrinkwrap.json +36 -14
- package/package.json +2 -1
- /package/espresso-server/library/src/{main → composeOn}/java/io/appium/espressoserver/lib/model/ComposeNodeElement.kt +0 -0
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/Clear.kt
CHANGED
|
@@ -16,15 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import androidx.test.espresso.PerformException
|
|
21
21
|
import io.appium.espressoserver.lib.handlers.exceptions.InvalidElementStateException
|
|
22
22
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
23
23
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
24
24
|
|
|
25
25
|
import androidx.test.espresso.action.ViewActions.clearText
|
|
26
|
-
import io.appium.espressoserver.lib.handlers.exceptions.StaleElementException
|
|
27
|
-
import io.appium.espressoserver.lib.helpers.getNodeInteractionById
|
|
28
26
|
|
|
29
27
|
class Clear : RequestHandler<AppiumParams, Unit> {
|
|
30
28
|
|
|
@@ -37,13 +35,5 @@ class Clear : RequestHandler<AppiumParams, Unit> {
|
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
override fun handleCompose(params: AppiumParams)
|
|
41
|
-
try {
|
|
42
|
-
getNodeInteractionById(params.elementId).performTextClearance()
|
|
43
|
-
} catch (e: AssertionError) {
|
|
44
|
-
throw StaleElementException(params.elementId!!)
|
|
45
|
-
} catch (e: IllegalArgumentException) {
|
|
46
|
-
throw InvalidElementStateException("Clear", params.elementId!!, e)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
38
|
+
override fun handleCompose(params: AppiumParams) = ComposeHandlerBridge.clear(params)
|
|
49
39
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/Click.kt
CHANGED
|
@@ -16,15 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import androidx.test.espresso.PerformException
|
|
21
21
|
import io.appium.espressoserver.lib.handlers.exceptions.InvalidElementStateException
|
|
22
22
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
23
23
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
24
24
|
|
|
25
25
|
import androidx.test.espresso.action.ViewActions.click
|
|
26
|
-
import io.appium.espressoserver.lib.handlers.exceptions.StaleElementException
|
|
27
|
-
import io.appium.espressoserver.lib.helpers.getNodeInteractionById
|
|
28
26
|
|
|
29
27
|
class Click : RequestHandler<AppiumParams, Unit> {
|
|
30
28
|
|
|
@@ -37,13 +35,5 @@ class Click : RequestHandler<AppiumParams, Unit> {
|
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
|
|
40
|
-
override fun handleCompose(params: AppiumParams)
|
|
41
|
-
try {
|
|
42
|
-
getNodeInteractionById(params.elementId).performClick()
|
|
43
|
-
} catch (e: AssertionError) {
|
|
44
|
-
throw StaleElementException(params.elementId!!)
|
|
45
|
-
} catch (e: IllegalArgumentException) {
|
|
46
|
-
throw InvalidElementStateException("Click", params.elementId!!, e)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
38
|
+
override fun handleCompose(params: AppiumParams) = ComposeHandlerBridge.click(params)
|
|
49
39
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/DeleteSession.kt
CHANGED
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
19
|
import io.appium.espressoserver.lib.helpers.NotificationListener
|
|
20
|
-
import io.appium.espressoserver.lib.http.
|
|
20
|
+
import io.appium.espressoserver.lib.http.ServerBase
|
|
21
21
|
import io.appium.espressoserver.lib.http.response.AppiumResponse
|
|
22
22
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
23
23
|
import io.appium.espressoserver.lib.model.GlobalSession
|
|
24
24
|
|
|
25
|
-
class DeleteSession(private val server:
|
|
25
|
+
class DeleteSession(private val server: ServerBase) : RequestHandler<AppiumParams, AppiumResponse> {
|
|
26
26
|
|
|
27
27
|
override fun handleInternal(params: AppiumParams): AppiumResponse {
|
|
28
28
|
NotificationListener.stop()
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
20
|
-
import io.appium.espressoserver.lib.helpers.takeComposeNodeScreenshot
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
21
20
|
import io.appium.espressoserver.lib.helpers.takeEspressoViewScreenshot
|
|
22
21
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
23
22
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
@@ -28,5 +27,5 @@ class ElementScreenshot : RequestHandler<AppiumParams, String> {
|
|
|
28
27
|
takeEspressoViewScreenshot(EspressoElement.getCachedViewStateById(params.elementId).view)
|
|
29
28
|
|
|
30
29
|
override fun handleCompose(params: AppiumParams): String =
|
|
31
|
-
|
|
30
|
+
ComposeHandlerBridge.elementScreenshot(params.elementId!!)
|
|
32
31
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/ElementValue.kt
CHANGED
|
@@ -18,8 +18,7 @@ package io.appium.espressoserver.lib.handlers
|
|
|
18
18
|
|
|
19
19
|
import android.widget.NumberPicker
|
|
20
20
|
import android.widget.ProgressBar
|
|
21
|
-
import
|
|
22
|
-
import androidx.compose.ui.test.performTextInput
|
|
21
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
23
22
|
import androidx.test.espresso.PerformException
|
|
24
23
|
|
|
25
24
|
import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
|
|
@@ -30,7 +29,6 @@ import androidx.test.espresso.action.ViewActions.replaceText
|
|
|
30
29
|
import androidx.test.espresso.action.ViewActions.typeText
|
|
31
30
|
import io.appium.espressoserver.lib.handlers.exceptions.InvalidElementStateException
|
|
32
31
|
import io.appium.espressoserver.lib.helpers.AndroidLogger
|
|
33
|
-
import io.appium.espressoserver.lib.helpers.getNodeInteractionById
|
|
34
32
|
import io.appium.espressoserver.lib.viewaction.ViewTextGetter
|
|
35
33
|
|
|
36
34
|
class ElementValue(private val isReplacing: Boolean) : RequestHandler<TextValueParams, Unit> {
|
|
@@ -77,15 +75,7 @@ class ElementValue(private val isReplacing: Boolean) : RequestHandler<TextValueP
|
|
|
77
75
|
}
|
|
78
76
|
|
|
79
77
|
override fun handleCompose(params: TextValueParams) {
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
if (isReplacing) {
|
|
83
|
-
getNodeInteractionById(params.elementId).performTextClearance()
|
|
84
|
-
}
|
|
85
|
-
getNodeInteractionById(params.elementId).performTextInput(value)
|
|
86
|
-
} catch (e: IllegalArgumentException) {
|
|
87
|
-
throw InvalidElementStateException("Clear", params.elementId!!, e)
|
|
88
|
-
}
|
|
78
|
+
ComposeHandlerBridge.elementValue(params, isReplacing)
|
|
89
79
|
}
|
|
90
80
|
|
|
91
81
|
private fun extractTextToEnter(params: TextValueParams) =
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/FindElement.kt
CHANGED
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
19
20
|
import io.appium.espressoserver.lib.handlers.exceptions.*
|
|
20
|
-
import io.appium.espressoserver.lib.helpers
|
|
21
|
+
import io.appium.espressoserver.lib.helpers.ViewFinder
|
|
21
22
|
import io.appium.espressoserver.lib.model.BaseElement
|
|
22
|
-
import io.appium.espressoserver.lib.model.ComposeElement
|
|
23
23
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
24
24
|
import io.appium.espressoserver.lib.model.Locator
|
|
25
25
|
import io.appium.espressoserver.lib.viewaction.ViewGetter
|
|
@@ -47,14 +47,5 @@ class FindElement : RequestHandler<Locator, BaseElement> {
|
|
|
47
47
|
return EspressoElement(viewState)
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
override fun handleCompose(params: Locator): BaseElement
|
|
51
|
-
val nodeInteractions = toNodeInteractionsCollection(params)
|
|
52
|
-
if (nodeInteractions.fetchSemanticsNodes(false).isEmpty()) throw NoSuchElementException(
|
|
53
|
-
String.format(
|
|
54
|
-
"Could not find a compose element with strategy '%s' and selector '%s'",
|
|
55
|
-
params.using, params.value
|
|
56
|
-
)
|
|
57
|
-
)
|
|
58
|
-
return ComposeElement(nodeInteractions[0])
|
|
59
|
-
}
|
|
50
|
+
override fun handleCompose(params: Locator): BaseElement = ComposeHandlerBridge.findElement(params)
|
|
60
51
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/FindElements.kt
CHANGED
|
@@ -18,9 +18,9 @@ package io.appium.espressoserver.lib.handlers
|
|
|
18
18
|
|
|
19
19
|
import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
|
|
20
20
|
import io.appium.espressoserver.lib.handlers.exceptions.InvalidSelectorException
|
|
21
|
-
import io.appium.espressoserver.lib.
|
|
21
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
22
|
+
import io.appium.espressoserver.lib.helpers.ViewFinder
|
|
22
23
|
import io.appium.espressoserver.lib.model.BaseElement
|
|
23
|
-
import io.appium.espressoserver.lib.model.ComposeElement
|
|
24
24
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
25
25
|
import io.appium.espressoserver.lib.model.Locator
|
|
26
26
|
import io.appium.espressoserver.lib.viewaction.ViewGetter
|
|
@@ -40,9 +40,5 @@ class FindElements : RequestHandler<Locator, List<BaseElement>> {
|
|
|
40
40
|
).map { EspressoElement(it) }
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
override fun handleCompose(params: Locator): List<BaseElement>
|
|
44
|
-
val nodeInteractions = toNodeInteractionsCollection(params)
|
|
45
|
-
return List(nodeInteractions.fetchSemanticsNodes(false).size)
|
|
46
|
-
{ index -> ComposeElement(nodeInteractions[index]) }
|
|
47
|
-
}
|
|
43
|
+
override fun handleCompose(params: Locator): List<BaseElement> = ComposeHandlerBridge.findElements(params)
|
|
48
44
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetAttribute.kt
CHANGED
|
@@ -19,11 +19,11 @@ package io.appium.espressoserver.lib.handlers
|
|
|
19
19
|
import androidx.test.espresso.EspressoException
|
|
20
20
|
import androidx.test.espresso.ViewInteraction
|
|
21
21
|
import androidx.test.espresso.assertion.LayoutAssertions
|
|
22
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
22
23
|
import io.appium.espressoserver.lib.drivers.DriverContext
|
|
23
24
|
import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
|
|
24
25
|
import io.appium.espressoserver.lib.handlers.exceptions.NotYetImplementedException
|
|
25
26
|
import io.appium.espressoserver.lib.helpers.AndroidLogger
|
|
26
|
-
import io.appium.espressoserver.lib.helpers.getSemanticsNode
|
|
27
27
|
import io.appium.espressoserver.lib.model.*
|
|
28
28
|
import io.appium.espressoserver.lib.viewaction.ViewTextGetter
|
|
29
29
|
|
|
@@ -39,16 +39,12 @@ class GetAttribute : RequestHandler<AppiumParams, String?> {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
return when (DriverContext.currentStrategyType) {
|
|
42
|
-
DriverContext.StrategyType.COMPOSE ->
|
|
42
|
+
DriverContext.StrategyType.COMPOSE ->
|
|
43
|
+
ComposeHandlerBridge.getAttribute(params.elementId!!, attributeName)
|
|
43
44
|
DriverContext.StrategyType.ESPRESSO -> getEspressoAttribute(params.elementId!!, attributeName)
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
private fun getComposeAttribute(elementId: String, attributeName: String): String? {
|
|
49
|
-
return ComposeNodeElement(getSemanticsNode(elementId)).getAttribute(attributeName)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
48
|
private fun getEspressoAttribute(elementId: String, attributeName: String): String? {
|
|
53
49
|
val viewElementGetter: () -> ViewElement =
|
|
54
50
|
{ ViewElement(EspressoElement.getCachedViewStateById(elementId).view) }
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetDisplayed.kt
CHANGED
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import
|
|
20
|
-
import io.appium.espressoserver.lib.helpers.getNodeInteractionById
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
21
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
22
21
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
23
22
|
import io.appium.espressoserver.lib.model.ViewElement
|
|
@@ -27,12 +26,6 @@ class GetDisplayed : RequestHandler<AppiumParams, Boolean> {
|
|
|
27
26
|
override fun handleEspresso(params: AppiumParams): Boolean =
|
|
28
27
|
ViewElement(EspressoElement.getCachedViewStateById(params.elementId, false).view).isVisible
|
|
29
28
|
|
|
30
|
-
override fun handleCompose(params: AppiumParams): Boolean =
|
|
31
|
-
try {
|
|
32
|
-
getNodeInteractionById(params.elementId).assertIsDisplayed()
|
|
33
|
-
true
|
|
34
|
-
} catch (e: AssertionError) {
|
|
35
|
-
false
|
|
36
|
-
}
|
|
29
|
+
override fun handleCompose(params: AppiumParams): Boolean = ComposeHandlerBridge.getDisplayed(params)
|
|
37
30
|
}
|
|
38
31
|
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetEnabled.kt
CHANGED
|
@@ -16,17 +16,15 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
21
21
|
import io.appium.espressoserver.lib.model.ViewElement
|
|
22
22
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
23
|
-
import io.appium.espressoserver.lib.model.ComposeNodeElement
|
|
24
23
|
|
|
25
24
|
class GetEnabled : RequestHandler<AppiumParams, Boolean> {
|
|
26
25
|
|
|
27
26
|
override fun handleEspresso(params: AppiumParams): Boolean =
|
|
28
27
|
ViewElement(EspressoElement.getCachedViewStateById(params.elementId).view).isEnabled
|
|
29
28
|
|
|
30
|
-
override fun handleCompose(params: AppiumParams): Boolean =
|
|
31
|
-
ComposeNodeElement(getSemanticsNode(params.elementId!!)).isEnabled
|
|
29
|
+
override fun handleCompose(params: AppiumParams): Boolean = ComposeHandlerBridge.getEnabled(params)
|
|
32
30
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetLocation.kt
CHANGED
|
@@ -16,12 +16,11 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
21
21
|
import io.appium.espressoserver.lib.model.Location
|
|
22
22
|
import io.appium.espressoserver.lib.model.ViewElement
|
|
23
23
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
24
|
-
import io.appium.espressoserver.lib.model.ComposeNodeElement
|
|
25
24
|
|
|
26
25
|
class GetLocation : RequestHandler<AppiumParams, Location> {
|
|
27
26
|
|
|
@@ -30,8 +29,5 @@ class GetLocation : RequestHandler<AppiumParams, Location> {
|
|
|
30
29
|
return Location(viewElement.bounds.left, viewElement.bounds.top)
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
override fun handleCompose(params: AppiumParams): Location
|
|
34
|
-
val composeNodeElement = ComposeNodeElement(getSemanticsNode(params.elementId!!))
|
|
35
|
-
return Location(composeNodeElement.bounds.left, composeNodeElement.bounds.top)
|
|
36
|
-
}
|
|
32
|
+
override fun handleCompose(params: AppiumParams): Location = ComposeHandlerBridge.getLocation(params)
|
|
37
33
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetName.kt
CHANGED
|
@@ -16,11 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
21
21
|
import io.appium.espressoserver.lib.model.ViewElement
|
|
22
22
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
23
|
-
import io.appium.espressoserver.lib.model.ComposeNodeElement
|
|
24
23
|
|
|
25
24
|
class GetName : RequestHandler<AppiumParams, String?> {
|
|
26
25
|
|
|
@@ -29,8 +28,5 @@ class GetName : RequestHandler<AppiumParams, String?> {
|
|
|
29
28
|
return ViewElement(viewState.view).contentDescription?.toString()
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
override fun handleCompose(params: AppiumParams): String?
|
|
33
|
-
val composeNodeElement = ComposeNodeElement(getSemanticsNode(params.elementId!!))
|
|
34
|
-
return composeNodeElement.contentDescription?.toString()
|
|
35
|
-
}
|
|
31
|
+
override fun handleCompose(params: AppiumParams): String? = ComposeHandlerBridge.getName(params)
|
|
36
32
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetRect.kt
CHANGED
|
@@ -16,9 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
21
|
-
import io.appium.espressoserver.lib.model.ComposeNodeElement
|
|
22
21
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
23
22
|
import io.appium.espressoserver.lib.model.Rect
|
|
24
23
|
import io.appium.espressoserver.lib.model.ViewElement
|
|
@@ -28,6 +27,5 @@ class GetRect : RequestHandler<AppiumParams, Rect> {
|
|
|
28
27
|
override fun handleEspresso(params: AppiumParams): Rect =
|
|
29
28
|
ViewElement(EspressoElement.getCachedViewStateById(params.elementId).view).rect
|
|
30
29
|
|
|
31
|
-
override fun handleCompose(params: AppiumParams): Rect =
|
|
32
|
-
ComposeNodeElement(getSemanticsNode(params.elementId!!)).rect
|
|
30
|
+
override fun handleCompose(params: AppiumParams): Rect = ComposeHandlerBridge.getRect(params)
|
|
33
31
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetSelected.kt
CHANGED
|
@@ -16,9 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
21
|
-
import io.appium.espressoserver.lib.model.ComposeNodeElement
|
|
22
21
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
23
22
|
|
|
24
23
|
import io.appium.espressoserver.lib.model.ViewElement
|
|
@@ -28,6 +27,5 @@ class GetSelected : RequestHandler<AppiumParams, Boolean> {
|
|
|
28
27
|
override fun handleEspresso(params: AppiumParams): Boolean =
|
|
29
28
|
ViewElement(EspressoElement.getCachedViewStateById(params.elementId).view).isSelected
|
|
30
29
|
|
|
31
|
-
override fun handleCompose(params: AppiumParams): Boolean =
|
|
32
|
-
ComposeNodeElement(getSemanticsNode(params.elementId!!)).isSelected
|
|
30
|
+
override fun handleCompose(params: AppiumParams): Boolean = ComposeHandlerBridge.getSelected(params)
|
|
33
31
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/GetSize.kt
CHANGED
|
@@ -16,12 +16,11 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
21
21
|
import io.appium.espressoserver.lib.model.Size
|
|
22
22
|
import io.appium.espressoserver.lib.model.ViewElement
|
|
23
23
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
24
|
-
import io.appium.espressoserver.lib.model.ComposeNodeElement
|
|
25
24
|
|
|
26
25
|
class GetSize : RequestHandler<AppiumParams, Size> {
|
|
27
26
|
|
|
@@ -30,8 +29,5 @@ class GetSize : RequestHandler<AppiumParams, Size> {
|
|
|
30
29
|
return Size(bounds.width(), bounds.height())
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
override fun handleCompose(params: AppiumParams): Size
|
|
34
|
-
val bounds = ComposeNodeElement(getSemanticsNode(params.elementId!!)).bounds
|
|
35
|
-
return Size(bounds.width(), bounds.height())
|
|
36
|
-
}
|
|
32
|
+
override fun handleCompose(params: AppiumParams): Size = ComposeHandlerBridge.getSize(params)
|
|
37
33
|
}
|
|
@@ -16,11 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import androidx.test.espresso.UiController
|
|
21
|
-
import io.appium.espressoserver.lib.handlers.exceptions.InvalidElementStateException
|
|
22
|
-
import io.appium.espressoserver.lib.handlers.exceptions.StaleElementException
|
|
23
|
-
import io.appium.espressoserver.lib.helpers.getNodeInteractionById
|
|
24
21
|
import io.appium.espressoserver.lib.helpers.w3c.adapter.espresso.EspressoW3CActionAdapter
|
|
25
22
|
import io.appium.espressoserver.lib.helpers.w3c.models.Actions.ActionsBuilder
|
|
26
23
|
import io.appium.espressoserver.lib.helpers.w3c.models.InputSource.Action
|
|
@@ -80,16 +77,5 @@ class Keys : RequestHandler<TextValueParams, Unit> {
|
|
|
80
77
|
UiControllerPerformer(runnable).run()
|
|
81
78
|
}
|
|
82
79
|
|
|
83
|
-
override fun handleCompose(params: TextValueParams)
|
|
84
|
-
try {
|
|
85
|
-
val keys = params.value ?: return
|
|
86
|
-
keys.forEach {
|
|
87
|
-
getNodeInteractionById(params.elementId).performTextInput(it)
|
|
88
|
-
}
|
|
89
|
-
} catch (e: AssertionError) {
|
|
90
|
-
throw StaleElementException(params.elementId!!)
|
|
91
|
-
} catch (e: IllegalArgumentException) {
|
|
92
|
-
throw InvalidElementStateException("Keys", params.elementId!!, e)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
80
|
+
override fun handleCompose(params: TextValueParams) = ComposeHandlerBridge.keys(params)
|
|
95
81
|
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/handlers/MobileSwipe.kt
CHANGED
|
@@ -16,16 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import
|
|
20
|
-
import androidx.compose.ui.test.swipeDown
|
|
21
|
-
|
|
22
|
-
import androidx.compose.ui.test.swipeLeft
|
|
23
|
-
import androidx.compose.ui.test.swipeRight
|
|
24
|
-
import androidx.compose.ui.test.swipeUp
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
25
20
|
import androidx.test.espresso.action.GeneralSwipeAction
|
|
26
21
|
import io.appium.espressoserver.lib.handlers.exceptions.InvalidArgumentException
|
|
27
22
|
import io.appium.espressoserver.lib.helpers.AndroidLogger
|
|
28
|
-
import io.appium.espressoserver.lib.helpers.getNodeInteractionById
|
|
29
23
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
30
24
|
import io.appium.espressoserver.lib.model.MobileSwipeParams
|
|
31
25
|
import io.appium.espressoserver.lib.model.MobileSwipeParams.Direction.*
|
|
@@ -68,21 +62,5 @@ class MobileSwipe : RequestHandler<MobileSwipeParams, Void?> {
|
|
|
68
62
|
return null
|
|
69
63
|
}
|
|
70
64
|
|
|
71
|
-
override fun handleCompose(params: MobileSwipeParams): Void?
|
|
72
|
-
val nodeInteractions = getNodeInteractionById(params.elementId)
|
|
73
|
-
|
|
74
|
-
AndroidLogger.info("Performing swipe action with direction '${params.direction}'")
|
|
75
|
-
when (params.direction) {
|
|
76
|
-
UP -> nodeInteractions.performGesture { swipeUp() }
|
|
77
|
-
DOWN -> nodeInteractions.performGesture { swipeDown() }
|
|
78
|
-
LEFT -> nodeInteractions.performGesture { swipeLeft() }
|
|
79
|
-
RIGHT -> nodeInteractions.performGesture { swipeRight() }
|
|
80
|
-
else -> throw InvalidArgumentException(
|
|
81
|
-
"Unknown swipe direction '${params.direction}'. " +
|
|
82
|
-
"Only the following values are supported: " +
|
|
83
|
-
values().joinToString(",") { x -> x.name.lowercase() }
|
|
84
|
-
)
|
|
85
|
-
}
|
|
86
|
-
return null
|
|
87
|
-
}
|
|
65
|
+
override fun handleCompose(params: MobileSwipeParams): Void? = ComposeHandlerBridge.mobileSwipe(params)
|
|
88
66
|
}
|
|
@@ -16,8 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
+
import io.appium.espressoserver.lib.BuildConfig
|
|
19
20
|
import io.appium.espressoserver.lib.drivers.DriverContext
|
|
20
21
|
import io.appium.espressoserver.lib.drivers.DriverContext.StrategyType
|
|
22
|
+
import io.appium.espressoserver.lib.handlers.exceptions.ComposeNotSupportedException
|
|
21
23
|
import io.appium.espressoserver.lib.handlers.exceptions.AppiumException
|
|
22
24
|
import io.appium.espressoserver.lib.handlers.exceptions.NoSuchDriverException
|
|
23
25
|
import io.appium.espressoserver.lib.handlers.exceptions.NotYetImplementedException
|
|
@@ -31,7 +33,12 @@ interface RequestHandler<in T : AppiumParams, out R> {
|
|
|
31
33
|
@Suppress("UNCHECKED_CAST")
|
|
32
34
|
fun invokeStrategy(params: AppiumParams): R =
|
|
33
35
|
when (DriverContext.currentStrategyType) {
|
|
34
|
-
StrategyType.COMPOSE ->
|
|
36
|
+
StrategyType.COMPOSE -> {
|
|
37
|
+
if (!BuildConfig.COMPOSE_SUPPORT) {
|
|
38
|
+
throw ComposeNotSupportedException()
|
|
39
|
+
}
|
|
40
|
+
handleCompose(params as T)
|
|
41
|
+
}
|
|
35
42
|
StrategyType.ESPRESSO -> handleEspresso(params as T)
|
|
36
43
|
}
|
|
37
44
|
|
|
@@ -16,9 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
package io.appium.espressoserver.lib.handlers
|
|
18
18
|
|
|
19
|
-
import io.appium.espressoserver.lib.
|
|
19
|
+
import io.appium.espressoserver.lib.compose.ComposeHandlerBridge
|
|
20
20
|
import io.appium.espressoserver.lib.model.AppiumParams
|
|
21
|
-
import io.appium.espressoserver.lib.model.ComposeNodeElement
|
|
22
21
|
import io.appium.espressoserver.lib.model.EspressoElement
|
|
23
22
|
import io.appium.espressoserver.lib.viewaction.ViewTextGetter
|
|
24
23
|
|
|
@@ -29,6 +28,5 @@ class Text : RequestHandler<AppiumParams, String> {
|
|
|
29
28
|
return ViewTextGetter()[viewInteraction].rawText
|
|
30
29
|
}
|
|
31
30
|
|
|
32
|
-
override fun handleCompose(params: AppiumParams): String =
|
|
33
|
-
ComposeNodeElement(getSemanticsNode(params.elementId!!)).text.toString()
|
|
31
|
+
override fun handleCompose(params: AppiumParams): String = ComposeHandlerBridge.text(params)
|
|
34
32
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
* you may not use this file except in compliance with the License.
|
|
4
|
+
* See the NOTICE file distributed with this work for additional
|
|
5
|
+
* information regarding copyright ownership.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package io.appium.espressoserver.lib.handlers.exceptions
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Thrown when this server was built with Compose omitted (e.g.
|
|
21
|
+
* `appium:espressoBuildConfig->composeSupport=false`) but a Compose-only action was requested.
|
|
22
|
+
*/
|
|
23
|
+
class ComposeNotSupportedException :
|
|
24
|
+
InvalidArgumentException(
|
|
25
|
+
"Jetpack Compose is not available in this Espresso server build: it was assembled with " +
|
|
26
|
+
"appium:espressoBuildConfig->composeSupport=false. " +
|
|
27
|
+
"Set appium:espressoBuildConfig->composeSupport=true and rebuild the server to use Compose.",
|
|
28
|
+
)
|
|
@@ -18,7 +18,7 @@ package io.appium.espressoserver.lib.handlers.exceptions
|
|
|
18
18
|
|
|
19
19
|
import fi.iki.elonen.NanoHTTPD
|
|
20
20
|
|
|
21
|
-
class InvalidArgumentException : AppiumException {
|
|
21
|
+
open class InvalidArgumentException : AppiumException {
|
|
22
22
|
constructor() : super("The arguments passed to the command are either invalid or malformed")
|
|
23
23
|
|
|
24
24
|
constructor(reason: String) : super(reason) {}
|
|
@@ -18,7 +18,6 @@ package io.appium.espressoserver.lib.helpers
|
|
|
18
18
|
|
|
19
19
|
import android.util.LruCache
|
|
20
20
|
import android.view.View
|
|
21
|
-
import androidx.compose.ui.test.SemanticsNodeInteraction
|
|
22
21
|
import androidx.test.espresso.Root
|
|
23
22
|
import org.hamcrest.Matcher
|
|
24
23
|
|
|
@@ -45,19 +44,3 @@ object EspressoViewsCache {
|
|
|
45
44
|
cache.evictAll()
|
|
46
45
|
}
|
|
47
46
|
}
|
|
48
|
-
|
|
49
|
-
/** Compose does not have stable instances, use locator again. */
|
|
50
|
-
object ComposeViewCache {
|
|
51
|
-
private val cache = LruCache<String, SemanticsNodeInteraction>(MAX_CACHE_SIZE)
|
|
52
|
-
|
|
53
|
-
fun put(id: String, composeNode: SemanticsNodeInteraction) {
|
|
54
|
-
cache.put(id, composeNode)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
fun get(id: String?): SemanticsNodeInteraction? =
|
|
58
|
-
cache.get(id)
|
|
59
|
-
|
|
60
|
-
fun reset() {
|
|
61
|
-
cache.evictAll()
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -19,10 +19,6 @@ package io.appium.espressoserver.lib.helpers
|
|
|
19
19
|
import android.graphics.Bitmap
|
|
20
20
|
import android.util.Base64
|
|
21
21
|
import android.view.View
|
|
22
|
-
import androidx.compose.ui.graphics.asAndroidBitmap
|
|
23
|
-
import androidx.compose.ui.test.SemanticsNodeInteraction
|
|
24
|
-
import androidx.compose.ui.test.captureToImage
|
|
25
|
-
|
|
26
22
|
import java.io.ByteArrayOutputStream
|
|
27
23
|
import androidx.test.runner.screenshot.Screenshot
|
|
28
24
|
import io.appium.espressoserver.lib.handlers.exceptions.ScreenCaptureException
|
|
@@ -48,12 +44,3 @@ fun takeEspressoViewScreenshot(view: View): String =
|
|
|
48
44
|
} catch (e: RuntimeException) {
|
|
49
45
|
throw ScreenCaptureException("Cannot take a screenshot of a view", e)
|
|
50
46
|
}
|
|
51
|
-
|
|
52
|
-
fun takeComposeNodeScreenshot(nodeInteraction: SemanticsNodeInteraction): String =
|
|
53
|
-
try {
|
|
54
|
-
encodeBitmap(
|
|
55
|
-
nodeInteraction.captureToImage().asAndroidBitmap()
|
|
56
|
-
) { nodeInteraction.fetchSemanticsNode().toString() }
|
|
57
|
-
} catch (e: RuntimeException) {
|
|
58
|
-
throw ScreenCaptureException("Cannot take a screenshot of a node", e)
|
|
59
|
-
}
|
package/espresso-server/library/src/main/java/io/appium/espressoserver/lib/helpers/Version.kt
CHANGED
|
@@ -2,6 +2,6 @@ package io.appium.espressoserver.lib.helpers
|
|
|
2
2
|
|
|
3
3
|
// This value is updated automatically by the NPM versioning script
|
|
4
4
|
// It should be in sync with the NPM module version from package.json
|
|
5
|
-
private const val VERSION = "8.
|
|
5
|
+
private const val VERSION = "8.2.0"
|
|
6
6
|
|
|
7
7
|
fun getEspressoServerVersion() = VERSION
|
|
@@ -32,7 +32,7 @@ import io.appium.espressoserver.lib.http.response.BaseResponse
|
|
|
32
32
|
import io.appium.espressoserver.lib.model.*
|
|
33
33
|
import io.appium.espressoserver.lib.model.web.WebAtomsParams
|
|
34
34
|
|
|
35
|
-
internal class Router(server:
|
|
35
|
+
internal class Router(server: ServerBase) {
|
|
36
36
|
private val routeMap: RouteMap
|
|
37
37
|
|
|
38
38
|
init {
|