summaryrefslogtreecommitdiffhomepage
path: root/android
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-05-13 00:14:32 +0200
committerDavid Göransson <david.goransson@mullvad.net>2025-05-13 09:51:27 +0200
commite10866a9e07ca806d72abb493b0083cab19f1753 (patch)
tree42cd8cde7d2d34050ee998e5d671098abaae189d /android
parent8ceea62b0b54a3eeed1651ee5d2c1944ed256067 (diff)
downloadmullvadvpn-e10866a9e07ca806d72abb493b0083cab19f1753.tar.xz
mullvadvpn-e10866a9e07ca806d72abb493b0083cab19f1753.zip
Catch nullpointer
Diffstat (limited to 'android')
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/extension/UiAutomatorExtensions.kt14
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/Page.kt4
-rw-r--r--android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/TooManyDevicesPage.kt4
3 files changed, 18 insertions, 4 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 11fc039be9..37c2283962 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
@@ -2,12 +2,14 @@ package net.mullvad.mullvadvpn.test.common.extension
import androidx.test.uiautomator.By
import androidx.test.uiautomator.BySelector
+import androidx.test.uiautomator.StableResult
import androidx.test.uiautomator.StaleObjectException
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 androidx.test.uiautomator.waitForStableInActiveWindow
import co.touchlab.kermit.Logger
import java.lang.Thread.sleep
import java.util.regex.Pattern
@@ -112,3 +114,15 @@ fun UiDevice.acceptVpnPermissionDialog() {
findObjectWithTimeout(By.text("OK")).click()
waitForAppToBeVisible(currentPackageName)
}
+
+fun UiDevice.waitForStableInActiveWindowSafe(): StableResult? =
+ try {
+ // Wait for stable is not very stable, but it is our best best to wait for animation to
+ // settle. For now we will just catch the exception and sleep for a bit and hope for the
+ // best.
+ waitForStableInActiveWindow()
+ } catch (e: Exception) {
+ Logger.e("waitForStableInActiveWindow failed", e)
+ sleep(1000)
+ null
+ }
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/Page.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/Page.kt
index c865fb0e50..e01ab6dec7 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/Page.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/Page.kt
@@ -2,7 +2,7 @@ package net.mullvad.mullvadvpn.test.common.page
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
-import androidx.test.uiautomator.waitForStableInActiveWindow
+import net.mullvad.mullvadvpn.test.common.extension.waitForStableInActiveWindowSafe
sealed class Page {
val uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
@@ -14,7 +14,7 @@ inline fun <reified T : Page> on(scope: T.() -> Unit = {}) {
val page = T::class.java.getConstructor().newInstance()
// Wait for the screen to settle and so we don't proceed with actions too early. Otherwise, we
// might start clicking on the screen before it is in a resumed state.
- page.uiDevice.waitForStableInActiveWindow()
+ page.uiDevice.waitForStableInActiveWindowSafe()
page.assertIsDisplayed()
page.scope()
diff --git a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/TooManyDevicesPage.kt b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/TooManyDevicesPage.kt
index 2f5f8c4133..39ad3cd83a 100644
--- a/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/TooManyDevicesPage.kt
+++ b/android/test/common/src/main/kotlin/net/mullvad/mullvadvpn/test/common/page/TooManyDevicesPage.kt
@@ -1,9 +1,9 @@
package net.mullvad.mullvadvpn.test.common.page
import androidx.test.uiautomator.By
-import androidx.test.uiautomator.waitForStableInActiveWindow
import net.mullvad.mullvadvpn.test.common.extension.expectObjectToDisappearWithTimeout
import net.mullvad.mullvadvpn.test.common.extension.findObjectWithTimeout
+import net.mullvad.mullvadvpn.test.common.extension.waitForStableInActiveWindowSafe
class TooManyDevicesPage internal constructor() : Page() {
private val tooManyDevicesSelector = By.text("Too many devices")
@@ -37,7 +37,7 @@ fun TooManyDevicesPage.removeDeviceFlow(deviceName: String) {
clickRemoveDevice(deviceName)
// Wait for the confirmation dialog to appear
- uiDevice.waitForStableInActiveWindow()
+ uiDevice.waitForStableInActiveWindowSafe()
// Confirm logout
uiDevice.findObjectWithTimeout(By.text("Yes, log out device")).click()