Bug 1858438 - Tabs Tray TestRail matching

fenix/120.0
oana.horvath 8 months ago committed by mergify[bot]
parent 542b37e4b5
commit 2c6401dc63

@ -88,7 +88,7 @@ class ComposeHomeScreenTest {
homeScreen { }.togglePrivateBrowsingMode() homeScreen { }.togglePrivateBrowsingMode()
homeScreen { homeScreen {
verifyPrivateBrowsingHomeScreen() verifyPrivateBrowsingHomeScreenItems()
}.openCommonMythsLink { }.openCommonMythsLink {
verifyUrl("common-myths-about-private-browsing") verifyUrl("common-myths-about-private-browsing")
} }

@ -69,6 +69,7 @@ class ComposeMediaNotificationTest {
mockWebServer.shutdown() mockWebServer.shutdown()
} }
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1347033
@SmokeTest @SmokeTest
@Test @Test
fun verifyVideoPlaybackSystemNotificationTest() { fun verifyVideoPlaybackSystemNotificationTest() {
@ -103,6 +104,7 @@ class ComposeMediaNotificationTest {
mDevice.pressBack() mDevice.pressBack()
} }
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2316010
@SmokeTest @SmokeTest
@Test @Test
fun verifyAudioPlaybackSystemNotificationTest() { fun verifyAudioPlaybackSystemNotificationTest() {
@ -137,6 +139,7 @@ class ComposeMediaNotificationTest {
mDevice.pressBack() mDevice.pressBack()
} }
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/903595
@Test @Test
fun mediaSystemNotificationInPrivateModeTest() { fun mediaSystemNotificationInPrivateModeTest() {
val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer) val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer)

@ -12,8 +12,6 @@ import androidx.core.net.toUri
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule import androidx.test.rule.ActivityTestRule
import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiDevice
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.mediasession.MediaSession
import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.MockWebServer
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
@ -22,17 +20,13 @@ import org.junit.Test
import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.IntentReceiverActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.RetryTestRule import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources
import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource
import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar import org.mozilla.fenix.ui.robots.navigationToolbar
/** /**
@ -46,8 +40,6 @@ import org.mozilla.fenix.ui.robots.navigationToolbar
class ComposeSmokeTest { class ComposeSmokeTest {
private lateinit var mDevice: UiDevice private lateinit var mDevice: UiDevice
private lateinit var mockWebServer: MockWebServer private lateinit var mockWebServer: MockWebServer
private val customMenuItem = "TestMenuItem"
private lateinit var browserStore: BrowserStore
@get:Rule(order = 0) @get:Rule(order = 0)
val activityTestRule = AndroidComposeTestRule( val activityTestRule = AndroidComposeTestRule(
@ -69,10 +61,6 @@ class ComposeSmokeTest {
@Before @Before
fun setUp() { fun setUp() {
// Initializing this as part of class construction, below the rule would throw a NPE
// So we are initializing this here instead of in all related tests.
browserStore = activityTestRule.activity.components.core.store
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
mockWebServer = MockWebServer().apply { mockWebServer = MockWebServer().apply {
dispatcher = AndroidAssetDispatcher() dispatcher = AndroidAssetDispatcher()
@ -85,62 +73,6 @@ class ComposeSmokeTest {
mockWebServer.shutdown() mockWebServer.shutdown()
} }
@Test
fun shareTabsFromTabsTrayTest() {
val firstWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 1)
val secondWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 2)
val firstWebsiteTitle = firstWebsite.title
val secondWebsiteTitle = secondWebsite.title
val sharingApp = "Gmail"
val sharedUrlsString = "${firstWebsite.url}\n\n${secondWebsite.url}"
homeScreen {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(firstWebsite.url) {
verifyPageContent(firstWebsite.content)
}.openComposeTabDrawer(activityTestRule) {
}.openNewTab {
}.submitQuery(secondWebsite.url.toString()) {
verifyPageContent(secondWebsite.content)
}.openComposeTabDrawer(activityTestRule) {
verifyExistingOpenTabs("Test_Page_1")
verifyExistingOpenTabs("Test_Page_2")
}.openThreeDotMenu {
verifyShareAllTabsButton()
}.clickShareAllTabsButton {
verifyShareTabsOverlay(firstWebsiteTitle, secondWebsiteTitle)
verifySharingWithSelectedApp(
sharingApp,
sharedUrlsString,
"$firstWebsiteTitle, $secondWebsiteTitle",
)
}
}
@Test
fun privateTabsTrayWithOpenedTabTest() {
val website = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {
}.togglePrivateBrowsingMode()
homeScreen {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(website.url) {
}.openComposeTabDrawer(activityTestRule) {
verifyNormalBrowsingButtonIsSelected(false)
verifyPrivateBrowsingButtonIsSelected(true)
verifySyncedTabsButtonIsSelected(false)
verifyThreeDotButton()
verifyNormalTabCounter()
verifyPrivateTabsList()
verifyExistingOpenTabs(website.title)
verifyTabCloseButton()
verifyTabThumbnail()
verifyFab()
}
}
@Test @Test
fun mainMenuInstallPWATest() { fun mainMenuInstallPWATest() {
val pwaPage = "https://mozilla-mobile.github.io/testapp/" val pwaPage = "https://mozilla-mobile.github.io/testapp/"
@ -198,22 +130,4 @@ class ComposeSmokeTest {
verifyAppearanceColorSepia(true) verifyAppearanceColorSepia(true)
} }
} }
@Test
fun tabMediaControlButtonTest() {
val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(audioTestPage.url) {
mDevice.waitForIdle()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}.openComposeTabDrawer(activityTestRule) {
verifyTabMediaControlButtonState("Pause")
clickTabMediaControlButton("Pause")
verifyTabMediaControlButtonState("Play")
}.openTab(audioTestPage.title) {
assertPlaybackState(browserStore, MediaSession.PlaybackState.PAUSED)
}
}
} }

@ -8,14 +8,18 @@ import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiDevice
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.mediasession.MediaSession
import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.MockWebServer
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper
import org.mozilla.fenix.helpers.RetryTestRule import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
@ -24,6 +28,7 @@ import org.mozilla.fenix.helpers.TestHelper.restartApp
import org.mozilla.fenix.helpers.TestHelper.verifyKeyboardVisibility import org.mozilla.fenix.helpers.TestHelper.verifyKeyboardVisibility
import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText import org.mozilla.fenix.helpers.TestHelper.verifySnackBarText
import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar import org.mozilla.fenix.ui.robots.navigationToolbar
import org.mozilla.fenix.ui.robots.notificationShade import org.mozilla.fenix.ui.robots.notificationShade
@ -48,6 +53,7 @@ import org.mozilla.fenix.ui.robots.notificationShade
class ComposeTabbedBrowsingTest { class ComposeTabbedBrowsingTest {
private lateinit var mDevice: UiDevice private lateinit var mDevice: UiDevice
private lateinit var mockWebServer: MockWebServer private lateinit var mockWebServer: MockWebServer
private lateinit var browserStore: BrowserStore
@get:Rule(order = 0) @get:Rule(order = 0)
val composeTestRule = val composeTestRule =
@ -64,6 +70,10 @@ class ComposeTabbedBrowsingTest {
@Before @Before
fun setUp() { fun setUp() {
// Initializing this as part of class construction, below the rule would throw a NPE
// So we are initializing this here instead of in all related tests.
browserStore = composeTestRule.activity.components.core.store
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
mockWebServer = MockWebServer().apply { mockWebServer = MockWebServer().apply {
dispatcher = AndroidAssetDispatcher() dispatcher = AndroidAssetDispatcher()
@ -76,52 +86,7 @@ class ComposeTabbedBrowsingTest {
mockWebServer.shutdown() mockWebServer.shutdown()
} }
@Test // TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903599
fun openNewTabTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
mDevice.waitForIdle()
verifyTabCounter("1")
}.openComposeTabDrawer(composeTestRule) {
verifyNormalBrowsingButtonIsSelected()
verifyExistingOpenTabs("Test_Page_1")
closeTab()
}
homeScreen {
}.openComposeTabDrawer(composeTestRule) {
verifyNoOpenTabsInNormalBrowsing()
}.openNewTab {
}.submitQuery(defaultWebPage.url.toString()) {
verifyPageContent(defaultWebPage.content)
verifyTabCounter("1")
}.openComposeTabDrawer(composeTestRule) {
verifyNormalBrowsingButtonIsSelected()
verifyExistingOpenTabs("Test_Page_1")
}
}
@Test
fun openNewPrivateTabTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {
}.togglePrivateBrowsingMode()
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
mDevice.waitForIdle()
verifyTabCounter("1")
}.openComposeTabDrawer(composeTestRule) {
verifyPrivateTabsList()
verifyPrivateBrowsingButtonIsSelected()
}.toggleToNormalTabs {
verifyNoOpenTabsInNormalBrowsing()
}.toggleToPrivateTabs {
verifyPrivateTabsList()
}
}
@Test @Test
fun closeAllTabsTest() { fun closeAllTabsTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
@ -153,8 +118,9 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903604
@Test @Test
fun closeTabTest() { fun closingTabsMethodsTest() {
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar { navigationToolbar {
@ -162,6 +128,13 @@ class ComposeTabbedBrowsingTest {
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
closeTab() closeTab()
verifySnackBarText("Tab closed")
clickSnackbarButton("UNDO")
}
browserScreen {
verifyTabCounter("1")
}.openComposeTabDrawer(composeTestRule) {
closeTab()
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
@ -184,42 +157,23 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903591
@Test @Test
fun verifyUndoSnackBarTest() { fun closingPrivateTabsMethodsTest() {
// disabling these features because they interfere with the snackbar visibility
composeTestRule.activityRule.applySettingsExceptions {
it.isPocketEnabled = false
it.isRecentTabsFeatureEnabled = false
it.isRecentlyVisitedFeatureEnabled = false
}
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen { }.togglePrivateBrowsingMode()
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) { }.enterURLAndEnterToBrowser(genericURL.url) {
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
closeTab() closeTab()
verifySnackBarText("Tab closed") verifySnackBarText("Private tab closed")
clickSnackbarButton("UNDO") clickSnackbarButton("UNDO")
} }
browserScreen { browserScreen {
verifyTabCounter("1") verifyTabCounter("1")
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1")
}
}
@Test
fun closePrivateTabTest() {
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen { }.togglePrivateBrowsingMode()
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
}.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1")
closeTab() closeTab()
} }
homeScreen { homeScreen {
@ -229,6 +183,7 @@ class ComposeTabbedBrowsingTest {
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
swipeTabRight("Test_Page_1") swipeTabRight("Test_Page_1")
verifySnackBarText("Private tab closed")
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
@ -237,36 +192,34 @@ class ComposeTabbedBrowsingTest {
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
swipeTabLeft("Test_Page_1") swipeTabLeft("Test_Page_1")
verifySnackBarText("Private tab closed")
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903606
@SmokeTest
@Test @Test
fun verifyPrivateTabUndoSnackBarTest() { fun tabMediaControlButtonTest() {
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer)
homeScreen { }.togglePrivateBrowsingMode()
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) { }.enterURLAndEnterToBrowser(audioTestPage.url) {
verifyPageContent(genericURL.content) mDevice.waitForIdle()
}.openComposeTabDrawer(composeTestRule) { clickPageObject(MatcherHelper.itemWithText("Play"))
verifyExistingOpenTabs("Test_Page_1") assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
closeTab()
verifySnackBarText("Private tab closed")
clickSnackbarButton("UNDO")
}
browserScreen {
verifyPageContent(genericURL.content)
verifyTabCounter("1")
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1") verifyTabMediaControlButtonState("Pause")
verifyPrivateBrowsingButtonIsSelected() clickTabMediaControlButton("Pause")
verifyTabMediaControlButtonState("Play")
}.openTab(audioTestPage.title) {
assertPlaybackState(browserStore, MediaSession.PlaybackState.PAUSED)
} }
} }
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/903592
@SmokeTest @SmokeTest
@Test @Test
fun verifyCloseAllPrivateTabsNotificationTest() { fun verifyCloseAllPrivateTabsNotificationTest() {
@ -310,6 +263,7 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903600
@Test @Test
fun verifyEmptyTabTray() { fun verifyEmptyTabTray() {
homeScreen { homeScreen {
@ -326,8 +280,9 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903585
@Test @Test
fun emptyTabsTrayViewPrivateBrowsingTest() { fun verifyEmptyPrivateTabsTrayTest() {
homeScreen { homeScreen {
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
}.toggleToPrivateTabs { }.toggleToPrivateTabs {
@ -343,8 +298,9 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903601
@Test @Test
fun verifyOpenTabDetails() { fun verifyTabsTrayWithOpenTabTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar { navigationToolbar {
@ -366,29 +322,57 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903587
@SmokeTest
@Test
fun verifyPrivateTabsTrayWithOpenTabTest() {
val website = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {
}.openComposeTabDrawer(composeTestRule) {
}.toggleToPrivateTabs {
}.openNewTab {
}.submitQuery(website.url.toString()) {
}.openComposeTabDrawer(composeTestRule) {
verifyNormalBrowsingButtonIsSelected(false)
verifyPrivateBrowsingButtonIsSelected(true)
verifySyncedTabsButtonIsSelected(false)
verifyThreeDotButton()
verifyNormalTabCounter()
verifyPrivateTabsList()
verifyExistingOpenTabs(website.title)
verifyTabCloseButton()
verifyTabThumbnail()
verifyFab()
}
}
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/927314
@Test @Test
fun verifyContextMenuShortcuts() { fun tabsCounterShortcutMenuTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu { }.openTabButtonShortcutsMenu {
verifyTabButtonShortcutMenuItems() verifyTabButtonShortcutMenuItems()
}.closeTabFromShortcutsMenu { }.closeTabFromShortcutsMenu {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu { }.openTabButtonShortcutsMenu {
}.openNewPrivateTabFromShortcutsMenu { }.openNewPrivateTabFromShortcutsMenu {
verifyKeyboardVisibility() verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address") verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog // dismiss search dialog
}.dismissSearchBar { }.dismissSearchBar {
verifyCommonMythsLink() verifyPrivateBrowsingHomeScreenItems()
verifyNavigationToolbar()
} }
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu { }.openTabButtonShortcutsMenu {
}.openTabFromShortcutsMenu { }.openNewTabFromShortcutsMenu {
verifyKeyboardVisibility() verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address") verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog // dismiss search dialog
@ -398,6 +382,43 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/927314
@Test
fun privateTabsCounterShortcutMenuTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {}.togglePrivateBrowsingMode()
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu {
verifyTabButtonShortcutMenuItems()
}.closeTabFromShortcutsMenu {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu {
}.openNewPrivateTabFromShortcutsMenu {
verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog
}.dismissSearchBar {
verifyCommonMythsLink()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu {
}.openNewTabFromShortcutsMenu {
verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog
}.dismissSearchBar {
// Verify normal browsing homescreen
verifyExistingTopSitesList()
}
}
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/1046683
@Test @Test
fun verifySyncedTabsWhenUserIsNotSignedInTest() { fun verifySyncedTabsWhenUserIsNotSignedInTest() {
navigationToolbar { navigationToolbar {
@ -411,6 +432,41 @@ class ComposeTabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903598
@SmokeTest
@Test
fun shareTabsFromTabsTrayTest() {
val firstWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 1)
val secondWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 2)
val firstWebsiteTitle = firstWebsite.title
val secondWebsiteTitle = secondWebsite.title
val sharingApp = "Gmail"
val sharedUrlsString = "${firstWebsite.url}\n\n${secondWebsite.url}"
homeScreen {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(firstWebsite.url) {
verifyPageContent(firstWebsite.content)
}.openComposeTabDrawer(composeTestRule) {
}.openNewTab {
}.submitQuery(secondWebsite.url.toString()) {
verifyPageContent(secondWebsite.content)
}.openComposeTabDrawer(composeTestRule) {
verifyExistingOpenTabs("Test_Page_1")
verifyExistingOpenTabs("Test_Page_2")
}.openThreeDotMenu {
verifyShareAllTabsButton()
}.clickShareAllTabsButton {
verifyShareTabsOverlay(firstWebsiteTitle, secondWebsiteTitle)
verifySharingWithSelectedApp(
sharingApp,
sharedUrlsString,
"$firstWebsiteTitle, $secondWebsiteTitle",
)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/526244
@Test @Test
fun privateModeStaysAsDefaultAfterRestartTest() { fun privateModeStaysAsDefaultAfterRestartTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
@ -424,13 +480,14 @@ class ComposeTabbedBrowsingTest {
restartApp(composeTestRule.activityRule) restartApp(composeTestRule.activityRule)
homeScreen { homeScreen {
verifyPrivateBrowsingHomeScreen() verifyPrivateBrowsingHomeScreenItems()
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
}.toggleToNormalTabs { }.toggleToNormalTabs {
verifyExistingOpenTabs(defaultWebPage.title) verifyExistingOpenTabs(defaultWebPage.title)
} }
} }
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2228470
@SmokeTest @SmokeTest
@Test @Test
fun privateTabsDoNotPersistAfterClosingAppTest() { fun privateTabsDoNotPersistAfterClosingAppTest() {
@ -449,7 +506,7 @@ class ComposeTabbedBrowsingTest {
closeApp(composeTestRule.activityRule) closeApp(composeTestRule.activityRule)
restartApp(composeTestRule.activityRule) restartApp(composeTestRule.activityRule)
homeScreen { homeScreen {
verifyPrivateBrowsingHomeScreen() verifyPrivateBrowsingHomeScreenItems()
}.openComposeTabDrawer(composeTestRule) { }.openComposeTabDrawer(composeTestRule) {
verifyNoOpenTabsInPrivateBrowsing() verifyNoOpenTabsInPrivateBrowsing()
} }

@ -86,7 +86,7 @@ class HomeScreenTest {
homeScreen { }.togglePrivateBrowsingMode() homeScreen { }.togglePrivateBrowsingMode()
homeScreen { homeScreen {
verifyPrivateBrowsingHomeScreen() verifyPrivateBrowsingHomeScreenItems()
}.openCommonMythsLink { }.openCommonMythsLink {
verifyUrl("common-myths-about-private-browsing") verifyUrl("common-myths-about-private-browsing")
} }

@ -132,6 +132,7 @@ class MediaNotificationTest {
mDevice.pressBack() mDevice.pressBack()
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903595
@Test @Test
fun mediaSystemNotificationInPrivateModeTest() { fun mediaSystemNotificationInPrivateModeTest() {
val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer) val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer)

@ -12,8 +12,6 @@ import androidx.core.net.toUri
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule import androidx.test.rule.ActivityTestRule
import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiDevice
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.mediasession.MediaSession
import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.MockWebServer
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
@ -22,16 +20,13 @@ import org.junit.Test
import org.mozilla.fenix.IntentReceiverActivity import org.mozilla.fenix.IntentReceiverActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.RetryTestRule import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources
import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource
import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar import org.mozilla.fenix.ui.robots.navigationToolbar
@ -46,7 +41,6 @@ import org.mozilla.fenix.ui.robots.navigationToolbar
class SmokeTest { class SmokeTest {
private lateinit var mDevice: UiDevice private lateinit var mDevice: UiDevice
private lateinit var mockWebServer: MockWebServer private lateinit var mockWebServer: MockWebServer
private lateinit var browserStore: BrowserStore
@get:Rule(order = 0) @get:Rule(order = 0)
val activityTestRule = AndroidComposeTestRule( val activityTestRule = AndroidComposeTestRule(
@ -67,10 +61,6 @@ class SmokeTest {
@Before @Before
fun setUp() { fun setUp() {
// Initializing this as part of class construction, below the rule would throw a NPE
// So we are initializing this here instead of in all related tests.
browserStore = activityTestRule.activity.components.core.store
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
mockWebServer = MockWebServer().apply { mockWebServer = MockWebServer().apply {
dispatcher = AndroidAssetDispatcher() dispatcher = AndroidAssetDispatcher()
@ -115,30 +105,6 @@ class SmokeTest {
} }
} }
@Test
fun privateTabsTrayWithOpenedTabTest() {
val website = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {
}.togglePrivateBrowsingMode()
homeScreen {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(website.url) {
}.openTabDrawer {
verifyNormalBrowsingButtonIsSelected(false)
verifyPrivateBrowsingButtonIsSelected(true)
verifySyncedTabsButtonIsSelected(false)
verifyTabTrayOverflowMenu(true)
verifyTabsTrayCounter()
verifyExistingTabList()
verifyExistingOpenTabs(website.title)
verifyCloseTabsButton(website.title)
verifyOpenedTabThumbnail()
verifyPrivateBrowsingNewTabButton()
}
}
@Test @Test
fun mainMenuInstallPWATest() { fun mainMenuInstallPWATest() {
val pwaPage = "https://mozilla-mobile.github.io/testapp/" val pwaPage = "https://mozilla-mobile.github.io/testapp/"
@ -196,22 +162,4 @@ class SmokeTest {
verifyAppearanceColorSepia(true) verifyAppearanceColorSepia(true)
} }
} }
@Test
fun tabMediaControlButtonTest() {
val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(audioTestPage.url) {
mDevice.waitForIdle()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}.openTabDrawer {
verifyTabMediaControlButtonState("Pause")
clickTabMediaControlButton("Pause")
verifyTabMediaControlButtonState("Play")
}.openTab(audioTestPage.title) {
assertPlaybackState(browserStore, MediaSession.PlaybackState.PAUSED)
}
}
} }

@ -7,20 +7,25 @@ package org.mozilla.fenix.ui
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiDevice
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.mediasession.MediaSession
import okhttp3.mockwebserver.MockWebServer import okhttp3.mockwebserver.MockWebServer
import org.junit.After import org.junit.After
import org.junit.Before import org.junit.Before
import org.junit.Rule import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper
import org.mozilla.fenix.helpers.RetryTestRule import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.closeApp import org.mozilla.fenix.helpers.TestHelper.closeApp
import org.mozilla.fenix.helpers.TestHelper.restartApp import org.mozilla.fenix.helpers.TestHelper.restartApp
import org.mozilla.fenix.helpers.TestHelper.verifyKeyboardVisibility import org.mozilla.fenix.helpers.TestHelper.verifyKeyboardVisibility
import org.mozilla.fenix.ui.robots.browserScreen import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar import org.mozilla.fenix.ui.robots.navigationToolbar
import org.mozilla.fenix.ui.robots.notificationShade import org.mozilla.fenix.ui.robots.notificationShade
@ -45,6 +50,7 @@ import org.mozilla.fenix.ui.robots.notificationShade
class TabbedBrowsingTest { class TabbedBrowsingTest {
private lateinit var mDevice: UiDevice private lateinit var mDevice: UiDevice
private lateinit var mockWebServer: MockWebServer private lateinit var mockWebServer: MockWebServer
private lateinit var browserStore: BrowserStore
@get:Rule @get:Rule
val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides(skipOnboarding = true) val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides(skipOnboarding = true)
@ -55,6 +61,10 @@ class TabbedBrowsingTest {
@Before @Before
fun setUp() { fun setUp() {
// Initializing this as part of class construction, below the rule would throw a NPE
// So we are initializing this here instead of in all related tests.
browserStore = activityTestRule.activity.components.core.store
mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
mockWebServer = MockWebServer().apply { mockWebServer = MockWebServer().apply {
dispatcher = AndroidAssetDispatcher() dispatcher = AndroidAssetDispatcher()
@ -67,51 +77,7 @@ class TabbedBrowsingTest {
mockWebServer.shutdown() mockWebServer.shutdown()
} }
@Test // TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903599
fun openNewTabTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
mDevice.waitForIdle()
verifyTabCounter("1")
}.openTabDrawer {
verifyNormalModeSelected()
verifyExistingOpenTabs("Test_Page_1")
closeTab()
}.openTabDrawer {
verifyNoOpenTabsInNormalBrowsing()
}.openNewTab {
}.submitQuery(defaultWebPage.url.toString()) {
mDevice.waitForIdle()
verifyTabCounter("1")
}.openTabDrawer {
verifyNormalModeSelected()
verifyExistingOpenTabs("Test_Page_1")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/233629
@Test
fun openNewPrivateTabTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {}.togglePrivateBrowsingMode()
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
mDevice.waitForIdle()
verifyTabCounter("1")
}.openTabDrawer {
verifyExistingTabList()
verifyPrivateModeSelected()
}.toggleToNormalTabs {
verifyNoOpenTabsInNormalBrowsing()
}.toggleToPrivateTabs {
verifyExistingTabList()
}
}
@Test @Test
fun closeAllTabsTest() { fun closeAllTabsTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
@ -144,8 +110,9 @@ class TabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903604
@Test @Test
fun closeTabTest() { fun closingTabsMethodsTest() {
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar { navigationToolbar {
@ -153,6 +120,13 @@ class TabbedBrowsingTest {
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
closeTab() closeTab()
verifySnackBarText("Tab closed")
snackBarButtonClick("UNDO")
}
browserScreen {
verifyTabCounter("1")
}.openTabDrawer {
closeTab()
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
@ -161,6 +135,7 @@ class TabbedBrowsingTest {
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
swipeTabRight("Test_Page_1") swipeTabRight("Test_Page_1")
verifySnackBarText("Tab closed")
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
@ -169,48 +144,31 @@ class TabbedBrowsingTest {
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
swipeTabLeft("Test_Page_1") swipeTabLeft("Test_Page_1")
verifySnackBarText("Tab closed")
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903591
@Test @Test
fun verifyUndoSnackBarTest() { fun closingPrivateTabsMethodsTest() {
// disabling these features because they interfere with the snackbar visibility
activityTestRule.applySettingsExceptions {
it.isPocketEnabled = false
it.isRecentTabsFeatureEnabled = false
}
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen { }.togglePrivateBrowsingMode()
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) { }.enterURLAndEnterToBrowser(genericURL.url) {
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
verifyCloseTabsButton("Test_Page_1")
closeTab() closeTab()
verifySnackBarText("Tab closed") verifySnackBarText("Private tab closed")
snackBarButtonClick("UNDO") snackBarButtonClick("UNDO")
} }
browserScreen { browserScreen {
verifyTabCounter("1") verifyTabCounter("1")
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1")
}
}
@Test
fun closePrivateTabTest() {
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen { }.togglePrivateBrowsingMode()
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
}.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1")
verifyCloseTabsButton("Test_Page_1")
closeTab() closeTab()
} }
homeScreen { homeScreen {
@ -220,6 +178,7 @@ class TabbedBrowsingTest {
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
swipeTabRight("Test_Page_1") swipeTabRight("Test_Page_1")
verifySnackBarText("Private tab closed")
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
@ -228,32 +187,30 @@ class TabbedBrowsingTest {
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1") verifyExistingOpenTabs("Test_Page_1")
swipeTabLeft("Test_Page_1") swipeTabLeft("Test_Page_1")
verifySnackBarText("Private tab closed")
} }
homeScreen { homeScreen {
verifyTabCounter("0") verifyTabCounter("0")
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903606
@SmokeTest
@Test @Test
fun verifyPrivateTabUndoSnackBarTest() { fun tabMediaControlButtonTest() {
val genericURL = TestAssetHelper.getGenericAsset(mockWebServer, 1) val audioTestPage = TestAssetHelper.getAudioPageAsset(mockWebServer)
homeScreen { }.togglePrivateBrowsingMode()
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) { }.enterURLAndEnterToBrowser(audioTestPage.url) {
}.openTabDrawer { mDevice.waitForIdle()
verifyExistingOpenTabs("Test_Page_1") clickPageObject(MatcherHelper.itemWithText("Play"))
verifyCloseTabsButton("Test_Page_1") assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
closeTab()
verifySnackBarText("Private tab closed")
snackBarButtonClick("UNDO")
}
browserScreen {
verifyTabCounter("1")
}.openTabDrawer { }.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1") verifyTabMediaControlButtonState("Pause")
verifyPrivateModeSelected() clickTabMediaControlButton("Pause")
verifyTabMediaControlButtonState("Play")
}.openTab(audioTestPage.title) {
assertPlaybackState(browserStore, MediaSession.PlaybackState.PAUSED)
} }
} }
@ -278,6 +235,40 @@ class TabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903598
@SmokeTest
@Test
fun shareTabsFromTabsTrayTest() {
val firstWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 1)
val secondWebsite = TestAssetHelper.getGenericAsset(mockWebServer, 2)
val firstWebsiteTitle = firstWebsite.title
val secondWebsiteTitle = secondWebsite.title
val sharingApp = "Gmail"
val sharedUrlsString = "${firstWebsite.url}\n\n${secondWebsite.url}"
homeScreen {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(firstWebsite.url) {
verifyPageContent(firstWebsite.content)
}.openTabDrawer {
}.openNewTab {
}.submitQuery(secondWebsite.url.toString()) {
verifyPageContent(secondWebsite.content)
}.openTabDrawer {
verifyExistingOpenTabs("Test_Page_1")
verifyExistingOpenTabs("Test_Page_2")
}.openTabsListThreeDotMenu {
verifyShareAllTabsButton()
}.clickShareAllTabsButton {
verifyShareTabsOverlay(firstWebsiteTitle, secondWebsiteTitle)
verifySharingWithSelectedApp(
sharingApp,
sharedUrlsString,
"$firstWebsiteTitle, $secondWebsiteTitle",
)
}
}
@Test @Test
fun verifyTabTrayNotShowingStateHalfExpanded() { fun verifyTabTrayNotShowingStateHalfExpanded() {
navigationToolbar { navigationToolbar {
@ -301,6 +292,7 @@ class TabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903600
@Test @Test
fun verifyEmptyTabTray() { fun verifyEmptyTabTray() {
navigationToolbar { navigationToolbar {
@ -315,8 +307,9 @@ class TabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903585
@Test @Test
fun emptyTabsTrayViewPrivateBrowsingTest() { fun verifyEmptyPrivateTabsTrayTest() {
navigationToolbar { navigationToolbar {
}.openTabTray { }.openTabTray {
}.toggleToPrivateTabs { }.toggleToPrivateTabs {
@ -330,12 +323,15 @@ class TabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903601
@Test @Test
fun verifyOpenTabDetails() { fun verifyTabsTrayWithOpenTabTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar { homeScreen {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.openTabDrawer {
}.openNewTab {
}.submitQuery(defaultWebPage.url.toString()) {
}.openTabDrawer { }.openTabDrawer {
verifyNormalBrowsingButtonIsSelected(true) verifyNormalBrowsingButtonIsSelected(true)
verifyPrivateBrowsingButtonIsSelected(false) verifyPrivateBrowsingButtonIsSelected(false)
@ -353,29 +349,57 @@ class TabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/903587
@SmokeTest
@Test
fun verifyPrivateTabsTrayWithOpenTabTest() {
val website = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {
}.openTabDrawer {
}.toggleToPrivateTabs {
}.openNewTab {
}.submitQuery(website.url.toString()) {
}.openTabDrawer {
verifyNormalBrowsingButtonIsSelected(false)
verifyPrivateBrowsingButtonIsSelected(true)
verifySyncedTabsButtonIsSelected(false)
verifyTabTrayOverflowMenu(true)
verifyTabsTrayCounter()
verifyExistingTabList()
verifyExistingOpenTabs(website.title)
verifyCloseTabsButton(website.title)
verifyOpenedTabThumbnail()
verifyPrivateBrowsingNewTabButton()
}
}
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/927315
@Test @Test
fun verifyContextMenuShortcuts() { fun tabsCounterShortcutMenuTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1) val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu { }.openTabButtonShortcutsMenu {
verifyTabButtonShortcutMenuItems() verifyTabButtonShortcutMenuItems()
}.closeTabFromShortcutsMenu { }.closeTabFromShortcutsMenu {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu { }.openTabButtonShortcutsMenu {
}.openNewPrivateTabFromShortcutsMenu { }.openNewPrivateTabFromShortcutsMenu {
verifyKeyboardVisibility() verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address") verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog // dismiss search dialog
}.dismissSearchBar { }.dismissSearchBar {
verifyCommonMythsLink() verifyPrivateBrowsingHomeScreenItems()
verifyNavigationToolbar()
} }
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu { }.openTabButtonShortcutsMenu {
}.openTabFromShortcutsMenu { }.openNewTabFromShortcutsMenu {
verifyKeyboardVisibility() verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address") verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog // dismiss search dialog
@ -385,6 +409,45 @@ class TabbedBrowsingTest {
} }
} }
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/927314
@Test
fun privateTabsCounterShortcutMenuTest() {
val defaultWebPage = TestAssetHelper.getGenericAsset(mockWebServer, 1)
homeScreen {}.togglePrivateBrowsingMode()
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
waitForPageToLoad()
}
navigationToolbar {
}.openTabButtonShortcutsMenu {
verifyTabButtonShortcutMenuItems()
}.closeTabFromShortcutsMenu {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu {
}.openNewPrivateTabFromShortcutsMenu {
verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog
}.dismissSearchBar {
verifyCommonMythsLink()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {}
navigationToolbar {
}.openTabButtonShortcutsMenu {
}.openNewTabFromShortcutsMenu {
verifyKeyboardVisibility()
verifySearchBarPlaceholder("Search or enter address")
// dismiss search dialog
}.dismissSearchBar {
// Verify normal browsing homescreen
verifyExistingTopSitesList()
}
}
// TestRail: https://testrail.stage.mozaws.net/index.php?/cases/view/1046683
@Test @Test
fun verifySyncedTabsWhenUserIsNotSignedInTest() { fun verifySyncedTabsWhenUserIsNotSignedInTest() {
navigationToolbar { navigationToolbar {
@ -411,7 +474,7 @@ class TabbedBrowsingTest {
closeApp(activityTestRule) closeApp(activityTestRule)
restartApp(activityTestRule) restartApp(activityTestRule)
homeScreen { homeScreen {
verifyPrivateBrowsingHomeScreen() verifyPrivateBrowsingHomeScreenItems()
}.openTabDrawer { }.openTabDrawer {
}.toggleToNormalTabs { }.toggleToNormalTabs {
verifyExistingOpenTabs(defaultWebPage.title) verifyExistingOpenTabs(defaultWebPage.title)
@ -439,7 +502,7 @@ class TabbedBrowsingTest {
restartApp(activityTestRule) restartApp(activityTestRule)
homeScreen { homeScreen {
verifyPrivateBrowsingHomeScreen() verifyPrivateBrowsingHomeScreenItems()
}.openTabDrawer { }.openTabDrawer {
verifyNoOpenTabsInPrivateBrowsing() verifyNoOpenTabsInPrivateBrowsing()
} }

@ -1105,14 +1105,6 @@ class BrowserRobot {
return ComposeTabDrawerRobot.Transition(composeTestRule) return ComposeTabDrawerRobot.Transition(composeTestRule)
} }
fun openTabButtonShortcutsMenu(interact: NavigationToolbarRobot.() -> Unit): NavigationToolbarRobot.Transition {
mDevice.waitNotNull(Until.findObject(By.desc("Tabs")))
tabsCounter().click(LONG_CLICK_DURATION)
NavigationToolbarRobot().interact()
return NavigationToolbarRobot.Transition()
}
fun openNotificationShade(interact: NotificationRobot.() -> Unit): NotificationRobot.Transition { fun openNotificationShade(interact: NotificationRobot.() -> Unit): NotificationRobot.Transition {
mDevice.openNotification() mDevice.openNotification()

@ -87,11 +87,10 @@ class HomeScreenRobot {
fun verifyHomeScreen() = assertItemWithResIdExists(homeScreen) fun verifyHomeScreen() = assertItemWithResIdExists(homeScreen)
fun verifyPrivateBrowsingHomeScreen() { fun verifyPrivateBrowsingHomeScreenItems() {
verifyHomeScreenAppBarItems() verifyHomeScreenAppBarItems()
assertItemContainingTextExists(itemContainingText(privateSessionMessage)) assertItemContainingTextExists(itemContainingText(privateSessionMessage))
verifyCommonMythsLink() verifyCommonMythsLink()
verifyNavigationToolbarItems()
} }
fun verifyHomeScreenAppBarItems() = fun verifyHomeScreenAppBarItems() =

@ -305,7 +305,15 @@ class NavigationToolbarRobot {
return HomeScreenRobot.Transition() return HomeScreenRobot.Transition()
} }
fun closeTabFromShortcutsMenu(interact: NavigationToolbarRobot.() -> Unit): NavigationToolbarRobot.Transition { fun openTabButtonShortcutsMenu(interact: NavigationToolbarRobot.() -> Unit): Transition {
mDevice.waitNotNull(Until.findObject(By.desc("Tabs")))
tabsCounter().click(LONG_CLICK_DURATION)
NavigationToolbarRobot().interact()
return Transition()
}
fun closeTabFromShortcutsMenu(interact: NavigationToolbarRobot.() -> Unit): Transition {
mDevice.waitForIdle(waitingTime) mDevice.waitForIdle(waitingTime)
onView(withId(R.id.mozac_browser_menu_recyclerView)) onView(withId(R.id.mozac_browser_menu_recyclerView))
@ -319,10 +327,10 @@ class NavigationToolbarRobot {
) )
NavigationToolbarRobot().interact() NavigationToolbarRobot().interact()
return NavigationToolbarRobot.Transition() return Transition()
} }
fun openTabFromShortcutsMenu(interact: SearchRobot.() -> Unit): SearchRobot.Transition { fun openNewTabFromShortcutsMenu(interact: SearchRobot.() -> Unit): SearchRobot.Transition {
mDevice.waitForIdle(waitingTime) mDevice.waitForIdle(waitingTime)
onView(withId(R.id.mozac_browser_menu_recyclerView)) onView(withId(R.id.mozac_browser_menu_recyclerView))
@ -413,6 +421,8 @@ private fun awesomeBar() =
mDevice.findObject(UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_edit_url_view")) mDevice.findObject(UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_edit_url_view"))
private fun threeDotButton() = onView(withId(R.id.mozac_browser_toolbar_menu)) private fun threeDotButton() = onView(withId(R.id.mozac_browser_toolbar_menu))
private fun tabTrayButton() = onView(withId(R.id.tab_button)) private fun tabTrayButton() = onView(withId(R.id.tab_button))
private fun tabsCounter() =
mDevice.findObject(By.res("$packageName:id/counter_root"))
private fun fillLinkButton() = onView(withId(R.id.fill_link_from_clipboard)) private fun fillLinkButton() = onView(withId(R.id.fill_link_from_clipboard))
private fun clearAddressBarButton() = itemWithResId("$packageName:id/mozac_browser_toolbar_clear_view") private fun clearAddressBarButton() = itemWithResId("$packageName:id/mozac_browser_toolbar_clear_view")
private fun goBackButton() = mDevice.pressBack() private fun goBackButton() = mDevice.pressBack()

Loading…
Cancel
Save