diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9607278d47..c8f9844c9b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -293,6 +293,12 @@ dependencies { testImplementation(libs.robolectric.robolectric) testImplementation(libs.square.okhttp.mockwebserver) testImplementation(libs.square.turbine) + androidTestImplementation(libs.androidx.uiautomator) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(libs.androidx.junit.ktx) + androidTestImplementation(libs.androidx.ui.test.junit4.android) + androidTestImplementation("androidx.test:runner:1.6.0") + androidTestImplementation("androidx.test:rules:1.6.0") } tasks { diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index d4963ef3c0..b291901c0c 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -121,3 +121,14 @@ -dontwarn com.google.errorprone.annotations.CheckReturnValue -dontwarn com.google.errorprone.annotations.Immutable -dontwarn com.google.errorprone.annotations.RestrictedApi + +################################################################################ +# AndroidX Test Runner +################################################################################ + +# Keep the test runner classes +-keep class androidx.test.runner.** { *; } +-keep class androidx.test.internal.runner.** { *; } +-keep class androidx.test.ext.junit.** { *; } +-keep class androidx.test.ext.** { *; } +-keep class androidx.test.** { *; } diff --git a/app/src/androidTest/kotlin/e2e/pageObjects/Page.kt b/app/src/androidTest/kotlin/e2e/pageObjects/Page.kt index ab3ffc1418..53d43f0f9c 100644 --- a/app/src/androidTest/kotlin/e2e/pageObjects/Page.kt +++ b/app/src/androidTest/kotlin/e2e/pageObjects/Page.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.test.performClick */ abstract class Page(protected val composeTestRule: ComposeTestRule) { companion object { - val TIMEOUT_MILLIS = 15000L + val TIMEOUT_MILLIS = 30000L } /** diff --git a/app/src/androidTest/kotlin/e2e/tests/RealDeviceE2ETests.kt b/app/src/androidTest/kotlin/e2e/tests/RealDeviceE2ETests.kt index 55a8dc517c..5a728cc3a6 100644 --- a/app/src/androidTest/kotlin/e2e/tests/RealDeviceE2ETests.kt +++ b/app/src/androidTest/kotlin/e2e/tests/RealDeviceE2ETests.kt @@ -1,7 +1,10 @@ package e2e.tests import androidx.compose.ui.test.* +import androidx.compose.ui.test.junit4.ComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.junit4.createEmptyComposeRule +import androidx.test.ext.junit.rules.ActivityScenarioRule import androidx.test.ext.junit.runners.AndroidJUnit4 import com.x8bit.bitwarden.MainActivity import e2e.pageObjects.login.MainPage @@ -13,7 +16,11 @@ import org.junit.runner.RunWith class RealDeviceE2ETests { @get:Rule - val composeTestRule = createAndroidComposeRule() + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + // Workaround to find Compose UI elements on Espresso tests + @get:Rule + val composeTestRule: ComposeTestRule = createEmptyComposeRule() @Test fun testVaultLockUnlockFlow() {