我正在编写一个需要直接从启动器启动应用程序的测试。因为我无法通过意图启动来正确模拟它。
问题在于,当我在一个新的模拟器上运行测试时(我正在使用Travis CI,但它可以很容易地在我的家用PC上重现),模拟器以"第一次运行"迎宾覆盖。这会阻止我的uiautomator代码正确启动应用程序。
我试图添加一些代码来关闭那个欢迎,但不幸的是,当我的" greeter检测到并关闭时,它会出现一些延迟。代码已经停止工作,认为海岸线是清晰的。
是否有任何保证禁用该招手的方法?可能会有一些偏好,或者只是一个能够可靠地杀死欢迎的代码示例。
答案 0 :(得分:1)
您是否尝试过使用PackageManager.getLaunchIntentForPackage(..)?这将允许您发送启动程序用于启动应用程序的相同Intent。它应该等同于点击应用程序的启动器图标。
如果您确实需要通过启动器,可以使用UiWatcher关闭首次运行的叠加层。每当UiAutomator找不到元素时,它会为每个注册的UiWatcher调用checkForCondition(..)方法,并让你有机会忽略任何阻碍的对话框或对话框。
答案 1 :(得分:0)
显然,迎宾员被称为" cling"。搜索(相当旧)代码我发现了以下内容:
private boolean isClingsEnabled() {
// TEMPORARY: DISABLE CLINGS ON LARGE UI
if (LauncherApplication.isScreenLarge()) return false;
// disable clings when running in a test harness
if(ActivityManager.isRunningInTestHarness()) return false;
return true;
}
下一站是isRunningInTestHarness()
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.2_r1/android/app/ActivityManager.java#ActivityManager.isRunningInTestHarness%28%29
public static boolean isRunningInTestHarness() {
return SystemProperties.getBoolean("ro.test_harness", false);
}
反过来导致adb shell setprop ro.test_harness true
。这才有效。