Unload snippet after actions have been done
PiperOrigin-RevId: 594135259
diff --git a/ui_automator/ui_automator.py b/ui_automator/ui_automator.py
index f351812..a9fab62 100644
--- a/ui_automator/ui_automator.py
+++ b/ui_automator/ui_automator.py
@@ -139,14 +139,15 @@
try:
self.load_device()
self.load_snippet()
+ return func(self, *args, **kwargs)
except (
errors.AdbError,
errors.AndroidDeviceNotReadyError,
errors.NoAndroidDeviceError,
) as e:
raise errors.AndroidDeviceNotReadyError(f'{func.__name__} failed.') from e
-
- return func(self, *args, **kwargs)
+ finally:
+ self.unload_snippet()
return wrapped_func
@@ -235,6 +236,13 @@
# has been loaded.
self._logger.debug(str(e))
+ def unload_snippet(self) -> None:
+ """Unloads loaded mobly snippet on connected android device."""
+ if not self._connected_device:
+ return
+
+ self._connected_device.unload_snippet(_MOBLY_SNIPPET_APK_NAME)
+
@get_android_device_ready
def commission_device(
self,
diff --git a/ui_automator/ui_automator_test.py b/ui_automator/ui_automator_test.py
index 7e5cdef..c03b179 100644
--- a/ui_automator/ui_automator_test.py
+++ b/ui_automator/ui_automator_test.py
@@ -350,6 +350,22 @@
_FAKE_MATTER_DEVICE_NAME, _FAKE_PAIRING_CODE, _FAKE_GHA_ROOM
)
+ @mock.patch.object(ui_automator.UIAutomator, 'unload_snippet', autospec=True)
+ @mock.patch.object(android_device, 'get_all_instances', autospec=True)
+ def test_get_android_device_ready_calls_unload_snippet_on_finish(
+ self, mock_get_all_instances, mock_unload_snippet
+ ):
+ mock_get_all_instances.return_value = [self.mock_android_device]
+
+ @ui_automator.get_android_device_ready
+ def decorated_function(self):
+ del self
+ pass
+
+ decorated_function(self.ui_automator)
+
+ mock_unload_snippet.assert_called_once()
+
@mock.patch.object(android_device, 'get_all_instances', autospec=True)
def test_commission_device_calls_a_method_in_snippet_with_desired_args(
self, mock_get_all_instances