我们能用浓缩咖啡的当前显示活动相应地写下一些条件代码吗?
在我的应用程序中,我们有一个介绍页面,它只显示用户一次,从下一个应用程序直接带用户登录屏幕。我们可以检查哪个屏幕用户登陆,这样我们就可以相应地写下我们的测试用例了。

最佳答案

你可以在我们要检查的布局中放置一个唯一的id。在您描述的示例中,我将放在登录布局中:

<RelativeLayout ...
    android:id="@+id/loginWrapper"
 ...

然后,在测试中,您只需检查是否显示了此ID:
onView(withId(R.id.loginWrapper)).check(matches(isCompletelyDisplayed()));

我不知道是否有更好的方法,但这一个有效。
您还可以使用waitid方法等待一段时间,您可以在网上找到:
/**
 * Perform action of waiting for a specific view id.
 * <p/>
 * E.g.:
 * onView(isRoot()).perform(waitId(R.id.dialogEditor, Sampling.SECONDS_15));
 *
 * @param viewId
 * @param millis
 * @return
 */
public static ViewAction waitId(final int viewId, final long millis) {
    return new ViewAction() {
        @Override
        public Matcher<View> getConstraints() {
            return isRoot();
        }

        @Override
        public String getDescription() {
            return "wait for a specific view with id <" + viewId + "> during " + millis + " millis.";
        }

        @Override
        public void perform(final UiController uiController, final View view) {
            uiController.loopMainThreadUntilIdle();
            final long startTime = System.currentTimeMillis();
            final long endTime = startTime + millis;
            final Matcher<View> viewMatcher = withId(viewId);

            do {
                for (View child : TreeIterables.breadthFirstViewTraversal(view)) {
                    // found view with required ID
                    if (viewMatcher.matches(child)) {
                        return;
                    }
                }

                uiController.loopMainThreadForAtLeast(50);
            }
            while (System.currentTimeMillis() < endTime);

            // timeout happens
            throw new PerformException.Builder()
                .withActionDescription(this.getDescription())
                .withViewDescription(HumanReadables.describe(view))
                .withCause(new TimeoutException())
                .build();
        }
    };
}

使用此方法,您可以执行以下操作,例如:
onView(isRoot()).perform(waitId(R.id.loginWrapper, 5000));

这样,如果登录屏幕出现的时间不超过5秒,测试就不会失败。

关于android - Espresso获取展示 Activity ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38521898/

10-09 13:31