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

はそれが

を助けることを願っています
関連する問題