0

私のアプリケーション用のテストケースを書いていますが、マイナーな問題がいくつかあります。ビューの多くがすべてのデータを読み込んで画面に表示するために、多くのテストケースにSystemClock.Sleep呼び出しがあります。しかし、これを行うための睡眠の数はますます増加し、これらのテストの時間はさらに長くなりました。ここでAndriod EspressoのSystemClock.sleepの代替

は、これらのテストの1

@Test 
public void testSearch() { 

    ExtensionForExpresso.signUp(); 

    SystemClock.sleep(17000); 

    onView(withId(R.id.menu_offer_search)).check(matches(isDisplayed())).perform(click()); 

    SystemClock.sleep(5000); 

    onView(withId(R.id.menu_search)).check(matches(isDisplayed())).perform(typeText("Pizza")); 

    SystemClock.sleep(17000); 

    onView(withId(R.id.searchSectionSeeAllButton)).check(matches(isDisplayed())).perform(click()); 

    SystemClock.sleep(15000); 

    onView(withId(R.id.searchResultsRecyclerView)).check(matches(isDisplayed())).perform(RecyclerViewActions.actionOnItemAtPosition(1, click())); 
} 

の例表示されるビューを待つことになる睡眠への代替がありますか?または、私がSystemClock.sleepの呼び出しを減らすために追加できるメソッドや関数はありますか?

多くの感謝:)

答えて

1

まず、adbのシェルを使用して、デバイス/エミュレータ上でアニメーションを無効にするか、あなたのAndroidプロジェクトにエスプレッソアイドリングリソースを実装しよう:http://matgom.com/tutorial/2016/02/21/IdlingResource.html

0

私はIdlingResourceを実装するために、あなたをお勧めしますまずシステムアニメーションを無効にします。システムアニメーションを無効にする最も簡単な方法はthisです。

SystemClock.sleep()メソッドを使用する必要はありません。 waitFor(2); // 2 second wait

public void waitFor(int seconds) { 
     seconds = seconds < 0 ? 0 : seconds; 
      while (--seconds >= 0) { 
       try { 
        Thread.sleep(1000); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
} 

は、次に、あなたのようなあなたのテストでそれを呼び出すことができます。その代わりに、このようなカスタムスリープメソッドを実装することができ