如何通过UIAutomator2获取activity名称?
How to obtain activity name through UIAutomator2?
我正在为 Android 应用构建一些通用测试工具并尝试获取 activity 名称(例如 com.android.calculator/.Calculator
,com.android.calculator
可以通过 UiDevice.currentPackageName
,痛苦来自第二部分)在测试期间。也就是说,我的工具可能会测试与我的不在同一个包中的其他应用程序。例如,测试股票计算器应用程序。
以下是我的尝试列表:
UiDevice.currentActivityName
已弃用,它没有提供准确的信息
InstrumentationRegistry.getInstrumentation().targetContext.getSystemService<ActivityManager>()
,然后访问 ActivityManager.getRunningTasks(1).get(0).topActivity
,它总是 returns 相同的值,即使视图已切换(这也已弃用)
- 与 2 类似,我尝试了
ActivityManager.getAppTasks().get(0).getTaskInfo().topActivity
,但这一直给我 null
ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(RESUMED)
。这给了我一个空的集合
Application.ActivityLifecycleCallbacks
。我在应用程序中注册了它,但没有收到回调。
- (有点效果,但不完美)使用
adb dumpsys activity
然后在那里找到它。但是这样我必须等待任意时间直到视图更新,否则结果仍然不准确
所以我现在正处于死胡同中,感谢在此问题上的任何帮助。我尽量避免反射,因为据我所知它不适用于较新的设备。所以任何线索将不胜感激。
由于没有发布答案,我想分享一下我目前的策略,它并不完美,但有点帮助。
所以首先,由于 UiDevice.getActivityName
已弃用,我只能通过 adb 获取 activity 名称。具体来说,我对低于 28 的 API 使用 adb shell dumpsys activity top
,否则使用 adb shell dumpsys activity activities
。
然后我订阅了 AccessibilityEventListener
回调。具体来说,每当我收到类型为 AccessibilityEvent.TYPE_WINDOWS_CHANGED
的回调时,我都会 运行 adb 命令。您可以使用此方法设置 AccessibilityEventListener:setOnAccessibilityEventListener
我正在为 Android 应用构建一些通用测试工具并尝试获取 activity 名称(例如 com.android.calculator/.Calculator
,com.android.calculator
可以通过 UiDevice.currentPackageName
,痛苦来自第二部分)在测试期间。也就是说,我的工具可能会测试与我的不在同一个包中的其他应用程序。例如,测试股票计算器应用程序。
以下是我的尝试列表:
UiDevice.currentActivityName
已弃用,它没有提供准确的信息InstrumentationRegistry.getInstrumentation().targetContext.getSystemService<ActivityManager>()
,然后访问ActivityManager.getRunningTasks(1).get(0).topActivity
,它总是 returns 相同的值,即使视图已切换(这也已弃用)- 与 2 类似,我尝试了
ActivityManager.getAppTasks().get(0).getTaskInfo().topActivity
,但这一直给我 null ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(RESUMED)
。这给了我一个空的集合Application.ActivityLifecycleCallbacks
。我在应用程序中注册了它,但没有收到回调。- (有点效果,但不完美)使用
adb dumpsys activity
然后在那里找到它。但是这样我必须等待任意时间直到视图更新,否则结果仍然不准确
所以我现在正处于死胡同中,感谢在此问题上的任何帮助。我尽量避免反射,因为据我所知它不适用于较新的设备。所以任何线索将不胜感激。
由于没有发布答案,我想分享一下我目前的策略,它并不完美,但有点帮助。
所以首先,由于 UiDevice.getActivityName
已弃用,我只能通过 adb 获取 activity 名称。具体来说,我对低于 28 的 API 使用 adb shell dumpsys activity top
,否则使用 adb shell dumpsys activity activities
。
然后我订阅了 AccessibilityEventListener
回调。具体来说,每当我收到类型为 AccessibilityEvent.TYPE_WINDOWS_CHANGED
的回调时,我都会 运行 adb 命令。您可以使用此方法设置 AccessibilityEventListener:setOnAccessibilityEventListener