에스프레소의 현재 표시 활동을 적절히 적어도됩니까?에스프레소 표시 활동을 얻으십시오
내 응용 프로그램에는 다음 응용 프로그램에서 사용자를 한 번만 표시하는 소개 페이지가있어 사용자가 직접 로그인 화면을 가져옵니다. 사용자가 착륙 한 화면을 확인할 수 있으므로 테스트 케이스를 적어 둘 수 있습니다.
에스프레소의 현재 표시 활동을 적절히 적어도됩니까?에스프레소 표시 활동을 얻으십시오
내 응용 프로그램에는 다음 응용 프로그램에서 사용자를 한 번만 표시하는 소개 페이지가있어 사용자가 직접 로그인 화면을 가져옵니다. 사용자가 착륙 한 화면을 확인할 수 있으므로 테스트 케이스를 적어 둘 수 있습니다.
확인할 레이아웃에 고유 한 ID를 입력 할 수 있습니다. 시험에 만이 ID가 표시되어 있는지 확인해야
<RelativeLayout ...
android:id="@+id/loginWrapper"
...
다음 : 예에서 내가 로그인 레이아웃에 넣어 것이라고 설명 내가 알고하지 않습니다
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 초 이내에 나타나면 실패하지 않습니다. 내 Espresso
테스트 클래스에서
그래서 여기 내 예제 코드의 내가
mRule.getActivity()
을 사용하여 현재 활동을 얻기 위해, ActivityTestRule
사용
@RunWith(AndroidJUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SettingsActivityTest {
@Rule
public ActivityTestRule<SettingsActivity> mRule = new ActivityTestRule<>(SettingsActivity.class);
@Test
public void checkIfToolbarIsProperlyDisplayed() throws InterruptedException {
onView(withText(R.string.action_settings)).check(matches(withParent(withId(R.id.toolbar))));
onView(withId(R.id.toolbar)).check(matches(isDisplayed()));
Toolbar toolbar = (Toolbar) mRule.getActivity().findViewById(R.id.toolbar);
assertTrue(toolbar.hasExpandedActionView());
}
}
그것이
도움이 될 것입니다 희망