使用Espresso我尝试使用Home按钮测试将活动发送到后台,然后再次将其放到前台进行一些检查:
@EspressoTest
public void test() {
onSomeView().check(matches(isDisplayed()));
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);
Context context = getInstrumentation().getTargetContext();
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
onSomeView().check(matches(isDisplayed()));
}
我必须使用异常建议的intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
,但除此之外我还测试过,将其作为Launcher Activity启动,或者使用
FLAG_ACTIVITY_REORDER_TO_FRONT
,但视图不可见。即使测试通过了。
答案 0 :(得分:7)
好的我明白了。首先,有必要使用getActivity提供的Activity Context,然后我可以使用intents在后台和前台发送活动,使用HOME类和FLAG_ACTIVITY_REORDER_TO_FRONT:
private void goHome(Activity activity) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
activity.startActivity(intent);
}
private void bringToForeground(Activity activity) {
Intent intent = new Intent(activity, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
activity.startActivity(intent);
}
@EspressoTest
public void test() {
//do some ui stuff to ensure the activity is up and running
goHome(getActivity());
// eventually sleep, or implement an idling resource
bringToForeground(getActivity());
// do some ui tests
}
答案 1 :(得分:5)
请考虑此响应,因为它可以100%正常工作 goBackgroundByClickingHomeThenGetBackToTheApp。
UiDevice device = UiDevice.getInstance(getInstrumentation());
device.pressHome();
device.pressRecentApps();
device.findObject(new UiSelector().text(getTargetContext().getString(getTargetContext().getApplicationInfo().labelRes)))
.click();
答案 2 :(得分:1)
您可以使用UI Automator执行此操作(您可以同时使用espresso和UI Automator)。
sudo kill -9 `ps -ef|grep -i uiauto|awk '{print $2}'`
这使我的应用程序背景并将其带到前台