2016-07-22 6 views
1

에스프레소의 현재 표시 활동을 적절히 적어도됩니까?에스프레소 표시 활동을 얻으십시오

내 응용 프로그램에는 다음 응용 프로그램에서 사용자를 한 번만 표시하는 소개 페이지가있어 사용자가 직접 로그인 화면을 가져옵니다. 사용자가 착륙 한 화면을 확인할 수 있으므로 테스트 케이스를 적어 둘 수 있습니다.

답변

1

확인할 레이아웃에 고유 한 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 테스트 클래스에서

0

그래서 여기 내 예제 코드의 내가

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()); 
    } 
} 

그것이

도움이 될 것입니다 희망
관련 문제