diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt index 4add929b9..19464c018 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/HistoryTest.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.ui import android.content.Context import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu +import androidx.test.espresso.IdlingRegistry import kotlinx.coroutines.runBlocking import mozilla.components.browser.storage.sync.PlacesHistoryStorage import okhttp3.mockwebserver.MockWebServer @@ -13,8 +14,10 @@ import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test +import org.mozilla.fenix.R import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityTestRule +import org.mozilla.fenix.helpers.RecyclerViewIdlingResource import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestHelper.longTapSelectItem import org.mozilla.fenix.ui.robots.historyMenu @@ -30,6 +33,7 @@ import org.mozilla.fenix.ui.robots.navigationToolbar class HistoryTest { /* ktlint-disable no-blank-line-before-rbrace */ // This imposes unreadable grouping. private lateinit var mockWebServer: MockWebServer + private var historyListIdlingResource: RecyclerViewIdlingResource? = null @get:Rule val activityTestRule = HomeActivityTestRule() @@ -52,6 +56,10 @@ class HistoryTest { runBlocking { historyStorage.deleteEverything() } + + if (historyListIdlingResource != null) { + IdlingRegistry.getInstance().unregister(historyListIdlingResource!!) + } } @Test @@ -74,6 +82,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) verifyHistoryMenuView() verifyVisitedTimeTitle() verifyFirstTestPageTitle("Test_Page_1") @@ -90,6 +101,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) }.openThreeDotMenu { }.clickCopy { verifyCopySnackBarText() @@ -105,6 +119,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) }.openThreeDotMenu { }.clickShare { verifyShareOverlay() @@ -123,6 +140,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) }.openThreeDotMenu { }.clickOpenInNormalTab { verifyUrl(firstWebPage.url.toString()) @@ -140,6 +160,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) }.openThreeDotMenu { }.clickOpenInPrivateTab { verifyUrl(firstWebPage.url.toString()) @@ -157,7 +180,11 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) }.openThreeDotMenu { + IdlingRegistry.getInstance().unregister(historyListIdlingResource!!) }.clickDelete { verifyDeleteSnackbarText("Deleted") verifyEmptyHistoryView() @@ -173,7 +200,11 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) clickDeleteHistoryButton() + IdlingRegistry.getInstance().unregister(historyListIdlingResource!!) verifyDeleteConfirmationMessage() confirmDeleteAllHistory() verifyDeleteSnackbarText("Browsing data deleted") @@ -190,6 +221,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) longTapSelectItem(firstWebPage.url) } @@ -216,6 +250,9 @@ class HistoryTest { homeScreen { }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) longTapSelectItem(firstWebPage.url) openActionBarOverflowOrOptionsMenu(activityTestRule.activity) } @@ -236,6 +273,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) longTapSelectItem(firstWebPage.url) openActionBarOverflowOrOptionsMenu(activityTestRule.activity) } @@ -259,9 +299,13 @@ class HistoryTest { }.submitQuery(secondWebPage.url.toString()) { }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list), 1) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) longTapSelectItem(firstWebPage.url) longTapSelectItem(secondWebPage.url) openActionBarOverflowOrOptionsMenu(activityTestRule.activity) + IdlingRegistry.getInstance().unregister(historyListIdlingResource!!) } multipleSelectionToolbar { @@ -282,6 +326,9 @@ class HistoryTest { mDevice.waitForIdle() }.openThreeDotMenu { }.openHistory { + historyListIdlingResource = + RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.history_list)) + IdlingRegistry.getInstance().register(historyListIdlingResource!!) longTapSelectItem(firstWebPage.url) } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt index f25e14492..85f67ec7f 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SearchRobot.kt @@ -29,10 +29,12 @@ import androidx.test.uiautomator.UiObject import androidx.test.uiautomator.UiSelector import androidx.test.uiautomator.Until import org.hamcrest.CoreMatchers.allOf +import org.hamcrest.CoreMatchers.anyOf import org.hamcrest.CoreMatchers.startsWith import org.hamcrest.Matchers import org.junit.Assert.assertEquals import org.mozilla.fenix.R +import org.mozilla.fenix.helpers.SessionLoadedIdlingResource import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.click @@ -122,6 +124,7 @@ class SearchRobot { class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + private lateinit var sessionLoadedIdlingResource: SessionLoadedIdlingResource fun dismiss(interact: HomeScreenRobot.() -> Unit): HomeScreenRobot.Transition { mDevice.waitForIdle() @@ -139,9 +142,20 @@ class SearchRobot { } fun submitQuery(query: String, interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + sessionLoadedIdlingResource = SessionLoadedIdlingResource() mDevice.waitForIdle() browserToolbarEditView().perform(typeText(query + "\n")) + runWithIdleRes(sessionLoadedIdlingResource) { + onView( + anyOf( + ViewMatchers.withResourceName("browserLayout"), + ViewMatchers.withResourceName("onboarding_message") // Req ETP dialog + ) + ) + .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) + } + BrowserRobot().interact() return BrowserRobot.Transition() }