Loading app/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -482,7 +482,7 @@ dependencies { androidTestImplementation Deps.uiautomator // Removed pending AndroidX fixes // androidTestImplementation "tools.fastlane:screengrab:1.2.0" androidTestImplementation "tools.fastlane:screengrab:2.0.0" // androidTestImplementation "br.com.concretesolutions:kappuccino:1.2.1" androidTestImplementation Deps.espresso_core, { Loading app/src/androidTest/java/org/mozilla/fenix/screenshots/DefaultHomeScreenTest.kt 0 → 100644 +52 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.screenshots import androidx.test.rule.ActivityTestRule import org.junit.After import org.junit.Rule import org.junit.Test import org.mozilla.fenix.helpers.HomeActivityTestRule import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.mDevice import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.locale.LocaleTestRule class DefaultHomeScreenTest : ScreenshotTest() { @Rule @JvmField val localeTestRule = LocaleTestRule() @get:Rule var mActivityTestRule: ActivityTestRule<HomeActivity> = HomeActivityTestRule() @After fun tearDown() { mActivityTestRule.getActivity().finishAndRemoveTask() } @Test fun showDefaultHomeScreen() { homeScreen { verifyAccountsSignInButton() Screengrab.screenshot("HomeScreenRobot_home-screen") swipeToBottom() Screengrab.screenshot("HomeScreenRobot_home-screen-scroll") } } @Test fun privateBrowsingTest() { homeScreen { }.openThreeDotMenu { }.openSettings { } // To get private screenshot, // dismiss onboarding going to settings and back mDevice.pressBack() homeScreen { togglePrivateBrowsingModeOnOff() Screengrab.screenshot("HomeScreenRobot_private-browsing-menu") } } } app/src/androidTest/java/org/mozilla/fenix/screenshots/MenuScreenShotTest.kt 0 → 100644 +223 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.screenshots import androidx.test.espresso.Espresso.onView import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.rule.ActivityTestRule import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.locale.LocaleTestRule import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityTestRule import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.click import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.bookmarksMenu import org.mozilla.fenix.ui.robots.mDevice import org.mozilla.fenix.ui.robots.navigationToolbar import org.mozilla.fenix.ui.robots.swipeToBottom class MenuScreenShotTest : ScreenshotTest() { private lateinit var mockWebServer: MockWebServer @Rule @JvmField val localeTestRule = LocaleTestRule() @get:Rule var mActivityTestRule: ActivityTestRule<HomeActivity> = HomeActivityTestRule() @Before fun setUp() { mockWebServer = MockWebServer().apply { setDispatcher(AndroidAssetDispatcher()) start() } } @After fun tearDown() { mActivityTestRule.getActivity().finishAndRemoveTask() mockWebServer.shutdown() } @Test fun threeDotMenuTest() { homeScreen { }.openThreeDotMenu { Screengrab.screenshot("ThreeDotMenuMainRobot_three-dot-menu") } } @Test fun settingsTest() { homeScreen { }.openThreeDotMenu { }.openSettings { Screengrab.screenshot("SettingsRobot_settings-menu") settingsAccountPreferences() Screengrab.screenshot("AccountSettingsRobot_settings-account") mDevice.pressBack() settingsSearch() Screengrab.screenshot("SettingsSubMenuSearchRobot_settings-search") mDevice.pressBack() settingsTheme() Screengrab.screenshot("SettingsSubMenuThemeRobot_settings-theme") mDevice.pressBack() settingsAccessibility() Screengrab.screenshot("SettingsSubMenuAccessibilityRobot_settings-accessibility") mDevice.pressBack() settingDefaultBrowser() Screengrab.screenshot("SettingsSubMenuDefaultBrowserRobot_settings-default-browser") mDevice.pressBack() settingsToolbar() Screengrab.screenshot("SettingsSubMenuDefaultBrowserRobot_settings-toolbar") mDevice.pressBack() // Need to find a way to swipe only a little to get all the options in all screensizes // settingsTP() // Screengrab.screenshot("settings-enhanced-tp") // mDevice.pressBack() // Need to find a way to swipe only a little to get all the options in all screensizes // settingsAddToHomeScreen() // Screengrab.screenshot("settings-add-to-homescreen") // mDevice.pressBack() // Wee need this but this way not going to work in other languages. Need a workaround to not use Sleep // mDevice.waitNotNull(Until.findObjects(By.text("Delete browsing data on quit")), TestAssetHelper.waitingTime) // settingsRemoveData() // Screengrab.screenshot("settings-delete-browsing-data") // device.pressBack() swipeToBottom() Screengrab.screenshot("SettingsRobot_settings-scroll-to-bottom") settingsTelemetry() Screengrab.screenshot("settings-telemetry") } } @Test fun historyTest() { homeScreen { }.openThreeDotMenu { } openHistoryThreeDotMenu() Screengrab.screenshot("HistoryRobot_history-menu") } @Test fun bookmarksManagementTest() { homeScreen { }.openThreeDotMenu { } openBookmarksThreeDotMenu() Screengrab.screenshot("BookmarksRobot_bookmarks-menu") bookmarksMenu { clickAddFolderButton() Screengrab.screenshot("BookmarksRobot_add-folder-view") saveNewFolder() Screengrab.screenshot("BookmarksRobot_error-empty-folder-name") addNewFolderName("test") saveNewFolder() }.openThreeDotMenu { Screengrab.screenshot("ThreeDotMenuBookmarksRobot_folder-menu") } editBookmarkFolder() Screengrab.screenshot("ThreeDotMenuBookmarksRobot_edit-bookmark-folder-menu") // It may be needed to wait here to have the screenshot mDevice.pressBack() bookmarksMenu { }.openThreeDotMenu { deleteBookmarkFolder() Screengrab.screenshot("ThreeDotMenuBookmarksRobot_delete-bookmark-folder-menu") } } @Test fun collectionMenuTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) navigationToolbar { Screengrab.screenshot("NavigationToolbarRobot_navigation-toolbar") }.enterURLAndEnterToBrowser(defaultWebPage.url) { Screengrab.screenshot("BrowserRobot_enter-url") } tapOnTabCounter() // Homescreen with visited tabs Screengrab.screenshot("HomeScreenRobot_homescreen-with-tabs-open") homeScreen { }.openTabsListThreeDotMenu { Screengrab.screenshot("open-tabs-menu") }.close { // It may be needed to wait here for tests working on Firebase saveToCollectionButton() Screengrab.screenshot("HomeScreenRobot_save-collection-view") typeCollectionName("CollectionName") mDevice.pressBack() // It may be needed to wait here for tests working on Firebase Screengrab.screenshot("HomeScreenRobot_saved-collection") } } @Test fun tabMenuTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) navigationToolbar { }.enterURLAndEnterToBrowser(defaultWebPage.url) { }.openThreeDotMenu { Screengrab.screenshot("browser-tab-menu") }.closeBrowserMenuToBrowser { }.openHomeScreen { Screengrab.screenshot("homescree-with-tabs") closeTab() Screengrab.screenshot("remove-tab") } } } fun openHistoryThreeDotMenu() = onView(withText(R.string.library_history)).click() fun openBookmarksThreeDotMenu() = onView(withText(R.string.library_bookmarks)).click() fun editBookmarkFolder() = onView(withText(R.string.bookmark_menu_edit_button)).click() fun deleteBookmarkFolder() = onView(withText(R.string.bookmark_menu_delete_button)).click() fun saveToCollectionButton() = onView(withId(R.id.save_tab_group_button)).click() fun tapOnTabCounter() = onView(withId(R.id.counter_text)).click() fun settingsAccountPreferences() = onView(withText(R.string.preferences_sync)).click() fun settingsSearch() = onView(withText(R.string.preferences_search)).click() fun settingsTheme() = onView(withText(R.string.preferences_theme)).click() fun settingsAccessibility() = onView(withText(R.string.preferences_accessibility)).click() fun settingDefaultBrowser() = onView(withText(R.string.preferences_set_as_default_browser)).click() fun settingsToolbar() = onView(withText(R.string.preferences_toolbar)).click() fun settingsTP() = onView(withText(R.string.preference_enhanced_tracking_protection)).click() fun settingsAddToHomeScreen() = onView(withText(R.string.preferences_add_private_browsing_shortcut)).click() fun settingsRemoveData() = onView(withText(R.string.preferences_delete_browsing_data)).click() fun settingsTelemetry() = onView(withText(R.string.preferences_data_collection)).click() app/src/androidTest/java/org/mozilla/fenix/screenshots/ScreenshotTest.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.screenshots; import android.Manifest; import android.app.Instrumentation; import android.content.Context; import androidx.annotation.StringRes; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.rule.GrantPermissionRule; import androidx.test.uiautomator.UiDevice; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TestRule; import org.junit.rules.TestWatcher; import org.junit.runner.Description; import tools.fastlane.screengrab.Screengrab; import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy; /** * Base class for tests that take screenshots. */ public abstract class ScreenshotTest { private Context targetContext; UiDevice device; @Rule public GrantPermissionRule permissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE); @Rule public TestRule screenshotOnFailureRule = new TestWatcher() { @Override protected void failed(Throwable e, Description description) { // On error take a screenshot so that we can debug it easily Screengrab.screenshot("FAILURE-" + getScreenshotName(description)); } private String getScreenshotName(Description description) { return description.getClassName().replace(".", "-") + "_" + description.getMethodName().replace(".", "-"); } }; @Before public void setUpScreenshots() { Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); targetContext = instrumentation.getTargetContext(); device = UiDevice.getInstance(instrumentation); // Use this to switch between default strategy and HostScreencap strategy Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy()); } String getString(@StringRes int resourceId) { return targetContext.getString(resourceId).trim(); } String getString(@StringRes int resourceId, Object... formatArgs) { return targetContext.getString(resourceId, formatArgs).trim(); } public void takeScreenshotsAfterWait(String filename, int waitingTime) throws InterruptedException { Thread.sleep(waitingTime); Screengrab.screenshot(filename); } } app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +17 −10 Original line number Diff line number Diff line Loading @@ -15,9 +15,7 @@ import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.Visibility import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility import androidx.test.espresso.matcher.ViewMatchers.hasFocus import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.Until import androidx.test.uiautomator.By Loading @@ -30,7 +28,7 @@ import org.hamcrest.Matchers.containsString import org.mozilla.fenix.R import org.mozilla.fenix.helpers.click import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.click import org.mozilla.fenix.helpers.ext.waitNotNull /** * Implementation of Robot Pattern for the home screen menu. Loading Loading @@ -87,23 +85,23 @@ class HomeScreenRobot { // Collections element fun clickCollectionThreeDotButton() { collectionThreeDotButton().click() mDevice.wait(Until.findObject(By.text("Delete collection")), waitingTime) mDevice.waitNotNull(Until.findObject(By.text("Delete collection")), waitingTime) } fun selectRenameCollection() { onView(allOf(ViewMatchers.withText("Rename collection"))).click() mDevice.wait(Until.findObject(By.res("org.mozilla.fenix.debug:id/name_collection_edittext")), waitingTime) mDevice.waitNotNull(Until.findObject(By.res("name_collection_edittext"))) } fun selectDeleteCollection() { onView(allOf(ViewMatchers.withText("Delete collection"))).click() mDevice.wait(Until.findObject(By.res("message")), waitingTime) mDevice.waitNotNull(Until.findObject(By.res("message")), waitingTime) } fun confirmDeleteCollection() { onView(allOf(ViewMatchers.withText("DELETE"))).click() mDevice.wait(Until.findObject(By.res("org.mozilla.fenix.debug:id/collections_header")), waitingTime) mDevice.waitNotNull(Until.findObject(By.res("collections_header")), waitingTime) } fun typeCollectionName(name: String) { mDevice.wait(Until.findObject(By.res("org.mozilla.fenix.debug:id/name_collection_edittext")), waitingTime) collectionNameTextField().check(matches(hasFocus())) mDevice.wait(Until.findObject(By.res("name_collection_edittext")), waitingTime) collectionNameTextField().perform(ViewActions.replaceText(name)) collectionNameTextField().perform(ViewActions.pressImeActionButton()) } Loading @@ -120,6 +118,15 @@ class HomeScreenRobot { closeTabButton().click() } fun togglePrivateBrowsingModeOnOff() { onView(ViewMatchers.withResourceName("privateBrowsingButton")) .perform(click()) } fun swipeToBottom() = onView(ViewMatchers.withId(R.id.home_component)).perform(ViewActions.swipeUp()) fun swipeToTop() = onView(ViewMatchers.withId(R.id.home_component)).perform(ViewActions.swipeDown()) class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) Loading Loading @@ -361,4 +368,4 @@ private fun tabsListThreeDotButton() = onView(allOf(ViewMatchers.withId(R.id.tab private fun collectionThreeDotButton() = onView(allOf(ViewMatchers.withId(R.id.collection_overflow_button))) private fun collectionNameTextField() = onView(allOf(ViewMatchers.withResourceName("name_collection_edittext"), hasFocus())) private fun collectionNameTextField() = onView(allOf(ViewMatchers.withResourceName("name_collection_edittext"))) Loading
app/build.gradle +2 −2 Original line number Diff line number Diff line Loading @@ -482,7 +482,7 @@ dependencies { androidTestImplementation Deps.uiautomator // Removed pending AndroidX fixes // androidTestImplementation "tools.fastlane:screengrab:1.2.0" androidTestImplementation "tools.fastlane:screengrab:2.0.0" // androidTestImplementation "br.com.concretesolutions:kappuccino:1.2.1" androidTestImplementation Deps.espresso_core, { Loading
app/src/androidTest/java/org/mozilla/fenix/screenshots/DefaultHomeScreenTest.kt 0 → 100644 +52 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.screenshots import androidx.test.rule.ActivityTestRule import org.junit.After import org.junit.Rule import org.junit.Test import org.mozilla.fenix.helpers.HomeActivityTestRule import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.mDevice import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.locale.LocaleTestRule class DefaultHomeScreenTest : ScreenshotTest() { @Rule @JvmField val localeTestRule = LocaleTestRule() @get:Rule var mActivityTestRule: ActivityTestRule<HomeActivity> = HomeActivityTestRule() @After fun tearDown() { mActivityTestRule.getActivity().finishAndRemoveTask() } @Test fun showDefaultHomeScreen() { homeScreen { verifyAccountsSignInButton() Screengrab.screenshot("HomeScreenRobot_home-screen") swipeToBottom() Screengrab.screenshot("HomeScreenRobot_home-screen-scroll") } } @Test fun privateBrowsingTest() { homeScreen { }.openThreeDotMenu { }.openSettings { } // To get private screenshot, // dismiss onboarding going to settings and back mDevice.pressBack() homeScreen { togglePrivateBrowsingModeOnOff() Screengrab.screenshot("HomeScreenRobot_private-browsing-menu") } } }
app/src/androidTest/java/org/mozilla/fenix/screenshots/MenuScreenShotTest.kt 0 → 100644 +223 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.screenshots import androidx.test.espresso.Espresso.onView import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.rule.ActivityTestRule import tools.fastlane.screengrab.Screengrab import tools.fastlane.screengrab.locale.LocaleTestRule import okhttp3.mockwebserver.MockWebServer import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.HomeActivityTestRule import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.click import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.bookmarksMenu import org.mozilla.fenix.ui.robots.mDevice import org.mozilla.fenix.ui.robots.navigationToolbar import org.mozilla.fenix.ui.robots.swipeToBottom class MenuScreenShotTest : ScreenshotTest() { private lateinit var mockWebServer: MockWebServer @Rule @JvmField val localeTestRule = LocaleTestRule() @get:Rule var mActivityTestRule: ActivityTestRule<HomeActivity> = HomeActivityTestRule() @Before fun setUp() { mockWebServer = MockWebServer().apply { setDispatcher(AndroidAssetDispatcher()) start() } } @After fun tearDown() { mActivityTestRule.getActivity().finishAndRemoveTask() mockWebServer.shutdown() } @Test fun threeDotMenuTest() { homeScreen { }.openThreeDotMenu { Screengrab.screenshot("ThreeDotMenuMainRobot_three-dot-menu") } } @Test fun settingsTest() { homeScreen { }.openThreeDotMenu { }.openSettings { Screengrab.screenshot("SettingsRobot_settings-menu") settingsAccountPreferences() Screengrab.screenshot("AccountSettingsRobot_settings-account") mDevice.pressBack() settingsSearch() Screengrab.screenshot("SettingsSubMenuSearchRobot_settings-search") mDevice.pressBack() settingsTheme() Screengrab.screenshot("SettingsSubMenuThemeRobot_settings-theme") mDevice.pressBack() settingsAccessibility() Screengrab.screenshot("SettingsSubMenuAccessibilityRobot_settings-accessibility") mDevice.pressBack() settingDefaultBrowser() Screengrab.screenshot("SettingsSubMenuDefaultBrowserRobot_settings-default-browser") mDevice.pressBack() settingsToolbar() Screengrab.screenshot("SettingsSubMenuDefaultBrowserRobot_settings-toolbar") mDevice.pressBack() // Need to find a way to swipe only a little to get all the options in all screensizes // settingsTP() // Screengrab.screenshot("settings-enhanced-tp") // mDevice.pressBack() // Need to find a way to swipe only a little to get all the options in all screensizes // settingsAddToHomeScreen() // Screengrab.screenshot("settings-add-to-homescreen") // mDevice.pressBack() // Wee need this but this way not going to work in other languages. Need a workaround to not use Sleep // mDevice.waitNotNull(Until.findObjects(By.text("Delete browsing data on quit")), TestAssetHelper.waitingTime) // settingsRemoveData() // Screengrab.screenshot("settings-delete-browsing-data") // device.pressBack() swipeToBottom() Screengrab.screenshot("SettingsRobot_settings-scroll-to-bottom") settingsTelemetry() Screengrab.screenshot("settings-telemetry") } } @Test fun historyTest() { homeScreen { }.openThreeDotMenu { } openHistoryThreeDotMenu() Screengrab.screenshot("HistoryRobot_history-menu") } @Test fun bookmarksManagementTest() { homeScreen { }.openThreeDotMenu { } openBookmarksThreeDotMenu() Screengrab.screenshot("BookmarksRobot_bookmarks-menu") bookmarksMenu { clickAddFolderButton() Screengrab.screenshot("BookmarksRobot_add-folder-view") saveNewFolder() Screengrab.screenshot("BookmarksRobot_error-empty-folder-name") addNewFolderName("test") saveNewFolder() }.openThreeDotMenu { Screengrab.screenshot("ThreeDotMenuBookmarksRobot_folder-menu") } editBookmarkFolder() Screengrab.screenshot("ThreeDotMenuBookmarksRobot_edit-bookmark-folder-menu") // It may be needed to wait here to have the screenshot mDevice.pressBack() bookmarksMenu { }.openThreeDotMenu { deleteBookmarkFolder() Screengrab.screenshot("ThreeDotMenuBookmarksRobot_delete-bookmark-folder-menu") } } @Test fun collectionMenuTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) navigationToolbar { Screengrab.screenshot("NavigationToolbarRobot_navigation-toolbar") }.enterURLAndEnterToBrowser(defaultWebPage.url) { Screengrab.screenshot("BrowserRobot_enter-url") } tapOnTabCounter() // Homescreen with visited tabs Screengrab.screenshot("HomeScreenRobot_homescreen-with-tabs-open") homeScreen { }.openTabsListThreeDotMenu { Screengrab.screenshot("open-tabs-menu") }.close { // It may be needed to wait here for tests working on Firebase saveToCollectionButton() Screengrab.screenshot("HomeScreenRobot_save-collection-view") typeCollectionName("CollectionName") mDevice.pressBack() // It may be needed to wait here for tests working on Firebase Screengrab.screenshot("HomeScreenRobot_saved-collection") } } @Test fun tabMenuTest() { val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) navigationToolbar { }.enterURLAndEnterToBrowser(defaultWebPage.url) { }.openThreeDotMenu { Screengrab.screenshot("browser-tab-menu") }.closeBrowserMenuToBrowser { }.openHomeScreen { Screengrab.screenshot("homescree-with-tabs") closeTab() Screengrab.screenshot("remove-tab") } } } fun openHistoryThreeDotMenu() = onView(withText(R.string.library_history)).click() fun openBookmarksThreeDotMenu() = onView(withText(R.string.library_bookmarks)).click() fun editBookmarkFolder() = onView(withText(R.string.bookmark_menu_edit_button)).click() fun deleteBookmarkFolder() = onView(withText(R.string.bookmark_menu_delete_button)).click() fun saveToCollectionButton() = onView(withId(R.id.save_tab_group_button)).click() fun tapOnTabCounter() = onView(withId(R.id.counter_text)).click() fun settingsAccountPreferences() = onView(withText(R.string.preferences_sync)).click() fun settingsSearch() = onView(withText(R.string.preferences_search)).click() fun settingsTheme() = onView(withText(R.string.preferences_theme)).click() fun settingsAccessibility() = onView(withText(R.string.preferences_accessibility)).click() fun settingDefaultBrowser() = onView(withText(R.string.preferences_set_as_default_browser)).click() fun settingsToolbar() = onView(withText(R.string.preferences_toolbar)).click() fun settingsTP() = onView(withText(R.string.preference_enhanced_tracking_protection)).click() fun settingsAddToHomeScreen() = onView(withText(R.string.preferences_add_private_browsing_shortcut)).click() fun settingsRemoveData() = onView(withText(R.string.preferences_delete_browsing_data)).click() fun settingsTelemetry() = onView(withText(R.string.preferences_data_collection)).click()
app/src/androidTest/java/org/mozilla/fenix/screenshots/ScreenshotTest.java 0 → 100644 +73 −0 Original line number Diff line number Diff line /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.fenix.screenshots; import android.Manifest; import android.app.Instrumentation; import android.content.Context; import androidx.annotation.StringRes; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.rule.GrantPermissionRule; import androidx.test.uiautomator.UiDevice; import org.junit.Before; import org.junit.Rule; import org.junit.rules.TestRule; import org.junit.rules.TestWatcher; import org.junit.runner.Description; import tools.fastlane.screengrab.Screengrab; import tools.fastlane.screengrab.UiAutomatorScreenshotStrategy; /** * Base class for tests that take screenshots. */ public abstract class ScreenshotTest { private Context targetContext; UiDevice device; @Rule public GrantPermissionRule permissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE); @Rule public TestRule screenshotOnFailureRule = new TestWatcher() { @Override protected void failed(Throwable e, Description description) { // On error take a screenshot so that we can debug it easily Screengrab.screenshot("FAILURE-" + getScreenshotName(description)); } private String getScreenshotName(Description description) { return description.getClassName().replace(".", "-") + "_" + description.getMethodName().replace(".", "-"); } }; @Before public void setUpScreenshots() { Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); targetContext = instrumentation.getTargetContext(); device = UiDevice.getInstance(instrumentation); // Use this to switch between default strategy and HostScreencap strategy Screengrab.setDefaultScreenshotStrategy(new UiAutomatorScreenshotStrategy()); } String getString(@StringRes int resourceId) { return targetContext.getString(resourceId).trim(); } String getString(@StringRes int resourceId, Object... formatArgs) { return targetContext.getString(resourceId, formatArgs).trim(); } public void takeScreenshotsAfterWait(String filename, int waitingTime) throws InterruptedException { Thread.sleep(waitingTime); Screengrab.screenshot(filename); } }
app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt +17 −10 Original line number Diff line number Diff line Loading @@ -15,9 +15,7 @@ import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.Visibility import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility import androidx.test.espresso.matcher.ViewMatchers.hasFocus import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.Until import androidx.test.uiautomator.By Loading @@ -30,7 +28,7 @@ import org.hamcrest.Matchers.containsString import org.mozilla.fenix.R import org.mozilla.fenix.helpers.click import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime import org.mozilla.fenix.helpers.click import org.mozilla.fenix.helpers.ext.waitNotNull /** * Implementation of Robot Pattern for the home screen menu. Loading Loading @@ -87,23 +85,23 @@ class HomeScreenRobot { // Collections element fun clickCollectionThreeDotButton() { collectionThreeDotButton().click() mDevice.wait(Until.findObject(By.text("Delete collection")), waitingTime) mDevice.waitNotNull(Until.findObject(By.text("Delete collection")), waitingTime) } fun selectRenameCollection() { onView(allOf(ViewMatchers.withText("Rename collection"))).click() mDevice.wait(Until.findObject(By.res("org.mozilla.fenix.debug:id/name_collection_edittext")), waitingTime) mDevice.waitNotNull(Until.findObject(By.res("name_collection_edittext"))) } fun selectDeleteCollection() { onView(allOf(ViewMatchers.withText("Delete collection"))).click() mDevice.wait(Until.findObject(By.res("message")), waitingTime) mDevice.waitNotNull(Until.findObject(By.res("message")), waitingTime) } fun confirmDeleteCollection() { onView(allOf(ViewMatchers.withText("DELETE"))).click() mDevice.wait(Until.findObject(By.res("org.mozilla.fenix.debug:id/collections_header")), waitingTime) mDevice.waitNotNull(Until.findObject(By.res("collections_header")), waitingTime) } fun typeCollectionName(name: String) { mDevice.wait(Until.findObject(By.res("org.mozilla.fenix.debug:id/name_collection_edittext")), waitingTime) collectionNameTextField().check(matches(hasFocus())) mDevice.wait(Until.findObject(By.res("name_collection_edittext")), waitingTime) collectionNameTextField().perform(ViewActions.replaceText(name)) collectionNameTextField().perform(ViewActions.pressImeActionButton()) } Loading @@ -120,6 +118,15 @@ class HomeScreenRobot { closeTabButton().click() } fun togglePrivateBrowsingModeOnOff() { onView(ViewMatchers.withResourceName("privateBrowsingButton")) .perform(click()) } fun swipeToBottom() = onView(ViewMatchers.withId(R.id.home_component)).perform(ViewActions.swipeUp()) fun swipeToTop() = onView(ViewMatchers.withId(R.id.home_component)).perform(ViewActions.swipeDown()) class Transition { val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) Loading Loading @@ -361,4 +368,4 @@ private fun tabsListThreeDotButton() = onView(allOf(ViewMatchers.withId(R.id.tab private fun collectionThreeDotButton() = onView(allOf(ViewMatchers.withId(R.id.collection_overflow_button))) private fun collectionNameTextField() = onView(allOf(ViewMatchers.withResourceName("name_collection_edittext"), hasFocus())) private fun collectionNameTextField() = onView(allOf(ViewMatchers.withResourceName("name_collection_edittext")))