diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt index 881855d37f..a6c3e1d4c9 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SmokeTest.kt @@ -15,15 +15,14 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.mozilla.fenix.R +import org.mozilla.fenix.ext.settings 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 import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource -import org.mozilla.fenix.ui.robots.clickUrlbar -import org.mozilla.fenix.ui.robots.homeScreen -import org.mozilla.fenix.ui.robots.navigationToolbar +import org.mozilla.fenix.ui.robots.* /** * Test Suite that contains tests defined as part of the Smoke and Sanity check defined in Test rail. @@ -35,6 +34,7 @@ class SmokeTest { private lateinit var mockWebServer: MockWebServer private var awesomeBar: ViewVisibilityIdlingResource? = null private var searchSuggestionsIdlingResource: RecyclerViewIdlingResource? = null + private var addonsListIdlingResource: RecyclerViewIdlingResource? = null // This finds the dialog fragment child of the homeFragment, otherwise the awesomeBar would return null private fun getAwesomebarView(): View? { @@ -59,6 +59,18 @@ class SmokeTest { @After fun tearDown() { mockWebServer.shutdown() + + if (awesomeBar != null) { + IdlingRegistry.getInstance().unregister(awesomeBar!!) + } + + if (searchSuggestionsIdlingResource != null) { + IdlingRegistry.getInstance().unregister(searchSuggestionsIdlingResource!!) + } + + if (addonsListIdlingResource != null) { + IdlingRegistry.getInstance().unregister(addonsListIdlingResource!!) + } } // copied over from HomeScreenTest @@ -490,4 +502,41 @@ class SmokeTest { verifyUnblockedByAndroid() } } + + // Installs uBlock add-on and checks that the app doesn't crash while loading pages with trackers + @Test + fun noCrashWithAddonInstalledTest() { + //setting ETP to Strict mode to test it works with add-ons + activityTestRule.activity.settings().setStrictETP() + + val addonName = "uBlock Origin" + val trackingProtectionPage = + TestAssetHelper.getEnhancedTrackingProtectionAsset(mockWebServer) + + homeScreen { + }.openThreeDotMenu { + }.openAddonsManagerMenu { + addonsListIdlingResource = + RecyclerViewIdlingResource( + activityTestRule.activity.findViewById(R.id.add_ons_list), + 1 + ) + IdlingRegistry.getInstance().register(addonsListIdlingResource!!) + clickInstallAddon(addonName) + acceptInstallAddon() + verifyDownloadAddonPrompt(addonName, activityTestRule) + IdlingRegistry.getInstance().unregister(addonsListIdlingResource!!) + }.goBack { + }.openNavigationToolbar { + }.enterURLAndEnterToBrowser(trackingProtectionPage.url){} + enhancedTrackingProtection { + verifyEnhancedTrackingProtectionNotice() + }.closeNotificationPopup {} + + browserScreen { + }.openThreeDotMenu { + }.openReportSiteIssue { + verifyUrl("webcompat.com/issues/new") + } + } } diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt index bbcd60285c..e4e5768e43 100644 --- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt +++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt @@ -251,6 +251,13 @@ class ThreeDotMenuMainRobot { return HomeScreenRobot.Transition() } + fun openReportSiteIssue(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition { + reportSiteIssueButton().click() + + BrowserRobot().interact() + return BrowserRobot.Transition() + } + fun openFindInPage(interact: FindInPageRobot.() -> Unit): FindInPageRobot.Transition { onView(withId(R.id.mozac_browser_menu_recyclerView)).perform(ViewActions.swipeDown()) mDevice.waitNotNull(Until.findObject(By.text("Find in page")), waitingTime) @@ -444,6 +451,8 @@ private fun collectionNameTextField() = private fun assertCollectionNameTextField() = collectionNameTextField() .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) +private fun reportSiteIssueButton() = onView(withText("Report Site Issue…")) + private fun findInPageButton() = onView(allOf(withText("Find in page"))) private fun assertFindInPageButton() = findInPageButton()