我正在測試包含多項活動的應用程序的快樂路徑。爲了簡單起見,假設我有三項活動。如何在進行網絡操作之前問Espresso運行UI測試?
- 沒有在第一個活動一個按鈕,我可以點擊它(通過咖啡)
- 秒活動是基於什麼數據的第一項活動,並通過向服務器發送一個請求創建的預訂對象。如果服務器返回成功則顯示第三個活動。
- 顯示第三個活動,讓用戶現在預訂成功。
我的問題是在第二個步驟:
{
...
// first activity
onView(withId(R.id.btnBooking)).perform(click());
// second activity
secondActivity_checkInitialViewsState();
// third activity
thirdActivity_checkInitialViewsState();
}
private void secondActivity_checkInitialViewsState()
{
// viewsMustBeVisible
onView(withId(R.id.title)).check(matches(isCompletelyDisplayed())); // <= Error
onView(withId(R.id.sonarView)).check(matches(isCompletelyDisplayed()));
onView(withId(R.id.cancelBooking)).check(matches(isCompletelyDisplayed()));
onView(withId(R.id.listView)).check(matches(isDisplayed()));
// viewsMustBeEnabled
onView(withId(R.id.tvNoServiceFound)).check(matches(not(isCompletelyDisplayed())));
onView(withId(R.id.tvNextSearch)).check(matches(not(isCompletelyDisplayed())));
}
我越來越運行測試後,下面我的日誌錯誤:
android.support.test.espresso.NoMatchingViewException:在 層次結構中找不到匹配的視圖:with id:com.my.package:id/title如果 目標視圖不是視圖層次結構的一部分,則可能需要使用 Espresso.onData從其中一個fol降低 AdapterViews:com.google.maps.api.android.lib6.e.n {291fbd0f G.ED..C。 ......我。 0,0-0,0}
背後的原因是(我認爲至少)咖啡框架等待在當前消息隊列UI事件處理和默認AsyncTasks完成它移動到下一個前測試操作並且不使用任何時間同步。因此,一旦我的後端發送sucess
,應用程序將顯示第三個屏幕,而Espresso嘗試運行secondActivity_checkInitialViewsState()
並顯示錯誤。
所以我的問題是,有沒有什麼辦法可以讓Espresso先運行這個方法(即使在不同的線程中)。
感謝您的觀點@trevor。我實際上是按照你所建議的方式開始的,但是它有很多困難,包括冗餘代碼,比如每個活動都有'intended',每個活動都有依賴注入等。所以我決定模擬用戶在應用中做什麼。通過這種方式,我創建並完全按照用戶的操作方式進行對象並在活動中傳遞此對象,並在每個屏幕中檢查預訂對象的狀態。這有助於我們輕鬆找到錯誤,儘管您建議的方式有其自身的優勢。 – Hesam