summaryrefslogtreecommitdiffhomepage
path: root/android/e2e/src/main/java
diff options
context:
space:
mode:
authorAlbin <albin@mullvad.net>2022-03-11 10:58:24 +0100
committerAlbin <albin@mullvad.net>2022-04-20 17:52:13 +0200
commit339038cca27828cc060d23f846e3ab6026889af2 (patch)
treedcddf672ff435b2d484f25a4df58eb665809516a /android/e2e/src/main/java
parent83059632cb2998ec71aff242897dea947ae05fb7 (diff)
downloadmullvadvpn-339038cca27828cc060d23f846e3ab6026889af2.tar.xz
mullvadvpn-339038cca27828cc060d23f846e3ab6026889af2.zip
Add Android e2e test to open web link
Diffstat (limited to 'android/e2e/src/main/java')
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/WebLinkTest.kt21
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/ResourceConstants.kt3
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt1
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/BundleExtensions.kt8
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/UiAutomatorExtensions.kt26
-rw-r--r--android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt10
6 files changed, 69 insertions, 0 deletions
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/WebLinkTest.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/WebLinkTest.kt
new file mode 100644
index 0000000000..aaff57de65
--- /dev/null
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/WebLinkTest.kt
@@ -0,0 +1,21 @@
+package net.mullvad.mullvadvpn.e2e
+
+import androidx.test.uiautomator.By
+import net.mullvad.mullvadvpn.e2e.extension.findObjectWithTimeout
+import org.junit.Test
+
+class WebLinkTest : EndToEndTest() {
+ @Test
+ fun testOpenFaqFromApp() {
+ // Given
+ app.launch()
+
+ // When
+ device.findObjectWithTimeout(By.text("Login"))
+ app.clickSettingsCog()
+ app.clickListItemByText("FAQs & Guides")
+
+ // Then
+ device.findObjectWithTimeout(By.text("Mullvad help center"))
+ }
+}
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/ResourceConstants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/ResourceConstants.kt
new file mode 100644
index 0000000000..0263a0b0d6
--- /dev/null
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/ResourceConstants.kt
@@ -0,0 +1,3 @@
+package net.mullvad.mullvadvpn.e2e.constant
+
+const val SETTINGS_COG_ID = "net.mullvad.mullvadvpn:id/settings"
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt
index 6ede2d3048..09b2986ea1 100644
--- a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/constant/TimeoutConstants.kt
@@ -1,3 +1,4 @@
package net.mullvad.mullvadvpn.e2e.constant
const val APP_LAUNCH_TIMEOUT = 5000L
+const val DEFAULT_INTERACTION_TIMEOUT = 3000L
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/BundleExtensions.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/BundleExtensions.kt
new file mode 100644
index 0000000000..275bd0b9c7
--- /dev/null
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/BundleExtensions.kt
@@ -0,0 +1,8 @@
+package net.mullvad.mullvadvpn.e2e.extension
+
+import android.os.Bundle
+
+fun Bundle.getRequiredArgument(argument: String): String {
+ return getString(argument)
+ ?: throw IllegalArgumentException("Missing required argument: $argument")
+}
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/UiAutomatorExtensions.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/UiAutomatorExtensions.kt
new file mode 100644
index 0000000000..8c7dd16cee
--- /dev/null
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/extension/UiAutomatorExtensions.kt
@@ -0,0 +1,26 @@
+package net.mullvad.mullvadvpn.e2e.extension
+
+import androidx.test.uiautomator.BySelector
+import androidx.test.uiautomator.UiDevice
+import androidx.test.uiautomator.UiObject2
+import androidx.test.uiautomator.Until
+import net.mullvad.mullvadvpn.e2e.constant.DEFAULT_INTERACTION_TIMEOUT
+
+fun UiDevice.findObjectWithTimeout(
+ selector: BySelector,
+ timeout: Long = DEFAULT_INTERACTION_TIMEOUT
+): UiObject2 {
+
+ wait(
+ Until.hasObject(selector),
+ timeout
+ )
+
+ return try {
+ findObject(selector)
+ } catch (e: NullPointerException) {
+ throw IllegalArgumentException(
+ "No matches for selector within timeout ($timeout): $selector"
+ )
+ }
+}
diff --git a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt
index 79cc234503..8270f27c9e 100644
--- a/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt
+++ b/android/e2e/src/main/java/net/mullvad/mullvadvpn/e2e/interactor/AppInteractor.kt
@@ -7,6 +7,8 @@ import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.Until
import net.mullvad.mullvadvpn.e2e.constant.APP_LAUNCH_TIMEOUT
import net.mullvad.mullvadvpn.e2e.constant.MULLVAD_PACKAGE
+import net.mullvad.mullvadvpn.e2e.constant.SETTINGS_COG_ID
+import net.mullvad.mullvadvpn.e2e.extension.findObjectWithTimeout
class AppInteractor(
private val device: UiDevice,
@@ -30,4 +32,12 @@ class AppInteractor(
APP_LAUNCH_TIMEOUT
)
}
+
+ fun clickSettingsCog() {
+ device.findObjectWithTimeout(By.res(SETTINGS_COG_ID)).click()
+ }
+
+ fun clickListItemByText(text: String) {
+ device.findObjectWithTimeout(By.text(text)).click()
+ }
}