android - 如何判断是否出现了新的 Activity ?

标签 android android-activity android-uiautomator black-box-testing

我正在做一些黑盒测试(顺便说一句,使用 UiAutomator 2.0,扩展 InstrumentationTestCase),我需要知道:

1 - 创建新 Activity 时

2 - 了解是否是第一次创建 Activity

我需要这个,因为当出现新 Activity 时我想应用一些测试,但我希望此检测是自动的,而不是手动的。

在 Android L 之前,存在 UiDevice.getCurrentActivityName() 方法。然而,现在它已被弃用(此外,他们甚至不确保它适用于以前的版本)。通过 PackageManager 获取 Activity 的选项也会发生这种情况。

因此,我想知道:

  • 是否可以通过编程方式检测新 Activity ?如果是这样,就可以知道该 Activity 是否是第一次发生。

  • 如果不可能,我应该如何根据 Activity 的 UI 定义它?我应该更改多少个小部件才能断定这是不同的 Activity ?

谢谢。

编辑:需要明确的是,我不想测试创建 Activity 时会发生什么,我希望能够确定这是否是此 Activity 在运行中第一次发生.

最佳答案

这是我目前针对此问题实现的方法,基于相同的 Activity 不会动态更改其 UI View 层次结构的假设。这对我来说没问题,似乎我只想区分 UI 更改,而不是 Activity 所必需的。

1.构建屏幕间识别签名

signature1:FrameLayout;ListView;LinearLayout;RelativeLayout;...
signature2:FrameLayout;FrameLayout;FrameLayout;LinearLayout;...

2.然后,使用列表来保留您已知的屏幕。

3.为了性能,您可以使用固定长度的屏幕签名。

思路引用这个paper

如果 adb 适合你,你可以使用这个命令,

adb shell dumpsys activity

这引用了另一篇文章here

关于android - 如何判断是否出现了新的 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646827/

相关文章:

java - 如何平滑地每秒增加一个数字?

java - super.onSaveInstanceState() 在重写的 onSaveInstanceState() 中做了什么

机器人 : How to work around the fact that a singleInstance activity cannot expect to rely onActivityResult when starting subActivity?

spinner - 如何使用 appium 从混合应用程序的下拉列表中选择值?

android - 在我的 uiautomator 测试中,有什么比 sleep 更好的解决方法?

java - 将图像加载为文件

java - 来自 View 适配器的无条件布局膨胀 : Should use View Holder pattern -crash the app

android - 带有 '#' 的 Intent 过滤器 pathPrefix 不起作用

Android - 从 Activity 向上导航到 Fragment

android - 一个 Android 应用程序可以通过 UI Automator 控制另一个应用程序吗?