diff --git a/compose-support/build.gradle.kts b/compose-support/build.gradle.kts
new file mode 100644
index 000000000..7321962c4
--- /dev/null
+++ b/compose-support/build.gradle.kts
@@ -0,0 +1,16 @@
+plugins {
+ id("convention.android-library")
+ id("convention.publication-android-lib")
+}
+
+publish {
+ artifactId.set("kaspresso-compose-support")
+}
+
+dependencies {
+ api(libs.kakaoCompose)
+ api(libs.composeUiTest)
+
+ implementation(projects.kaspresso)
+ implementation(libs.kotlinStdlib)
+}
diff --git a/compose-support/src/main/AndroidManifest.xml b/compose-support/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..145e16dde
--- /dev/null
+++ b/compose-support/src/main/AndroidManifest.xml
@@ -0,0 +1 @@
+
diff --git a/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeInterceptorsInjector.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeInterceptorsInjector.kt
new file mode 100644
index 000000000..b77e880b5
--- /dev/null
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeInterceptorsInjector.kt
@@ -0,0 +1,27 @@
+package com.kaspersky.components.composesupport
+
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.tolibrary.ComposeSemanticsInterceptor
+import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor
+import io.github.kakaocup.compose.KakaoCompose
+
+object ComposeInterceptorsInjector {
+
+ fun injectKaspressoInKakaoCompose(
+ semanticsBehaviorInterceptors: List,
+ semanticsWatcherInterceptors: List
+ ) {
+ val composeInterceptor =
+ ComposeSemanticsInterceptor(
+ semanticsBehaviorInterceptors,
+ semanticsWatcherInterceptors
+ )
+
+ KakaoCompose.intercept {
+ onComposeInteraction {
+ onCheck(isOverride = true, interceptor = composeInterceptor::interceptCheck)
+ onPerform(isOverride = true, interceptor = composeInterceptor::interceptPerform)
+ }
+ }
+ }
+}
diff --git a/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeSupportKaspressoBuilder.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeSupportKaspressoBuilder.kt
new file mode 100644
index 000000000..216503ef9
--- /dev/null
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/ComposeSupportKaspressoBuilder.kt
@@ -0,0 +1,55 @@
+package com.kaspersky.components.composesupport
+
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.impl.autoscroll.AutoScrollSemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.impl.elementloader.ElementLoaderSemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.impl.failure.FailureLoggingSemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.impl.flakysafety.FlakySafeSemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.impl.systemsafety.SystemDialogSafetySemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor
+import com.kaspersky.components.composesupport.interceptors.watcher.impl.LoggingSemanticsWatcherInterceptor
+import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyViewBehaviorInterceptor
+import com.kaspersky.kaspresso.kaspresso.Kaspresso
+
+/**
+ * Kaspresso Builder that includes all appropriate interceptors to support Jetpack Compose.
+ */
+fun Kaspresso.Builder.Companion.withComposeSupport(
+ customize: Kaspresso.Builder.() -> Unit = {}
+): Kaspresso.Builder = simple(customize).addComposeSupport()
+
+/**
+ * Kaspresso Builder that includes all appropriate interceptors to support Jetpack Compose.
+ */
+fun Kaspresso.Builder.addComposeSupport(): Kaspresso.Builder = apply {
+ val semanticsWatcherInterceptors: List = listOf(
+ LoggingSemanticsWatcherInterceptor(libLogger)
+ )
+
+ val semanticsBehaviorInterceptors: List =
+ if (isAndroidRuntime) {
+ listOf(
+ AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams),
+ SystemDialogSafetySemanticsBehaviorInterceptor(
+ libLogger,
+ instrumentalDependencyProviderFactory.getInterceptorProvider(instrumentation),
+ adbServer
+ ),
+ ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams),
+ FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger),
+ FailureLoggingSemanticsBehaviorInterceptor(libLogger)
+ )
+ } else {
+ listOf(
+ AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams),
+ ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams),
+ FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger),
+ FailureLoggingSemanticsBehaviorInterceptor(libLogger)
+ )
+ }
+
+ ComposeInterceptorsInjector.injectKaspressoInKakaoCompose(
+ semanticsBehaviorInterceptors,
+ semanticsWatcherInterceptors
+ )
+}
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/SemanticsAutoScrollProviderImpl.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/autoscroll/SemanticsAutoScrollProviderImpl.kt
similarity index 95%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/SemanticsAutoScrollProviderImpl.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/autoscroll/SemanticsAutoScrollProviderImpl.kt
index a219088b0..0280681c9 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/autoscroll/SemanticsAutoScrollProviderImpl.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/autoscroll/SemanticsAutoScrollProviderImpl.kt
@@ -1,6 +1,7 @@
-package com.kaspersky.kaspresso.autoscroll
+package com.kaspersky.components.composesupport.autoscroll
import androidx.compose.ui.test.performScrollTo
+import com.kaspersky.kaspresso.autoscroll.AutoScrollProvider
import com.kaspersky.kaspresso.internal.extensions.other.isAllowed
import com.kaspersky.kaspresso.logger.UiTestLogger
import com.kaspersky.kaspresso.params.AutoScrollParams
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/ComposeBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/ComposeBehaviorInterceptor.kt
similarity index 90%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/ComposeBehaviorInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/ComposeBehaviorInterceptor.kt
index 487d88ed2..128e2e521 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/ComposeBehaviorInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/ComposeBehaviorInterceptor.kt
@@ -1,4 +1,4 @@
-package com.kaspersky.kaspresso.interceptors.behaviorcompose
+package com.kaspersky.components.composesupport.interceptors.behavior
interface ComposeBehaviorInterceptor {
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/SemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/SemanticsBehaviorInterceptor.kt
similarity index 72%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/SemanticsBehaviorInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/SemanticsBehaviorInterceptor.kt
index d9fef53d3..157aa9838 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/SemanticsBehaviorInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/SemanticsBehaviorInterceptor.kt
@@ -1,4 +1,4 @@
-package com.kaspersky.kaspresso.interceptors.behaviorcompose
+package com.kaspersky.components.composesupport.interceptors.behavior
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
import io.github.kakaocup.compose.intercept.operation.ComposeAction
@@ -9,4 +9,4 @@ import io.github.kakaocup.compose.intercept.operation.ComposeAssertion
* [ComposeInteraction.check] behavior.
*/
interface SemanticsBehaviorInterceptor :
- ComposeBehaviorInterceptor
+ ComposeBehaviorInterceptor
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt
similarity index 85%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt
index 4c5d0ca1a..99d4410aa 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/autoscroll/AutoScrollSemanticsBehaviorInterceptor.kt
@@ -1,8 +1,8 @@
-package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.autoscroll
+package com.kaspersky.components.composesupport.interceptors.behavior.impl.autoscroll
import com.kaspersky.kaspresso.autoscroll.AutoScrollProvider
-import com.kaspersky.kaspresso.autoscroll.SemanticsAutoScrollProviderImpl
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.autoscroll.SemanticsAutoScrollProviderImpl
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.logger.UiTestLogger
import com.kaspersky.kaspresso.params.AutoScrollParams
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt
similarity index 90%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt
index 6c7882708..b126c9cdb 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/elementloader/ElementLoaderSemanticsBehaviorInterceptor.kt
@@ -1,8 +1,8 @@
-package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.elementloader
+package com.kaspersky.components.composesupport.interceptors.behavior.impl.elementloader
import com.kaspersky.kaspresso.elementloader.ElementLoaderProvider
import com.kaspersky.kaspresso.elementloader.ElementLoaderProviderImpl
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.logger.UiTestLogger
import com.kaspersky.kaspresso.params.ElementLoaderParams
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt
similarity index 91%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt
index 4b88d1a67..7ce1c44d3 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/failure/FailureLoggingSemanticsBehaviorInterceptor.kt
@@ -1,8 +1,8 @@
-package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.failure
+package com.kaspersky.components.composesupport.interceptors.behavior.impl.failure
import com.kaspersky.kaspresso.failure.FailureLoggingProvider
import com.kaspersky.kaspresso.failure.FailureLoggingProviderImpl
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.logger.UiTestLogger
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
import io.github.kakaocup.compose.intercept.operation.ComposeAction
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt
similarity index 90%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt
index 552cb2669..534ce44d8 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/flakysafety/FlakySafeSemanticsBehaviorInterceptor.kt
@@ -1,8 +1,8 @@
-package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.flakysafety
+package com.kaspersky.components.composesupport.interceptors.behavior.impl.flakysafety
import com.kaspersky.kaspresso.flakysafety.FlakySafetyProvider
import com.kaspersky.kaspresso.flakysafety.FlakySafetyProviderSimpleImpl
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.logger.UiTestLogger
import com.kaspersky.kaspresso.params.FlakySafetyParams
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt
similarity index 91%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt
index d95b1c7e3..13e4f5239 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/behaviorcompose/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/behavior/impl/systemsafety/SystemDialogSafetySemanticsBehaviorInterceptor.kt
@@ -1,8 +1,8 @@
-package com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.systemsafety
+package com.kaspersky.components.composesupport.interceptors.behavior.impl.systemsafety
import com.kaspersky.kaspresso.device.server.AdbServer
import com.kaspersky.kaspresso.instrumental.InstrumentalDependencyProvider
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.logger.UiTestLogger
import com.kaspersky.kaspresso.systemsafety.SystemDialogSafetyProvider
import com.kaspersky.kaspresso.systemsafety.SystemDialogSafetyProviderImpl
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/compose/ComposeSemanticsInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/tolibrary/ComposeSemanticsInterceptor.kt
similarity index 90%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/compose/ComposeSemanticsInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/tolibrary/ComposeSemanticsInterceptor.kt
index 2f71385c5..c0506a9ee 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/compose/ComposeSemanticsInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/tolibrary/ComposeSemanticsInterceptor.kt
@@ -1,8 +1,8 @@
-package com.kaspersky.kaspresso.interceptors.tolibrary.compose
+package com.kaspersky.components.composesupport.interceptors.tolibrary
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.behavior.SemanticsBehaviorInterceptor
+import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptor
-import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
import io.github.kakaocup.compose.intercept.operation.ComposeAction
import io.github.kakaocup.compose.intercept.operation.ComposeAssertion
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/ComposeWatcherInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/ComposeWatcherInterceptor.kt
similarity index 93%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/ComposeWatcherInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/ComposeWatcherInterceptor.kt
index b79da6c08..84ce6cebd 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/ComposeWatcherInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/ComposeWatcherInterceptor.kt
@@ -1,4 +1,4 @@
-package com.kaspersky.kaspresso.interceptors.watcher.compose
+package com.kaspersky.components.composesupport.interceptors.watcher
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/SemanticsWatcherInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/SemanticsWatcherInterceptor.kt
similarity index 64%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/SemanticsWatcherInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/SemanticsWatcherInterceptor.kt
index 2005a8c7e..7b7058728 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/SemanticsWatcherInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/SemanticsWatcherInterceptor.kt
@@ -1,6 +1,5 @@
-package com.kaspersky.kaspresso.interceptors.watcher.compose
+package com.kaspersky.components.composesupport.interceptors.watcher
-import com.kaspersky.kaspresso.interceptors.watcher.kautomator.KautomatorWatcherInterceptor
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
import io.github.kakaocup.compose.intercept.operation.ComposeAction
import io.github.kakaocup.compose.intercept.operation.ComposeAssertion
@@ -10,4 +9,4 @@ import io.github.kakaocup.compose.intercept.operation.ComposeAssertion
* [ComposeInteraction.check] behavior.
*/
interface SemanticsWatcherInterceptor :
- KautomatorWatcherInterceptor
+ ComposeWatcherInterceptor
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/impl/logging/LoggingSemanticsWatcherInterceptor.kt b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/impl/LoggingSemanticsWatcherInterceptor.kt
similarity index 90%
rename from kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/impl/logging/LoggingSemanticsWatcherInterceptor.kt
rename to compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/impl/LoggingSemanticsWatcherInterceptor.kt
index 240586071..a69e21669 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/watcher/compose/impl/logging/LoggingSemanticsWatcherInterceptor.kt
+++ b/compose-support/src/main/java/com/kaspersky/components/composesupport/interceptors/watcher/impl/LoggingSemanticsWatcherInterceptor.kt
@@ -1,6 +1,6 @@
-package com.kaspersky.kaspresso.interceptors.watcher.compose.impl.logging
+package com.kaspersky.components.composesupport.interceptors.watcher.impl
-import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor
+import com.kaspersky.components.composesupport.interceptors.watcher.SemanticsWatcherInterceptor
import com.kaspersky.kaspresso.logger.UiTestLogger
import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
import io.github.kakaocup.compose.intercept.operation.ComposeAction
diff --git a/kaspresso/build.gradle.kts b/kaspresso/build.gradle.kts
index 52a50fdc1..b26c71335 100644
--- a/kaspresso/build.gradle.kts
+++ b/kaspresso/build.gradle.kts
@@ -10,12 +10,10 @@ publish {
dependencies {
api(projects.kautomator)
api(libs.kakao)
- api(libs.kakaoCompose)
api(libs.bundles.espresso)
api(libs.uiAutomator)
api(libs.androidXCore)
api(libs.androidXTestRules)
- api(libs.composeUiTest)
implementation(libs.kotlinStdlib)
implementation(libs.gson)
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt
index 36ecab2b3..d464a4eee 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/compose/pack/ActionsOnElementsPack.kt
@@ -14,10 +14,6 @@ import com.kaspersky.components.kautomator.intercept.operation.UiObjectAction
import com.kaspersky.components.kautomator.intercept.operation.UiObjectAssertion
import com.kaspersky.kaspresso.compose.pack.branch.ComplexComposeBranch
import com.kaspersky.kaspresso.compose.pack.branch.ComplexComposeBranchBuilder
-import io.github.kakaocup.compose.intercept.delegate.ComposeInterceptable
-import io.github.kakaocup.compose.node.action.NodeActions
-import io.github.kakaocup.compose.node.action.TextActions
-import io.github.kakaocup.compose.node.assertion.NodeAssertions
/**
* The builder class for parameters of [com.kaspersky.kaspresso.compose.ComposeProvider.compose] method.
@@ -54,20 +50,6 @@ class ActionsOnElementsPack {
.also { complexComposeBranchBuilders += it }
}
- /**
- * Adds the [element] of type [Type] and the [action] to [complexComposeBranchBuilders] and [action] for future composing
- * where [Type] is bounding by UiBaseView (Kautomator)
- *
- * @param element the interacted view.
- * @param action actions or assertions on the interacted view.
- */
- fun or(element: Type, action: Type.() -> Unit): ComplexComposeBranchBuilder
- where Type : NodeActions, Type : NodeAssertions,
- Type : TextActions, Type : ComposeInterceptable {
- return ComplexComposeBranchBuilder(element, { action.invoke(element) })
- .also { complexComposeBranchBuilders += it }
- }
-
/**
* @return the built parameters for [com.kaspersky.kaspresso.compose.ComposeProvider.compose] method.
*/
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt
index 32d7f2d2a..9d2c1d4a1 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/flakysafety/scalpel/FlakySafeInterceptorScalpel.kt
@@ -6,14 +6,11 @@ import com.kaspersky.kaspresso.interceptors.behavior.WebBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeDataBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeViewBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeWebBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.flakysafety.FlakySafeSemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.DeviceBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.ObjectBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.flakysafety.FlakySafeDeviceBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.flakysafety.FlakySafeObjectBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakao
-import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakaoCompose
import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKautomator
import com.kaspersky.kaspresso.kaspresso.Kaspresso
@@ -33,7 +30,6 @@ internal class FlakySafeInterceptorScalpel(
actionToTakeScalp = {
scalpKakaoInterceptors()
scalpKautomatorInterceptors()
- scalpComposeInterceptors()
}
)
}
@@ -43,8 +39,7 @@ internal class FlakySafeInterceptorScalpel(
kaspresso.dataBehaviorInterceptors.filterIsInstance().isNotEmpty() ||
kaspresso.webBehaviorInterceptors.filterIsInstance().isNotEmpty() ||
kaspresso.objectBehaviorInterceptors.filterIsInstance().isNotEmpty() ||
- kaspresso.deviceBehaviorInterceptors.filterIsInstance().isNotEmpty() ||
- kaspresso.semanticsBehaviorInterceptors.filterIsInstance().isNotEmpty()
+ kaspresso.deviceBehaviorInterceptors.filterIsInstance().isNotEmpty()
private fun scalpKakaoInterceptors() {
val scalpedViewBehaviorInterceptors: List =
@@ -89,17 +84,6 @@ internal class FlakySafeInterceptorScalpel(
)
}
- private fun scalpComposeInterceptors() {
- val scalpedSemanticsBehaviorInterceptors: List =
- kaspresso.semanticsBehaviorInterceptors.filter {
- it !is FlakySafeSemanticsBehaviorInterceptor
- }
- injectKaspressoInKakaoCompose(
- scalpedSemanticsBehaviorInterceptors,
- kaspresso.semanticsWatcherInterceptors
- )
- }
-
fun restoreScalpToLibs() {
scalpelSwitcher.attemptRestoreScalp {
injectKaspressoInKakao(
@@ -118,11 +102,6 @@ internal class FlakySafeInterceptorScalpel(
kaspresso.objectWatcherInterceptors,
kaspresso.deviceWatcherInterceptors
)
-
- injectKaspressoInKakaoCompose(
- kaspresso.semanticsBehaviorInterceptors,
- kaspresso.semanticsWatcherInterceptors
- )
}
}
}
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt
index 1cfcfb46f..dfba84a15 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderFactory.kt
@@ -2,7 +2,7 @@ package com.kaspersky.kaspresso.instrumental
import android.app.Instrumentation
-internal class InstrumentalDependencyProviderFactory {
+class InstrumentalDependencyProviderFactory {
inline fun getComponentProvider(instrumentation: Instrumentation): InstrumentalDependencyProvider =
InstrumentalDependencyProviderImpl(InstrumentalUsage.ComponentLocation(T::class.java.name), instrumentation)
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt
index edee401ea..51dd4f851 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/instrumental/InstrumentalDependencyProviderImpl.kt
@@ -9,7 +9,7 @@ import com.kaspersky.components.kautomator.common.Environment
import com.kaspersky.components.kautomator.common.environment
import com.kaspersky.kaspresso.instrumental.exception.NotSupportedInstrumentalTestException
-internal class InstrumentalDependencyProviderImpl(
+class InstrumentalDependencyProviderImpl(
private val location: InstrumentalUsage,
private val instrumentation: Instrumentation
) : InstrumentalDependencyProvider {
@@ -37,7 +37,7 @@ internal class InstrumentalDependencyProviderImpl(
else throw NotSupportedInstrumentalTestException(location, "UiAutomation")
}
-internal sealed class InstrumentalUsage {
+sealed class InstrumentalUsage {
data class ComponentLocation(val componentName: String) : InstrumentalUsage()
data class InterceptorLocation(val interceptorName: String) : InstrumentalUsage()
object TestLocation : InstrumentalUsage()
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt
index 7e97f9d5c..5070170a6 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptor.kt
@@ -3,7 +3,7 @@ package com.kaspersky.kaspresso.interceptors.tolibrary
/**
* The base class of libraries interceptors (Kakao/UiAutomator/Kakao-Compose) for Kaspresso's implementations
*/
-internal interface LibraryInterceptor {
+interface LibraryInterceptor {
fun interceptCheck(interaction: Interaction, assertion: Assertion)
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt
index 33131737e..993dcfdb7 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/interceptors/tolibrary/LibraryInterceptorsInjector.kt
@@ -5,23 +5,19 @@ import com.kaspersky.components.kautomator.KautomatorConfigurator
import com.kaspersky.kaspresso.interceptors.behavior.DataBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behavior.ViewBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behavior.WebBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.DeviceBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.ObjectBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.tolibrary.compose.ComposeSemanticsInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.kakao.KakaoDataInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.kakao.KakaoViewInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.kakao.KakaoWebInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorDeviceInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorObjectInterceptor
-import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.kautomator.DeviceWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.kautomator.ObjectWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.view.AtomWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.view.ViewActionWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.view.ViewAssertionWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.view.WebAssertionWatcherInterceptor
-import io.github.kakaocup.compose.KakaoCompose
internal object LibraryInterceptorsInjector {
@@ -96,22 +92,4 @@ internal object LibraryInterceptorsInjector {
}
}
}
-
- fun injectKaspressoInKakaoCompose(
- semanticsBehaviorInterceptors: List,
- semanticsWatcherInterceptors: List
- ) {
- val composeInterceptor =
- ComposeSemanticsInterceptor(
- semanticsBehaviorInterceptors,
- semanticsWatcherInterceptors
- )
-
- KakaoCompose.intercept {
- onComposeInteraction {
- onCheck(isOverride = true, interceptor = composeInterceptor::interceptCheck)
- onPerform(isOverride = true, interceptor = composeInterceptor::interceptPerform)
- }
- }
- }
}
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt
index 2776f03a7..9fe723984 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/internal/extensions/other/ThrowableExt.kt
@@ -43,7 +43,7 @@ internal fun List.throwAll() {
/**
* @return true if the given throwable is contained by [allowed] set, false otherwise.
*/
-internal fun T.isAllowed(allowed: Set>): Boolean {
+fun T.isAllowed(allowed: Set>): Boolean {
return when (this) {
is ExtCompositeException -> {
exceptions.find { e: Throwable ->
diff --git a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt
index 8e0b5be13..420323249 100644
--- a/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt
+++ b/kaspresso/src/main/kotlin/com/kaspersky/kaspresso/kaspresso/Kaspresso.kt
@@ -80,12 +80,6 @@ import com.kaspersky.kaspresso.interceptors.behavior.impl.flakysafety.FlakySafeW
import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyDataBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyViewBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behavior.impl.systemsafety.SystemDialogSafetyWebBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.SemanticsBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.autoscroll.AutoScrollSemanticsBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.elementloader.ElementLoaderSemanticsBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.failure.FailureLoggingSemanticsBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.flakysafety.FlakySafeSemanticsBehaviorInterceptor
-import com.kaspersky.kaspresso.interceptors.behaviorcompose.impl.systemsafety.SystemDialogSafetySemanticsBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.DeviceBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.ObjectBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.autoscroll.AutoScrollObjectBehaviorInterceptor
@@ -97,12 +91,9 @@ import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.flakysafety.
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.systemsafety.SystemDialogSafetyDeviceBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.behaviorkautomator.impl.systemsafety.SystemDialogSafetyObjectBehaviorInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakao
-import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKakaoCompose
import com.kaspersky.kaspresso.interceptors.tolibrary.LibraryInterceptorsInjector.injectKaspressoInKautomator
import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorDeviceInterceptor
import com.kaspersky.kaspresso.interceptors.tolibrary.kautomator.KautomatorObjectInterceptor
-import com.kaspersky.kaspresso.interceptors.watcher.compose.SemanticsWatcherInterceptor
-import com.kaspersky.kaspresso.interceptors.watcher.compose.impl.logging.LoggingSemanticsWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.kautomator.DeviceWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.kautomator.ObjectWatcherInterceptor
import com.kaspersky.kaspresso.interceptors.watcher.kautomator.impl.logging.LoggingDeviceWatcherInterceptor
@@ -136,7 +127,6 @@ import com.kaspersky.kaspresso.params.StepParams
import com.kaspersky.kaspresso.params.ScreenshotParams
import com.kaspersky.kaspresso.params.VideoParams
import com.kaspersky.kaspresso.testcases.core.testcontext.BaseTestContext
-import io.github.kakaocup.compose.intercept.interaction.ComposeInteraction
/**
* The storage of all Kaspresso preferences and entities, such as [AdbServer], [Device] and different interceptors.
@@ -154,13 +144,11 @@ data class Kaspresso(
internal val webAssertionWatcherInterceptors: List,
internal val objectWatcherInterceptors: List,
internal val deviceWatcherInterceptors: List,
- internal val semanticsWatcherInterceptors: List,
internal val viewBehaviorInterceptors: List,
internal val dataBehaviorInterceptors: List,
internal val webBehaviorInterceptors: List,
internal val objectBehaviorInterceptors: List,
internal val deviceBehaviorInterceptors: List,
- internal val semanticsBehaviorInterceptors: List,
internal val stepWatcherInterceptors: List,
internal val testRunWatcherInterceptors: List
) {
@@ -344,7 +332,7 @@ data class Kaspresso(
*/
val instrumentation: Instrumentation = InstrumentationRegistry.getInstrumentation()
- private val instrumentalDependencyProviderFactory: InstrumentalDependencyProviderFactory = InstrumentalDependencyProviderFactory()
+ val instrumentalDependencyProviderFactory: InstrumentalDependencyProviderFactory = InstrumentalDependencyProviderFactory()
/**
* Holds an environment state of a test.
@@ -566,14 +554,6 @@ data class Kaspresso(
*/
lateinit var deviceWatcherInterceptors: MutableList
- /**
- * Holds the list of [SemanticsWatcherInterceptor]s.
- * If it was not specified, Kaspresso will use no [SemanticsWatcherInterceptor]s.
- * These interceptors are called by [ComposeSemanticsInterceptor]
- * before actual [ComposeInteraction.check] and [ComposeInteraction.perform] call.
- */
- lateinit var semanticsWatcherInterceptors: MutableList
-
/**
* Holds the list of [ViewBehaviorInterceptor]s.
* If it was not specified, Kaspresso will use no [ViewBehaviorInterceptor]s.
@@ -636,18 +616,6 @@ data class Kaspresso(
*/
lateinit var deviceBehaviorInterceptors: MutableList
- /**
- * Holds the list of [SemanticsBehaviorInterceptor]s.
- * If it was not specified, Kaspresso will use no [SemanticsBehaviorInterceptor]s.
- * These interceptors are called by [ComposeSemanticsInterceptor]
- * before actual [ComposeInteraction.check] and [ComposeInteraction.perform] call.
- * Note that the order of [SemanticsBehaviorInterceptor]s in this list is significant: the first item wil be
- * at the lowest level of intercepting chain, and the last item will be at the highest level.
- * For example: the first item actually wraps the [ComposeInteraction.check] or [ComposeInteraction.perform]
- * call, the second item wraps the first item, and so on.
- */
- lateinit var semanticsBehaviorInterceptors: MutableList
-
/**
* Holds the list of [StepWatcherInterceptor]s.
* If it was not specified, Kaspresso will use no [StepWatcherInterceptor]s.
@@ -856,10 +824,6 @@ data class Kaspresso(
LoggingDeviceWatcherInterceptor(libLogger)
)
- if (!::semanticsWatcherInterceptors.isInitialized) semanticsWatcherInterceptors = mutableListOf(
- LoggingSemanticsWatcherInterceptor(libLogger)
- )
-
if (!::viewBehaviorInterceptors.isInitialized) viewBehaviorInterceptors =
if (isAndroidRuntime) mutableListOf(
AutoScrollViewBehaviorInterceptor(autoScrollParams, libLogger),
@@ -932,28 +896,6 @@ data class Kaspresso(
FailureLoggingDeviceBehaviorInterceptor(libLogger)
)
- if (!::semanticsBehaviorInterceptors.isInitialized) semanticsBehaviorInterceptors =
- if (isAndroidRuntime) {
- mutableListOf(
- AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams),
- SystemDialogSafetySemanticsBehaviorInterceptor(
- libLogger,
- instrumentalDependencyProviderFactory.getInterceptorProvider(instrumentation),
- adbServer
- ),
- ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams),
- FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger),
- FailureLoggingSemanticsBehaviorInterceptor(libLogger)
- )
- } else {
- mutableListOf(
- AutoScrollSemanticsBehaviorInterceptor(libLogger, autoScrollParams),
- ElementLoaderSemanticsBehaviorInterceptor(libLogger, elementLoaderParams),
- FlakySafeSemanticsBehaviorInterceptor(flakySafetyParams, libLogger),
- FailureLoggingSemanticsBehaviorInterceptor(libLogger)
- )
- }
-
if (!::stepWatcherInterceptors.isInitialized) stepWatcherInterceptors = mutableListOf(
LoggingStepWatcherInterceptor(libLogger)
)
@@ -1020,8 +962,6 @@ data class Kaspresso(
objectWatcherInterceptors = objectWatcherInterceptors,
deviceWatcherInterceptors = deviceWatcherInterceptors,
- semanticsWatcherInterceptors = semanticsWatcherInterceptors,
-
viewBehaviorInterceptors = viewBehaviorInterceptors,
dataBehaviorInterceptors = dataBehaviorInterceptors,
webBehaviorInterceptors = webBehaviorInterceptors,
@@ -1029,8 +969,6 @@ data class Kaspresso(
objectBehaviorInterceptors = objectBehaviorInterceptors,
deviceBehaviorInterceptors = deviceBehaviorInterceptors,
- semanticsBehaviorInterceptors = semanticsBehaviorInterceptors,
-
stepWatcherInterceptors = stepWatcherInterceptors,
testRunWatcherInterceptors = testRunWatcherInterceptors
)
@@ -1055,11 +993,6 @@ data class Kaspresso(
kaspresso.deviceWatcherInterceptors
)
- injectKaspressoInKakaoCompose(
- kaspresso.semanticsBehaviorInterceptors,
- kaspresso.semanticsWatcherInterceptors
- )
-
failureHandler?.let { Espresso.setFailureHandler(it) }
return kaspresso
diff --git a/samples/kaspresso-sample/build.gradle.kts b/samples/kaspresso-sample/build.gradle.kts
index 2150996a8..9b9054982 100644
--- a/samples/kaspresso-sample/build.gradle.kts
+++ b/samples/kaspresso-sample/build.gradle.kts
@@ -53,6 +53,7 @@ dependencies {
androidTestImplementation(libs.junit)
androidTestImplementation(projects.kaspresso)
+ androidTestImplementation(projects.composeSupport)
androidTestImplementation(libs.androidXTestRunner)
androidTestImplementation(libs.androidXTestRules)
androidTestImplementation(libs.androidXTestExtJunitKtx)
@@ -61,6 +62,7 @@ dependencies {
testImplementation(libs.junit)
testImplementation(projects.kaspresso)
+ testImplementation(projects.composeSupport)
testImplementation(libs.androidXTestRunner)
testImplementation(libs.androidXTestRules)
testImplementation(libs.androidXTestExtJunitKtx)
diff --git a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt b/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt
index 7589abe00..d857407f4 100644
--- a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt
+++ b/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/ComposeSimpleFlakyTest.kt
@@ -2,9 +2,11 @@ package com.kaspersky.kaspressample.jetpack_compose_tests
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.kaspersky.components.composesupport.withComposeSupport
import com.kaspersky.kaspressample.jetpackcompose.JetpackComposeActivity
import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeMainScreen
import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeSimpleFlakyScreen
+import com.kaspersky.kaspresso.kaspresso.Kaspresso
import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen
import org.junit.Rule
@@ -12,7 +14,9 @@ import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
-class ComposeSimpleFlakyTest : TestCase() {
+class ComposeSimpleFlakyTest : TestCase(
+ kaspressoBuilder = Kaspresso.Builder.withComposeSupport()
+) {
@get:Rule
val composeTestRule = createAndroidComposeRule()
diff --git a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/JetpackComposeSimpleKaspressoComposeTest.kt b/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/JetpackComposeSimpleKaspressoComposeTest.kt
deleted file mode 100644
index 777865670..000000000
--- a/samples/kaspresso-sample/src/sharedTest/kotlin/com/kaspersky/kaspressample/jetpack_compose_tests/JetpackComposeSimpleKaspressoComposeTest.kt
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.kaspersky.kaspressample.jetpack_compose_tests
-
-import androidx.compose.ui.test.junit4.createAndroidComposeRule
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.kaspersky.kaspressample.jetpackcompose.JetpackComposeActivity
-import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeMainScreen
-import com.kaspersky.kaspressample.jetpack_compose_screen.ComposeSimpleFlakyScreen
-import com.kaspersky.kaspresso.testcases.api.testcase.TestCase
-import io.github.kakaocup.compose.node.element.ComposeScreen.Companion.onComposeScreen
-import org.junit.Rule
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@RunWith(AndroidJUnit4::class)
-class JetpackComposeSimpleKaspressoComposeTest : TestCase() {
-
- @get:Rule
- val composeTestRule = createAndroidComposeRule()
-
- private val simpleFlakyScreen = ComposeSimpleFlakyScreen(composeTestRule)
-
- @Test
- fun test() = run {
- step("Open Flaky screen") {
- onComposeScreen(composeTestRule) {
- simpleFlakyButton {
- performClick()
- }
- }
- }
-
- step("Click on the First button") {
- simpleFlakyScreen {
- compose {
- or(firstButton) {
- assertIsDisplayed()
- } thenContinue {
- performClick()
- }
- or(secondButton) {
- assertIsDisplayed()
- } thenContinue {
- performClick()
- }
- }
- }
- }
-
- step("Click on the Second button") {
- simpleFlakyScreen {
- compose {
- or(editText) {
- assertIsDisplayed()
- } thenContinue {
- performClick()
- }
- or(secondButton) {
- assertIsDisplayed()
- } thenContinue {
- performClick()
- }
- }
- }
- }
-
- step("Interaction with EditText") {
- simpleFlakyScreen {
- editText {
- assertIsDisplayed()
- assertTextContains("Some text")
- performTextClearance()
- performTextInput("New text")
- assertTextContains("New text")
- }
- }
- }
- }
-}
diff --git a/settings.gradle.kts b/settings.gradle.kts
index d5ef4d57d..beafad163 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -32,6 +32,7 @@ include(
":kaspresso",
":kautomator",
":allure-support",
+ ":compose-support",
":samples:adbserver-sample",
":samples:kaspresso-sample",