如您所知,android在android N中提供了Multi-Window support mode。我们的应用程序具有多窗口支持
但是如何测试呢?如何强制测试在该模式下运行应用程序?我没有在Instrumentation
类或文档中的任何其他地方创建任何此类方法。也许用 Espresso 以某种方式可能吗?
答案 0 :(得分:3)
来自 Launch New Activities in Multi-Window Mode :
当您启动新活动时,如果可能,您可以向系统提示新活动应与当前活动相邻显示。为此,请使用意图标记 FLAG_ACTIVITY_LAUNCH_ADJACENT 。
来自Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT的文档:
此标志仅用于分屏多窗口模式。新活动将显示在启动它的旁边。这只能与 FLAG_ACTIVITY_NEW_TASK 一起使用。此外,如果您想要创建现有活动的新实例,则需要设置 FLAG_ACTIVITY_MULTIPLE_TASK 。
如图所示here如何启动受测试的活动:
@Configuration
public class ObjectMapperConfiguration {
@Autowired
public void configureObjectMapper(ObjectMapper mapper) {
SimpleModule module = new SimpleModule()
.addDeserializer(Account.class, new AccountDeserializer())
.addDeserializer(Contact.class, new ContactDeserializer());
mapper.registerModule(module);
}
}
注意,这是基于文档的猜测,还没试过。虽然,在我看来你必须首先启动一个“假”活动,并从那里开始在多窗口模式下测试活动,因为“新活动将显示在< strong>启动它的那个“,所以应该有另一个活动用指定的@Test
public void customIntentToStartActivity() {
Intent intent = new Intent(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT)
| Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity = mActivityRule.launchActivity(intent);
}
标志启动它。
答案 1 :(得分:2)
不幸的是provided by azizbekian方式要求以前以多窗口模式加载的应用程序,所以我想提供自己的解决方案。在answer我找到了如何以编程方式进入多窗口模式。使用它我构建了完整的解决方案:
UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation();
//enter multi-window mode
uiAutomation.performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN);
//wait for completion, unfortunately waitForIdle doesn't applicable here
Thread.sleep(1000);
//simulate selection of our activity
MotionEvent motionDown = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN,
150, 200, 0);
motionDown.setSource(InputDevice.SOURCE_TOUCHSCREEN);
uiAutomation.injectInputEvent(motionDown, true);
motionDown.recycle();
MotionEvent motionUp = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_UP,
150, 200, 0);
motionUp.setSource(InputDevice.SOURCE_TOUCHSCREEN);
uiAutomation.injectInputEvent(motionUp, true);
motionUp.recycle();
//perform test actions below
如您所见,有两种解决方法:
uiAutomation.waitForIdle
等待进入多模式完成实施后,您将能够像往常一样使用Espresso等测试活动。