summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-05-11 22:54:25 +0200
committerDavid Göransson <david.goransson@mullvad.net>2025-05-13 09:51:27 +0200
commit8ceea62b0b54a3eeed1651ee5d2c1944ed256067 (patch)
tree112c41fae28867537453d7d8b1778b0851b495bf
parent3a7029e28bef6406f9a03a42afd1db341f3b0391 (diff)
downloadmullvadvpn-8ceea62b0b54a3eeed1651ee5d2c1944ed256067.tar.xz
mullvadvpn-8ceea62b0b54a3eeed1651ee5d2c1944ed256067.zip
Avoid waiting for stable when active window is switched
NullPointerException was probably caused by the active window being changing while we called `waitForStableInActiveWindow`.
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt8
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/SystemVpnConfigurationAlert.kt16
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt14
-rw-r--r--android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt8
4 files changed, 19 insertions, 27 deletions
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
index c14be06208..11fc039be9 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt
@@ -7,6 +7,7 @@ import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
import androidx.test.uiautomator.UiObject2Condition
import androidx.test.uiautomator.Until
+import androidx.test.uiautomator.waitForAppToBeVisible
import co.touchlab.kermit.Logger
import java.lang.Thread.sleep
import java.util.regex.Pattern
@@ -104,3 +105,10 @@ fun UiObject2.findObjectWithTimeout(
)
}
}
+
+fun UiDevice.acceptVpnPermissionDialog() {
+ findObjectWithTimeout(By.text("Connection request"))
+ // Accept Creating the VPN Permission profile
+ findObjectWithTimeout(By.text("OK")).click()
+ waitForAppToBeVisible(currentPackageName)
+}
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/SystemVpnConfigurationAlert.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/SystemVpnConfigurationAlert.kt
deleted file mode 100644
index 046d6e8197..0000000000
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/SystemVpnConfigurationAlert.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package net.mullvad.mullvadvpn.test.common.page
-
-import androidx.test.uiautomator.By
-import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
-
-class SystemVpnConfigurationAlert internal constructor() : Page() {
- private val okSelector = By.text("OK")
-
- override fun assertIsDisplayed() {
- uiDevice.findObjectWithTimeout(okSelector)
- }
-
- fun clickOk() {
- uiDevice.findObjectWithTimeout(okSelector).click()
- }
-}
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt
index 0908d8f4ed..0d0f3d6262 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/ConnectionTest.kt
@@ -4,10 +4,10 @@ import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.delay
import kotlinx.coroutines.test.runTest
import net.mullvad.mullvadvpn.test.common.constant.EXTREMELY_LONG_TIMEOUT
+import net.mullvad.mullvadvpn.test.common.extension.acceptVpnPermissionDialog
import net.mullvad.mullvadvpn.test.common.page.ConnectPage
import net.mullvad.mullvadvpn.test.common.page.SelectLocationPage
import net.mullvad.mullvadvpn.test.common.page.SettingsPage
-import net.mullvad.mullvadvpn.test.common.page.SystemVpnConfigurationAlert
import net.mullvad.mullvadvpn.test.common.page.VpnSettingsPage
import net.mullvad.mullvadvpn.test.common.page.disableObfuscationStory
import net.mullvad.mullvadvpn.test.common.page.enableLocalNetworkSharingStory
@@ -42,7 +42,7 @@ class ConnectionTest : EndToEndTest() {
on<ConnectPage> { clickConnect() }
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
on<ConnectPage> { waitForConnectedLabel() }
}
@@ -54,7 +54,7 @@ class ConnectionTest : EndToEndTest() {
on<ConnectPage> { clickConnect() }
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
var outIpv4Address = ""
@@ -84,7 +84,7 @@ class ConnectionTest : EndToEndTest() {
clickLocationCell(DEFAULT_RELAY)
}
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
var relayIpAddress: String? = null
@@ -121,7 +121,7 @@ class ConnectionTest : EndToEndTest() {
clickLocationCell(DEFAULT_RELAY)
}
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
var relayIpAddress: String? = null
@@ -173,7 +173,7 @@ class ConnectionTest : EndToEndTest() {
clickLocationCell(DEFAULT_RELAY)
}
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
var relayIpAddress: String? = null
@@ -222,7 +222,7 @@ class ConnectionTest : EndToEndTest() {
on<ConnectPage> { clickConnect() }
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
// Ensure it is not possible to connect to relay
on<ConnectPage> {
diff --git a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt
index 0ccc42e80b..3d5eb70cfa 100644
--- a/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt
+++ b/android/test/e2e/src/main/kotlin/net/mullvad/mullvadvpn/test/e2e/LeakTest.kt
@@ -3,11 +3,11 @@ package net.mullvad.mullvadvpn.test.e2e
import kotlin.time.Duration.Companion.milliseconds
import kotlinx.coroutines.delay
import kotlinx.coroutines.test.runTest
+import net.mullvad.mullvadvpn.test.common.extension.acceptVpnPermissionDialog
import net.mullvad.mullvadvpn.test.common.misc.Attachment
import net.mullvad.mullvadvpn.test.common.page.ConnectPage
import net.mullvad.mullvadvpn.test.common.page.SelectLocationPage
import net.mullvad.mullvadvpn.test.common.page.SettingsPage
-import net.mullvad.mullvadvpn.test.common.page.SystemVpnConfigurationAlert
import net.mullvad.mullvadvpn.test.common.page.VpnSettingsPage
import net.mullvad.mullvadvpn.test.common.page.WireGuardCustomPortDialog
import net.mullvad.mullvadvpn.test.common.page.disableObfuscationStory
@@ -78,7 +78,7 @@ class LeakTest : EndToEndTest() {
clickLocationCell(DEFAULT_RELAY)
}
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
on<ConnectPage> { waitForConnectedLabel() }
@@ -126,7 +126,7 @@ class LeakTest : EndToEndTest() {
clickLocationCell(DEFAULT_RELAY)
}
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
on<ConnectPage> { waitForConnectedLabel() }
@@ -183,7 +183,7 @@ class LeakTest : EndToEndTest() {
clickLocationCell(DAITA_COMPATIBLE_RELAY)
}
- on<SystemVpnConfigurationAlert> { clickOk() }
+ device.acceptVpnPermissionDialog()
on<ConnectPage> { waitForConnectedLabel() }