如何判断是否出现了新的活动?涉及IT技术。

3
我正在进行一些黑盒测试(使用UiAutomator 2.0,扩展InstrumentationTestCase),我需要知道以下内容:
1 - 新活动何时创建
2 - 知道它是否是第一次创建活动
我需要这样做是因为有一些测试我想在新的活动出现时应用,但我希望这种检测是自动的,而不是手动的。
在Android L之前,有UiDevice.getCurrentActivityName()方法。然而,现在它已被弃用(而且,他们甚至不能保证它适用于以前的版本)。这也发生在通过PackageManager获取活动的选项上。
因此,我想知道:
1. 是否可以编程方式检测新活动?如果可以,是否可能知道它是否是第一次发生该活动。
2. 如果不可能,我应该如何根据其UI定义一个活动?多少个小部件应更改,才能得出这是不同的活动?
谢谢。
编辑:仅为明确起见,我不想测试活动创建时会发生什么,我想能够识别是否是该运行中首次出现此活动。

只是为了澄清,因为你说黑盒测试,我假设你实际上没有访问你正在测试的应用程序的源代码,对吗? - Chamatake-san
你的测试自动化能模拟旋转设备吗?这并不是最好的方法,但是当设备方向改变时,焦点活动通常需要被销毁和重新创建(取决于代码如何处理配置更改)。如果你知道目标活动将在设备方向更改后重新创建,你可以在应用程序重新绘制该活动后运行测试。Activity.onStart()将在第一次可见时被调用; Activity.onResume()将在用户可以与应用程序交互时被调用。不知道是否有帮助。祝你好运! - Chamatake-san
@DerGolem,你为什么这样说?-.- - Inês
@Chamatake先生,我对测试活动的更改不感兴趣。我想要能够检测到这是第一次运行此活动。 - Inês
因为它真的很糟糕。非常糟糕。 - Phantômaxx
显示剩余4条评论
1个回答

0

这是我目前为解决这个问题所实现的,基于一个假设:同一活动不会动态更改其UI视图层次结构。对我来说这是可以接受的,因为我只想区分UI更改,而不是必须针对活动进行区分。

1.建立一个签名以识别屏幕之间的差异

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

2. 接下来,使用一个列表来保存你已知的屏幕。

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

这个想法参考了这篇论文

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

adb shell dumpsys activity

这指的是另一篇文章在这里


我最终做了类似于这样的事情。我保存屏幕上的元素,然后将其与屏幕的不同读取进行比较。而且我忽略可编辑字段(编辑框,复选框等)的任何更改。 - Inês

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接