0

我正在爲我的應用程序編寫測試用例,但是遇到了一些小問題。我的許多測試用例中都有SystemClock.Sleep調用,以便視圖加載所有數據並將其顯示在屏幕上。然而,睡眠的次數越來越多,導致這些測試的時間更長。Andriod Espresso中SystemClock.sleep的替代方案

下面是這些測試

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

是否有睡眠的替代方案,將等待視圖出現的一個例子嗎?或者我可以添加哪些方法或功能來減少撥打電話的數量?

非常感謝:)

回答

0

我建議你實現一個IdlingResource並首先禁用系統動畫。禁用系統動畫的最簡單方法是this

沒有必要使用SystemClock.sleep()方法。相反,你可以實現一個自定義的睡眠方法是這樣的:

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

然後,你可以把它在您的測試,如:waitFor(2); // 2 second wait