【问题标题】:How to tell if a new activity appeared?如何判断是否出现了新活动?
【发布时间】:2015-06-04 14:36:40
【问题描述】:

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

1 - 创建新活动时

2 - 知道是否是第一次创建活动

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

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

因此,我想知道:

  • 是否可以以编程方式检测新活动?如果是这样,有可能知道这是不是第一次发生活动。

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

谢谢。

编辑:为了清楚起见,我不想测试创建活动时会发生什么,我希望能够确定它是否是第一次在运行中发生此活动.

【问题讨论】:

  • 澄清一下,因为您说的是黑盒测试,我假设您实际上无法访问您正在测试的应用程序的源代码,对吧?
  • 完全正确(只是完全不足以添加评论 xD)
  • Black-box testing 臭气熏天的reverse engineering。已重命名。
  • 您的测试自动化能否模拟旋转设备?这不是最好的方法,但是在设备方向更改后(取决于代码如何处理配置更改),通常必须销毁并重新创建焦点活动。如果您知道目标活动将在设备方向更改后重新创建,则您可以在应用重绘该活动后运行测试。 Activity.onStart() 将在内容首次可见时被调用; Activity.onResume() 将在用户可以与应用交互时调用。不知道这是否有帮助。祝你好运!
  • @DerGolem,你为什么这么说? -.-

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


【解决方案1】:

这是我目前针对这个问题实现的,基于一个假设,即同一个 Activity 不会动态改变它的 UI 视图层次结构。这对我来说没问题,似乎我只想区分 UI 更改,而不是活动所必需的。

1.建立一个签名来识别屏幕之间的关系

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

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

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

思路参考这个paper

如果 adb 对你没问题,你可以使用这个命令,

adb shell dumpsys activity

这个参考另一个帖子here

【讨论】:

  • 我最终做了类似的事情。我保存屏幕中存在的元素,然后将其与屏幕的不同读数进行比较。我忽略对可编辑字段的任何更改(编辑框、复选框……)
猜你喜欢
  • 2018-11-26
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2011-11-15
  • 2010-10-05
  • 2017-06-30
  • 1970-01-01
相关资源
最近更新 更多