For #26286 refactor homeScreenItemsTest UI test

fork
AndiAJ 2 years ago committed by mergify[bot]
parent 38a1c4a357
commit c86c917cce

@ -4,6 +4,7 @@
package org.mozilla.fenix.ui package org.mozilla.fenix.ui
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiDevice
@ -35,10 +36,11 @@ class HomeScreenTest {
private lateinit var mDevice: UiDevice private lateinit var mDevice: UiDevice
private lateinit var mockWebServer: MockWebServer private lateinit var mockWebServer: MockWebServer
@get:Rule @get:Rule(order = 0)
val activityTestRule = HomeActivityTestRule.withDefaultSettingsOverrides() val activityTestRule =
AndroidComposeTestRule(HomeActivityTestRule.withDefaultSettingsOverrides()) { it.activity }
@Rule @Rule(order = 1)
@JvmField @JvmField
val retryTestRule = RetryTestRule(3) val retryTestRule = RetryTestRule(3)
@ -62,21 +64,26 @@ class HomeScreenTest {
homeScreen { }.dismissOnboarding() homeScreen { }.dismissOnboarding()
homeScreen { homeScreen {
verifyHomeScreen()
verifyNavigationToolbar()
verifyHomePrivateBrowsingButton()
verifyHomeMenu()
verifyHomeWordmark() verifyHomeWordmark()
verifyTabButton() verifyHomePrivateBrowsingButton()
verifyCollectionsHeader()
verifyHomeToolbar()
verifyHomeComponent()
// Verify Top Sites
verifyExistingTopSitesList()
verifyExistingTopSitesTabs("Wikipedia") verifyExistingTopSitesTabs("Wikipedia")
verifyExistingTopSitesTabs("Top Articles") verifyExistingTopSitesTabs("Top Articles")
verifyExistingTopSitesTabs("Google") verifyExistingTopSitesTabs("Google")
verifyCollectionsHeader()
verifyNoCollectionsText()
scrollToPocketProvokingStories()
swipePocketProvokingStories()
verifyPocketRecommendedStoriesItems(activityTestRule, 1, 3, 4, 5, 6, 7)
verifyPocketSponsoredStoriesItems(activityTestRule, 2, 8)
verifyDiscoverMoreStoriesButton(activityTestRule, 9)
verifyStoriesByTopicItems()
verifyPoweredByPocket(activityTestRule)
verifyCustomizeHomepageButton(true)
verifyNavigationToolbar()
verifyDefaultSearchEngine("Google")
verifyHomeMenuButton()
verifyTabButton()
verifyNoTabsOpened()
} }
} }
@ -89,11 +96,11 @@ class HomeScreenTest {
verifyHomeScreen() verifyHomeScreen()
verifyNavigationToolbar() verifyNavigationToolbar()
verifyHomePrivateBrowsingButton() verifyHomePrivateBrowsingButton()
verifyHomeMenu() verifyHomeMenuButton()
verifyHomeWordmark() verifyHomeWordmark()
verifyTabButton() verifyTabButton()
verifyPrivateSessionMessage() verifyPrivateSessionMessage()
verifyHomeToolbar() verifyNavigationToolbar()
verifyHomeComponent() verifyHomeComponent()
}.openCommonMythsLink { }.openCommonMythsLink {
verifyUrl("common-myths-about-private-browsing") verifyUrl("common-myths-about-private-browsing")
@ -107,11 +114,11 @@ class HomeScreenTest {
verifyHomeScreen() verifyHomeScreen()
verifyNavigationToolbar() verifyNavigationToolbar()
verifyHomePrivateBrowsingButton() verifyHomePrivateBrowsingButton()
verifyHomeMenu() verifyHomeMenuButton()
verifyHomeWordmark() verifyHomeWordmark()
verifyTabButton() verifyTabButton()
verifyPrivateSessionMessage() verifyPrivateSessionMessage()
verifyHomeToolbar() verifyNavigationToolbar()
verifyHomeComponent() verifyHomeComponent()
} }
} }
@ -144,7 +151,7 @@ class HomeScreenTest {
@Test @Test
fun dismissOnboardingUsingHelpTest() { fun dismissOnboardingUsingHelpTest() {
activityTestRule.applySettingsExceptions { activityTestRule.activityRule.applySettingsExceptions {
it.isJumpBackInCFREnabled = false it.isJumpBackInCFREnabled = false
it.isWallpaperOnboardingEnabled = false it.isWallpaperOnboardingEnabled = false
} }
@ -174,7 +181,7 @@ class HomeScreenTest {
@Test @Test
fun verifyPocketHomepageStoriesTest() { fun verifyPocketHomepageStoriesTest() {
activityTestRule.applySettingsExceptions { activityTestRule.activityRule.applySettingsExceptions {
it.isRecentTabsFeatureEnabled = false it.isRecentTabsFeatureEnabled = false
it.isRecentlyVisitedFeatureEnabled = false it.isRecentlyVisitedFeatureEnabled = false
} }

@ -115,7 +115,7 @@ class SmokeTest {
verifyHomeScreen() verifyHomeScreen()
verifyNavigationToolbar() verifyNavigationToolbar()
verifyHomePrivateBrowsingButton() verifyHomePrivateBrowsingButton()
verifyHomeMenu() verifyHomeMenuButton()
verifyHomeWordmark() verifyHomeWordmark()
verifyWelcomeHeader() verifyWelcomeHeader()

@ -354,7 +354,7 @@ class TabbedBrowsingTest {
// dismiss search dialog // dismiss search dialog
homeScreen { }.pressBack() homeScreen { }.pressBack()
verifyPrivateSessionMessage() verifyPrivateSessionMessage()
verifyHomeToolbar() verifyNavigationToolbar()
} }
navigationToolbar { navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) { }.enterURLAndEnterToBrowser(defaultWebPage.url) {
@ -365,7 +365,7 @@ class TabbedBrowsingTest {
// dismiss search dialog // dismiss search dialog
homeScreen { }.pressBack() homeScreen { }.pressBack()
verifyHomeWordmark() verifyHomeWordmark()
verifyHomeToolbar() verifyNavigationToolbar()
} }
} }
} }

@ -8,9 +8,13 @@ package org.mozilla.fenix.ui.robots
import android.graphics.Bitmap import android.graphics.Bitmap
import android.widget.EditText import android.widget.EditText
import androidx.compose.ui.test.assert
import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.hasTestTag
import androidx.compose.ui.test.hasText import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.junit4.ComposeTestRule import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onChildAt
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performClick
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@ -75,12 +79,11 @@ class HomeScreenRobot {
fun verifyFocusedNavigationToolbar() = assertFocusedNavigationToolbar() fun verifyFocusedNavigationToolbar() = assertFocusedNavigationToolbar()
fun verifyHomeScreen() = assertHomeScreen() fun verifyHomeScreen() = assertHomeScreen()
fun verifyHomePrivateBrowsingButton() = assertHomePrivateBrowsingButton() fun verifyHomePrivateBrowsingButton() = assertHomePrivateBrowsingButton()
fun verifyHomeMenu() = assertHomeMenu() fun verifyHomeMenuButton() = assertHomeMenuButton()
fun verifyTabButton() = assertTabButton() fun verifyTabButton() = assertTabButton()
fun verifyCollectionsHeader() = assertCollectionsHeader() fun verifyCollectionsHeader() = assertCollectionsHeader()
fun verifyNoCollectionsText() = assertNoCollectionsText() fun verifyNoCollectionsText() = assertNoCollectionsText()
fun verifyHomeWordmark() = assertHomeWordmark() fun verifyHomeWordmark() = assertHomeWordmark()
fun verifyHomeToolbar() = assertHomeToolbar()
fun verifyHomeComponent() = assertHomeComponent() fun verifyHomeComponent() = assertHomeComponent()
fun verifyDefaultSearchEngine(searchEngine: String) = verifySearchEngineIcon(searchEngine) fun verifyDefaultSearchEngine(searchEngine: String) = verifySearchEngineIcon(searchEngine)
fun verifyNoTabsOpened() = assertNoTabsOpened() fun verifyNoTabsOpened() = assertNoTabsOpened()
@ -267,6 +270,39 @@ class HomeScreenRobot {
} }
} }
fun scrollToPocketProvokingStories() =
scrollToElementByText(getStringResource(R.string.pocket_stories_categories_header))
fun swipePocketProvokingStories() {
UiScrollable(UiSelector().resourceId("pocket.stories")).setAsHorizontalList()
.swipeLeft(3)
}
fun verifyPocketRecommendedStoriesItems(composeTestRule: ComposeTestRule, vararg positions: Int) {
composeTestRule.onNodeWithTag("pocket.stories").assertIsDisplayed()
positions.forEach {
composeTestRule.onNodeWithTag("pocket.stories")
.onChildAt(it - 1)
.assert(hasTestTag("pocket.recommended.story"))
}
}
fun verifyPocketSponsoredStoriesItems(composeTestRule: ComposeTestRule, vararg positions: Int) {
composeTestRule.onNodeWithTag("pocket.stories").assertIsDisplayed()
positions.forEach {
composeTestRule.onNodeWithTag("pocket.stories")
.onChildAt(it - 1)
.assert(hasTestTag("pocket.sponsored.story"))
}
}
fun verifyDiscoverMoreStoriesButton(composeTestRule: ComposeTestRule, position: Int) {
composeTestRule.onNodeWithTag("pocket.stories")
.assertIsDisplayed()
.onChildAt(position - 1)
.assert(hasTestTag("pocket.discover.more.story"))
}
fun verifyStoriesByTopic(enabled: Boolean) { fun verifyStoriesByTopic(enabled: Boolean) {
if (enabled) { if (enabled) {
scrollToElementByText(getStringResource(R.string.pocket_stories_categories_header)) scrollToElementByText(getStringResource(R.string.pocket_stories_categories_header))
@ -291,6 +327,15 @@ class HomeScreenRobot {
} }
} }
fun verifyStoriesByTopicItems() =
assertTrue(mDevice.findObject(UiSelector().resourceId("pocket.categories")).childCount > 1)
fun verifyPoweredByPocket(rule: ComposeTestRule) {
homeScreenList().scrollIntoView(mDevice.findObject(UiSelector().resourceId("pocket.header")))
rule.onNodeWithTag("pocket.header.title", true).assertIsDisplayed()
rule.onNodeWithTag("pocket.header.subtitle", true).assertIsDisplayed()
}
fun verifyCustomizeHomepageButton(enabled: Boolean) { fun verifyCustomizeHomepageButton(enabled: Boolean) {
if (enabled) { if (enabled) {
scrollToElementByText(getStringResource(R.string.browser_menu_customize_home_1)) scrollToElementByText(getStringResource(R.string.browser_menu_customize_home_1))
@ -619,7 +664,7 @@ private fun assertHomeScreen() {
.check(matches(withEffectiveVisibility(Visibility.VISIBLE))) .check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
} }
private fun assertHomeMenu() = onView(ViewMatchers.withResourceName("menuButton")) private fun assertHomeMenuButton() = onView(ViewMatchers.withResourceName("menuButton"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE))) .check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
private fun assertHomePrivateBrowsingButton() = private fun assertHomePrivateBrowsingButton() =
@ -630,9 +675,6 @@ private val homepageWordmark = onView(ViewMatchers.withResourceName("wordmark"))
private fun assertHomeWordmark() = private fun assertHomeWordmark() =
homepageWordmark.check(matches(withEffectiveVisibility(Visibility.VISIBLE))) homepageWordmark.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
private fun assertHomeToolbar() = onView(ViewMatchers.withResourceName("toolbar"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
private fun assertTabButton() = private fun assertTabButton() =
onView(allOf(withId(R.id.tab_button), isDisplayed())) onView(allOf(withId(R.id.tab_button), isDisplayed()))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE))) .check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
@ -668,9 +710,9 @@ private fun getSearchEngine(searchEngineName: String) =
appContext.components.core.store.state.search.searchEngines.find { it.name == searchEngineName } appContext.components.core.store.state.search.searchEngines.find { it.name == searchEngineName }
private fun verifySearchEngineIcon(searchEngineName: String) { private fun verifySearchEngineIcon(searchEngineName: String) {
val ddgSearchEngine = getSearchEngine(searchEngineName) val defaultSearchEngine = getSearchEngine(searchEngineName)
?: throw AssertionError("No search engine with name $searchEngineName") ?: throw AssertionError("No search engine with name $searchEngineName")
verifySearchEngineIcon(ddgSearchEngine.icon, ddgSearchEngine.name) verifySearchEngineIcon(defaultSearchEngine.icon, defaultSearchEngine.name)
} }
// First Run elements // First Run elements
@ -949,6 +991,17 @@ private fun sponsoredShortcut(sponsoredShortcutTitle: String) =
.textContains(sponsoredShortcutTitle), .textContains(sponsoredShortcutTitle),
) )
private fun discoverMoreStoriesButton(position: Int) =
mDevice
.findObject(
UiSelector()
.resourceId("pocket.stories"),
).getChild(
UiSelector()
.resourceId("pocket.discover.more.story")
.index(position - 1),
)
val deleteFromHistory = val deleteFromHistory =
onView( onView(
allOf( allOf(

Loading…
Cancel
Save