For #26286 improve firstRunScreenTest UI test coverage
This commit is contained in:
parent
814328427b
commit
0e88bfad6b
|
@ -86,7 +86,7 @@ class HomeScreenTest {
|
|||
verifyDefaultSearchEngine("Google")
|
||||
verifyHomeMenuButton()
|
||||
verifyTabButton()
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@ import org.mozilla.fenix.helpers.TestHelper.assertNativeAppOpens
|
|||
import org.mozilla.fenix.helpers.TestHelper.createCustomTabIntent
|
||||
import org.mozilla.fenix.helpers.TestHelper.generateRandomString
|
||||
import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources
|
||||
import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText
|
||||
import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource
|
||||
import org.mozilla.fenix.ui.robots.browserScreen
|
||||
import org.mozilla.fenix.ui.robots.customTabScreen
|
||||
|
@ -46,7 +45,6 @@ import org.mozilla.fenix.ui.robots.navigationToolbar
|
|||
import org.mozilla.fenix.ui.robots.notificationShade
|
||||
import org.mozilla.fenix.ui.robots.openEditURLView
|
||||
import org.mozilla.fenix.ui.robots.searchScreen
|
||||
import org.mozilla.fenix.ui.util.STRING_ONBOARDING_TRACKING_PROTECTION_HEADER
|
||||
|
||||
/**
|
||||
* Test Suite that contains a part of the Smoke and Sanity tests defined in TestRail:
|
||||
|
@ -112,41 +110,19 @@ class SmokeTest {
|
|||
@Test
|
||||
fun firstRunScreenTest() {
|
||||
homeScreen {
|
||||
verifyHomeScreen()
|
||||
verifyNavigationToolbar()
|
||||
verifyHomePrivateBrowsingButton()
|
||||
verifyHomeMenuButton()
|
||||
verifyHomeWordmark()
|
||||
|
||||
verifyWelcomeHeader()
|
||||
// Sign in to Firefox
|
||||
verifyStartSyncHeader()
|
||||
verifyAccountsSignInButton()
|
||||
|
||||
// Always-on privacy
|
||||
scrollToElementByText(STRING_ONBOARDING_TRACKING_PROTECTION_HEADER)
|
||||
verifyAutomaticPrivacyHeader()
|
||||
verifyAutomaticPrivacyText()
|
||||
|
||||
// Choose your theme
|
||||
verifyChooseThemeHeader()
|
||||
verifyChooseThemeText()
|
||||
verifyDarkThemeDescription()
|
||||
verifyDarkThemeToggle()
|
||||
verifyLightThemeDescription()
|
||||
verifyLightThemeToggle()
|
||||
|
||||
// Pick your toolbar placement
|
||||
verifyTakePositionHeader()
|
||||
verifyTakePositionElements()
|
||||
|
||||
// Your privacy
|
||||
verifyYourPrivacyHeader()
|
||||
verifyYourPrivacyText()
|
||||
verifyPrivacyNoticeButton()
|
||||
|
||||
// Start Browsing
|
||||
verifyStartBrowsingButton()
|
||||
verifyHomeScreenAppBarItems()
|
||||
verifyHomeScreenWelcomeItems()
|
||||
verifyChooseYourThemeCard(
|
||||
isDarkThemeChecked = false,
|
||||
isLightThemeChecked = false,
|
||||
isAutomaticThemeChecked = true,
|
||||
)
|
||||
verifyToolbarPlacementCard(isBottomChecked = true, isTopChecked = false)
|
||||
verifySignInToSyncCard()
|
||||
verifyPrivacyProtectionCard(isStandardChecked = true, isStrictChecked = false)
|
||||
verifyPrivacyNoticeCard()
|
||||
verifyStartBrowsingSection()
|
||||
verifyNavigationToolbarItems("0")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ class TabbedBrowsingTest {
|
|||
verifyShareTabButton()
|
||||
verifySelectTabs()
|
||||
}.closeAllTabs {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}
|
||||
|
||||
// Repeat for Private Tabs
|
||||
|
@ -137,7 +137,7 @@ class TabbedBrowsingTest {
|
|||
}.openTabsListThreeDotMenu {
|
||||
verifyCloseAllTabsButton()
|
||||
}.closeAllTabs {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,7 +153,7 @@ class TabbedBrowsingTest {
|
|||
closeTab()
|
||||
}
|
||||
homeScreen {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}.openNavigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(genericURL.url) {
|
||||
}.openTabDrawer {
|
||||
|
@ -161,7 +161,7 @@ class TabbedBrowsingTest {
|
|||
swipeTabRight("Test_Page_1")
|
||||
}
|
||||
homeScreen {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}.openNavigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(genericURL.url) {
|
||||
}.openTabDrawer {
|
||||
|
@ -169,7 +169,7 @@ class TabbedBrowsingTest {
|
|||
swipeTabLeft("Test_Page_1")
|
||||
}
|
||||
homeScreen {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -213,7 +213,7 @@ class TabbedBrowsingTest {
|
|||
closeTab()
|
||||
}
|
||||
homeScreen {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}.openNavigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(genericURL.url) {
|
||||
}.openTabDrawer {
|
||||
|
@ -221,7 +221,7 @@ class TabbedBrowsingTest {
|
|||
swipeTabRight("Test_Page_1")
|
||||
}
|
||||
homeScreen {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}.openNavigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(genericURL.url) {
|
||||
}.openTabDrawer {
|
||||
|
@ -229,7 +229,7 @@ class TabbedBrowsingTest {
|
|||
swipeTabLeft("Test_Page_1")
|
||||
}
|
||||
homeScreen {
|
||||
verifyNoTabsOpened()
|
||||
verifyTabCounter("0")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,9 +65,6 @@ import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText
|
|||
import org.mozilla.fenix.helpers.click
|
||||
import org.mozilla.fenix.helpers.ext.waitNotNull
|
||||
import org.mozilla.fenix.helpers.withBitmapDrawable
|
||||
import org.mozilla.fenix.ui.util.STRING_ONBOARDING_ACCOUNT_SIGN_IN_HEADER
|
||||
import org.mozilla.fenix.ui.util.STRING_ONBOARDING_TOOLBAR_PLACEMENT_HEADER
|
||||
import org.mozilla.fenix.ui.util.STRING_ONBOARDING_TRACKING_PROTECTION_HEADER
|
||||
|
||||
/**
|
||||
* Implementation of Robot Pattern for the home screen menu.
|
||||
|
@ -79,18 +76,93 @@ class HomeScreenRobot {
|
|||
" service provider, it makes it easier to keep what you do online private from anyone" +
|
||||
" else who uses this device."
|
||||
|
||||
fun verifyNavigationToolbar() = assertNavigationToolbar()
|
||||
fun verifyNavigationToolbar() = assertAppItemsWithResourceId(navigationToolbar)
|
||||
fun verifyFocusedNavigationToolbar() = assertFocusedNavigationToolbar()
|
||||
fun verifyHomeScreen() = assertHomeScreen()
|
||||
fun verifyHomePrivateBrowsingButton() = assertHomePrivateBrowsingButton()
|
||||
fun verifyHomeMenuButton() = assertHomeMenuButton()
|
||||
fun verifyHomeScreen() = assertAppItemsWithResourceId(homeScreen)
|
||||
|
||||
fun verifyHomeScreenAppBarItems() =
|
||||
assertAppItemsWithResourceId(homeScreen, privateBrowsingButton, homepageWordmark)
|
||||
|
||||
fun verifyHomeScreenWelcomeItems() =
|
||||
assertAppItemsContainingText(welcomeHeader, welcomeSubHeader)
|
||||
|
||||
fun verifyChooseYourThemeCard(
|
||||
isDarkThemeChecked: Boolean,
|
||||
isLightThemeChecked: Boolean,
|
||||
isAutomaticThemeChecked: Boolean,
|
||||
) {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_theme_picker_header))
|
||||
assertAppItemsContainingText(
|
||||
chooseThemeHeader,
|
||||
chooseThemeText,
|
||||
darkThemeDescription,
|
||||
lightThemeDescription,
|
||||
)
|
||||
assertAppItemsStateWithResourceId(
|
||||
darkThemeToggle(isDarkThemeChecked),
|
||||
lightThemeToggle(isLightThemeChecked),
|
||||
automaticThemeToggle(isAutomaticThemeChecked),
|
||||
)
|
||||
assertAppItemsWithResourceIdAndDescription(automaticThemeDescription)
|
||||
}
|
||||
|
||||
fun verifyToolbarPlacementCard(isBottomChecked: Boolean, isTopChecked: Boolean) {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_toolbar_placement_header_1))
|
||||
assertAppItemsContainingText(toolbarPlacementHeader, toolbarPlacementDescription)
|
||||
assertAppItemsStateWithResourceId(
|
||||
toolbarPlacementBottomRadioButton(isBottomChecked),
|
||||
toolbarPlacementTopRadioButton(isTopChecked),
|
||||
)
|
||||
assertAppItemsWithResourceId(
|
||||
toolbarPlacementBottomImage,
|
||||
toolbarPlacementBottomTitle,
|
||||
toolbarPlacementTopImage,
|
||||
toolbarPlacementTopTitle,
|
||||
)
|
||||
}
|
||||
|
||||
fun verifySignInToSyncCard() {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_account_sign_in_header))
|
||||
assertAppItemsContainingText(startSyncHeader, startSyncDescription)
|
||||
assertAppItemsWithResourceId(signInButton)
|
||||
}
|
||||
|
||||
fun verifyPrivacyProtectionCard(isStandardChecked: Boolean, isStrictChecked: Boolean) {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_tracking_protection_header))
|
||||
assertAppItemsContainingText(privacyProtectionHeader, privacyProtectionDescription)
|
||||
assertAppItemsStateWithResourceId(
|
||||
standardTrackingProtectionToggle(isStandardChecked),
|
||||
strictTrackingProtectionToggle(isStrictChecked),
|
||||
)
|
||||
}
|
||||
|
||||
fun verifyPrivacyNoticeCard() {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_privacy_notice_header_1))
|
||||
assertAppItemsContainingText(privacyNoticeHeader, privacyNoticeDescription)
|
||||
assertAppItemsWithResourceId(privacyNoticeButton)
|
||||
}
|
||||
|
||||
fun verifyStartBrowsingSection() {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_finish))
|
||||
assertAppItemsWithResourceId(startBrowsingButton)
|
||||
assertAppItemsContainingText(conclusionHeader)
|
||||
}
|
||||
|
||||
fun verifyNavigationToolbarItems(numberOfOpenTabs: String) {
|
||||
assertAppItemsWithResourceId(navigationToolbar, menuButton)
|
||||
assertAppItemsWithResourceIdAndText(tabCounter(numberOfOpenTabs))
|
||||
}
|
||||
|
||||
fun verifyHomePrivateBrowsingButton() = assertAppItemsWithResourceId(privateBrowsingButton)
|
||||
fun verifyHomeMenuButton() = assertAppItemsWithResourceId(menuButton)
|
||||
fun verifyTabButton() = assertTabButton()
|
||||
fun verifyCollectionsHeader() = assertCollectionsHeader()
|
||||
fun verifyNoCollectionsText() = assertNoCollectionsText()
|
||||
fun verifyHomeWordmark() = assertHomeWordmark()
|
||||
fun verifyHomeWordmark() = assertAppItemsWithResourceId(homepageWordmark)
|
||||
fun verifyHomeComponent() = assertHomeComponent()
|
||||
fun verifyDefaultSearchEngine(searchEngine: String) = verifySearchEngineIcon(searchEngine)
|
||||
fun verifyNoTabsOpened() = assertNoTabsOpened()
|
||||
fun verifyTabCounter(numberOfOpenTabs: String) =
|
||||
assertAppItemsWithResourceIdAndText(tabCounter(numberOfOpenTabs))
|
||||
fun verifyKeyboardVisible() = assertKeyboardVisibility(isExpectedToBeVisible = true)
|
||||
|
||||
fun verifyWallpaperImageApplied(isEnabled: Boolean) {
|
||||
|
@ -112,34 +184,13 @@ class HomeScreenRobot {
|
|||
}
|
||||
|
||||
// First Run elements
|
||||
fun verifyWelcomeHeader() = assertWelcomeHeader()
|
||||
|
||||
fun verifyStartSyncHeader() = assertStartSyncHeader()
|
||||
fun verifyAccountsSignInButton() = assertAccountsSignInButton()
|
||||
fun verifyChooseThemeHeader() = assertChooseThemeHeader()
|
||||
fun verifyChooseThemeText() = assertChooseThemeText()
|
||||
fun verifyLightThemeToggle() = assertLightThemeToggle()
|
||||
fun verifyLightThemeDescription() = assertLightThemeDescription()
|
||||
fun verifyDarkThemeToggle() = assertDarkThemeToggle()
|
||||
fun verifyDarkThemeDescription() = assertDarkThemeDescription()
|
||||
fun verifyAutomaticThemeToggle() = assertAutomaticThemeToggle()
|
||||
fun verifyAutomaticThemeDescription() = assertAutomaticThemeDescription()
|
||||
fun verifyAutomaticPrivacyHeader() = assertAutomaticPrivacyHeader()
|
||||
fun verifyAutomaticPrivacyText() = assertAlwaysPrivacyText()
|
||||
|
||||
// Pick your toolbar placement
|
||||
fun verifyTakePositionHeader() = assertTakePlacementHeader()
|
||||
fun verifyTakePositionElements() {
|
||||
assertTakePlacementBottomRadioButton()
|
||||
assertTakePacementTopRadioButton()
|
||||
fun verifyWelcomeHeader() = assertAppItemsContainingText(welcomeHeader)
|
||||
fun verifyAccountsSignInButton() = assertAppItemsWithResourceId(signInButton)
|
||||
fun verifyStartBrowsingButton() {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_finish))
|
||||
assertAppItemsWithResourceId(startBrowsingButton)
|
||||
}
|
||||
|
||||
// Your privacy
|
||||
fun verifyYourPrivacyHeader() = assertYourPrivacyHeader()
|
||||
fun verifyYourPrivacyText() = assertYourPrivacyText()
|
||||
fun verifyPrivacyNoticeButton() = assertPrivacyNoticeButton()
|
||||
fun verifyStartBrowsingButton() = assertStartBrowsingButton()
|
||||
|
||||
// Upgrading users onboarding dialog
|
||||
fun verifyUpgradingUserOnboardingFirstScreen(testRule: ComposeTestRule) {
|
||||
testRule.also {
|
||||
|
@ -458,8 +509,8 @@ class HomeScreenRobot {
|
|||
}
|
||||
|
||||
fun openSearch(interact: SearchRobot.() -> Unit): SearchRobot.Transition {
|
||||
navigationToolbar().waitForExists(waitingTime)
|
||||
navigationToolbar().click()
|
||||
navigationToolbar.waitForExists(waitingTime)
|
||||
navigationToolbar.click()
|
||||
|
||||
SearchRobot().interact()
|
||||
return SearchRobot.Transition()
|
||||
|
@ -470,7 +521,7 @@ class HomeScreenRobot {
|
|||
}
|
||||
|
||||
fun clickStartBrowsingButton(interact: SearchRobot.() -> Unit): SearchRobot.Transition {
|
||||
startBrowsingButton().click()
|
||||
startBrowsingButton.click()
|
||||
|
||||
SearchRobot().interact()
|
||||
return SearchRobot.Transition()
|
||||
|
@ -491,8 +542,7 @@ class HomeScreenRobot {
|
|||
.waitForExists(
|
||||
waitingTime,
|
||||
)
|
||||
privateBrowsingButton()
|
||||
.perform(click())
|
||||
privateBrowsingButton.click()
|
||||
}
|
||||
|
||||
fun triggerPrivateBrowsingShortcutPrompt(interact: AddToHomeScreenRobot.() -> Unit): AddToHomeScreenRobot.Transition {
|
||||
|
@ -503,8 +553,7 @@ class HomeScreenRobot {
|
|||
waitingTime,
|
||||
)
|
||||
|
||||
privateBrowsingButton()
|
||||
.perform(click())
|
||||
privateBrowsingButton.click()
|
||||
}
|
||||
|
||||
AddToHomeScreenRobot().interact()
|
||||
|
@ -518,7 +567,7 @@ class HomeScreenRobot {
|
|||
fun openNavigationToolbar(interact: NavigationToolbarRobot.() -> Unit): NavigationToolbarRobot.Transition {
|
||||
mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar"))
|
||||
.waitForExists(waitingTime)
|
||||
navigationToolbar().click()
|
||||
navigationToolbar.click()
|
||||
|
||||
NavigationToolbarRobot().interact()
|
||||
return NavigationToolbarRobot.Transition()
|
||||
|
@ -754,31 +803,10 @@ private fun assertKeyboardVisibility(isExpectedToBeVisible: Boolean) =
|
|||
.contains("mInputShown=true"),
|
||||
)
|
||||
|
||||
private fun navigationToolbar() = mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar"))
|
||||
|
||||
private fun assertNavigationToolbar() = assertTrue(navigationToolbar().waitForExists(waitingTime))
|
||||
|
||||
private fun assertFocusedNavigationToolbar() =
|
||||
onView(allOf(withHint("Search or enter address")))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
|
||||
private fun assertHomeScreen() {
|
||||
mDevice.findObject(UiSelector().resourceId("$packageName:id/homeLayout")).waitForExists(waitingTime)
|
||||
onView(ViewMatchers.withResourceName("homeLayout"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertHomeMenuButton() = onView(ViewMatchers.withResourceName("menuButton"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
|
||||
private fun assertHomePrivateBrowsingButton() =
|
||||
privateBrowsingButton()
|
||||
.check(matches(isDisplayed()))
|
||||
|
||||
private val homepageWordmark = onView(ViewMatchers.withResourceName("wordmark"))
|
||||
private fun assertHomeWordmark() =
|
||||
homepageWordmark.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
|
||||
private fun assertTabButton() =
|
||||
onView(allOf(withId(R.id.tab_button), isDisplayed()))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
|
@ -801,8 +829,6 @@ private fun assertHomeComponent() =
|
|||
onView(ViewMatchers.withResourceName("sessionControlRecyclerView"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
|
||||
private fun assertNoTabsOpened() = onView(withId(R.id.counter_text)).check(matches(withText("0")))
|
||||
|
||||
private fun threeDotButton() = onView(allOf(withId(R.id.menuButton)))
|
||||
|
||||
private fun verifySearchEngineIcon(searchEngineIcon: Bitmap, searchEngineName: String) {
|
||||
|
@ -819,138 +845,6 @@ private fun verifySearchEngineIcon(searchEngineName: String) {
|
|||
verifySearchEngineIcon(defaultSearchEngine.icon, defaultSearchEngine.name)
|
||||
}
|
||||
|
||||
// First Run elements
|
||||
private fun assertWelcomeHeader() =
|
||||
assertTrue(
|
||||
mDevice.findObject(
|
||||
UiSelector().textContains(
|
||||
getStringResource(R.string.onboarding_header_2),
|
||||
),
|
||||
).waitForExists(waitingTime),
|
||||
)
|
||||
|
||||
private fun assertStartSyncHeader() {
|
||||
scrollToElementByText(STRING_ONBOARDING_ACCOUNT_SIGN_IN_HEADER)
|
||||
onView(allOf(withText(R.string.onboarding_account_sign_in_header)))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
private fun assertAccountsSignInButton() {
|
||||
scrollToElementByText(getStringResource(R.string.onboarding_firefox_account_sign_in))
|
||||
onView(ViewMatchers.withResourceName("fxa_sign_in_button"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertChooseThemeHeader() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(withText("Choose your theme"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
private fun assertChooseThemeText() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(allOf(withText("Save some battery and your eyesight with dark mode.")))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertLightThemeToggle() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(ViewMatchers.withResourceName("theme_light_radio_button"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertLightThemeDescription() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(allOf(withText("Light theme")))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertDarkThemeToggle() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(ViewMatchers.withResourceName("theme_dark_radio_button"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertDarkThemeDescription() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(allOf(withText("Dark theme")))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
private fun assertAutomaticThemeToggle() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(withId(R.id.theme_automatic_radio_button))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertAutomaticThemeDescription() {
|
||||
scrollToElementByText("Choose your theme")
|
||||
onView(allOf(withText("Automatic")))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertAutomaticPrivacyHeader() {
|
||||
scrollToElementByText(STRING_ONBOARDING_TRACKING_PROTECTION_HEADER)
|
||||
onView(allOf(withText(STRING_ONBOARDING_TRACKING_PROTECTION_HEADER)))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertAlwaysPrivacyText() {
|
||||
scrollToElementByText(STRING_ONBOARDING_TRACKING_PROTECTION_HEADER)
|
||||
onView(
|
||||
allOf(
|
||||
withText(
|
||||
"Featuring Total Cookie Protection to stop trackers from using cookies to stalk you across sites.",
|
||||
),
|
||||
),
|
||||
)
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertYourPrivacyHeader() {
|
||||
scrollToElementByText("You control your data")
|
||||
onView(allOf(withText("You control your data")))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertYourPrivacyText() {
|
||||
scrollToElementByText("You control your data")
|
||||
onView(
|
||||
allOf(
|
||||
withText(
|
||||
"Firefox gives you control over what you share online and what you share with us.",
|
||||
),
|
||||
),
|
||||
)
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertPrivacyNoticeButton() {
|
||||
scrollToElementByText("You control your data")
|
||||
onView(allOf(withText("Read our privacy notice")))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertStartBrowsingButton() {
|
||||
assertTrue(startBrowsingButton().waitForExists(waitingTime))
|
||||
}
|
||||
|
||||
// Pick your toolbar placement
|
||||
private fun assertTakePlacementHeader() {
|
||||
scrollToElementByText(STRING_ONBOARDING_TOOLBAR_PLACEMENT_HEADER)
|
||||
onView(allOf(withText(STRING_ONBOARDING_TOOLBAR_PLACEMENT_HEADER)))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertTakePacementTopRadioButton() {
|
||||
scrollToElementByText(STRING_ONBOARDING_TOOLBAR_PLACEMENT_HEADER)
|
||||
onView(ViewMatchers.withResourceName("toolbar_top_radio_button"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertTakePlacementBottomRadioButton() {
|
||||
scrollToElementByText(STRING_ONBOARDING_TOOLBAR_PLACEMENT_HEADER)
|
||||
onView(ViewMatchers.withResourceName("toolbar_bottom_radio_button"))
|
||||
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
private fun assertPrivateSessionMessage() =
|
||||
assertTrue(
|
||||
mDevice.findObject(
|
||||
|
@ -1090,8 +984,6 @@ private fun assertPocketSectionIsDisplayed() = assertTrue(pocketSection().waitFo
|
|||
|
||||
private fun assertPocketSectionIsNotDisplayed() = assertFalse(pocketSection().waitForExists(waitingTime))
|
||||
|
||||
private fun privateBrowsingButton() = onView(withId(R.id.privateBrowsingButton))
|
||||
|
||||
private fun saveTabsToCollectionButton() = onView(withId(R.id.add_tabs_to_collections_button))
|
||||
|
||||
private fun tabsCounter() = onView(withId(R.id.tab_button))
|
||||
|
@ -1108,15 +1000,6 @@ private fun recentBookmarksSection() =
|
|||
private fun pocketSection() =
|
||||
mDevice.findObject(UiSelector().textContains(getStringResource(R.string.pocket_stories_header_1)))
|
||||
|
||||
private fun startBrowsingButton(): UiObject {
|
||||
val startBrowsingButton = mDevice.findObject(UiSelector().resourceId("$packageName:id/finish_button"))
|
||||
homeScreenList()
|
||||
.scrollIntoView(startBrowsingButton)
|
||||
homeScreenList()
|
||||
.ensureFullyVisible(startBrowsingButton)
|
||||
return startBrowsingButton
|
||||
}
|
||||
|
||||
private fun sponsoredShortcut(sponsoredShortcutTitle: String) =
|
||||
mDevice.findObject(
|
||||
By
|
||||
|
@ -1127,6 +1010,126 @@ private fun sponsoredShortcut(sponsoredShortcutTitle: String) =
|
|||
private fun storyByTopicItem(composeTestRule: ComposeTestRule, position: Int) =
|
||||
composeTestRule.onNodeWithTag("pocket.categories").onChildAt(position - 1)
|
||||
|
||||
private fun appItemWithResourceId(resourceId: String) =
|
||||
mDevice.findObject(UiSelector().resourceId(resourceId))
|
||||
|
||||
private fun appItemContainingText(itemText: String) =
|
||||
mDevice.findObject(UiSelector().textContains(itemText))
|
||||
|
||||
private fun appItemStateWithResourceId(resourceId: String, state: Boolean) =
|
||||
mDevice.findObject(UiSelector().resourceId(resourceId).checked(state))
|
||||
|
||||
private fun appItemWithResourceIdAndDescription(resourceId: String, description: String) =
|
||||
mDevice.findObject(UiSelector().resourceId(resourceId).descriptionContains(description))
|
||||
|
||||
private fun appItemWithResourceIdAndText(resourceId: String, text: String) =
|
||||
mDevice.findObject(UiSelector().resourceId(resourceId).text(text))
|
||||
|
||||
private fun assertAppItemsWithResourceId(vararg appItems: UiObject) {
|
||||
for (appItem in appItems) {
|
||||
assertTrue(appItem.waitForExists(waitingTime))
|
||||
}
|
||||
}
|
||||
|
||||
private fun assertAppItemsContainingText(vararg appItems: UiObject) {
|
||||
for (appItem in appItems) {
|
||||
assertTrue(appItem.waitForExists(waitingTime))
|
||||
}
|
||||
}
|
||||
|
||||
private fun assertAppItemsStateWithResourceId(vararg appItems: UiObject) {
|
||||
for (appItem in appItems) {
|
||||
assertTrue(appItem.waitForExists(waitingTime))
|
||||
}
|
||||
}
|
||||
|
||||
private fun assertAppItemsWithResourceIdAndDescription(vararg appItems: UiObject) {
|
||||
for (appItem in appItems) {
|
||||
assertTrue(appItem.waitForExists(waitingTime))
|
||||
}
|
||||
}
|
||||
|
||||
private fun assertAppItemsWithResourceIdAndText(vararg appItems: UiObject) {
|
||||
for (appItem in appItems) {
|
||||
assertTrue(appItem.waitForExists(waitingTime))
|
||||
}
|
||||
}
|
||||
|
||||
private val homeScreen =
|
||||
appItemWithResourceId("$packageName:id/homeLayout")
|
||||
private val privateBrowsingButton =
|
||||
appItemWithResourceId("$packageName:id/privateBrowsingButton")
|
||||
private val homepageWordmark =
|
||||
appItemWithResourceId("$packageName:id/wordmark")
|
||||
private val welcomeHeader = appItemContainingText(getStringResource(R.string.onboarding_header_2))
|
||||
private val welcomeSubHeader =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_message))
|
||||
private val chooseThemeHeader =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_theme_picker_header))
|
||||
private val chooseThemeText =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_theme_picker_description_2))
|
||||
private val darkThemeDescription =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_theme_dark_title))
|
||||
private val lightThemeDescription =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_theme_light_title))
|
||||
private val automaticThemeDescription =
|
||||
appItemWithResourceIdAndDescription(
|
||||
"$packageName:id/clickable_region_automatic",
|
||||
"${getStringResource(R.string.onboarding_theme_automatic_title)} ${getStringResource(R.string.onboarding_theme_automatic_summary)}",
|
||||
)
|
||||
private fun darkThemeToggle(isChecked: Boolean) =
|
||||
appItemStateWithResourceId("$packageName:id/theme_dark_radio_button", isChecked)
|
||||
private fun lightThemeToggle(isChecked: Boolean) =
|
||||
appItemStateWithResourceId("$packageName:id/theme_light_radio_button", isChecked)
|
||||
private fun automaticThemeToggle(isChecked: Boolean) =
|
||||
appItemStateWithResourceId("$packageName:id/theme_automatic_radio_button", isChecked)
|
||||
private val toolbarPlacementHeader =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_toolbar_placement_header_1))
|
||||
private val toolbarPlacementDescription =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_toolbar_placement_description))
|
||||
private fun toolbarPlacementBottomRadioButton(isChecked: Boolean) =
|
||||
appItemStateWithResourceId("$packageName:id/toolbar_bottom_radio_button", isChecked)
|
||||
private fun toolbarPlacementTopRadioButton(isChecked: Boolean) =
|
||||
appItemStateWithResourceId("$packageName:id/toolbar_top_radio_button", isChecked)
|
||||
private val toolbarPlacementBottomImage =
|
||||
appItemWithResourceId("$packageName:id/toolbar_bottom_image")
|
||||
private val toolbarPlacementBottomTitle =
|
||||
appItemWithResourceId("$packageName:id/toolbar_bottom_title")
|
||||
private val toolbarPlacementTopTitle =
|
||||
appItemWithResourceId("$packageName:id/toolbar_top_title")
|
||||
private val toolbarPlacementTopImage =
|
||||
appItemWithResourceId("$packageName:id/toolbar_top_image")
|
||||
private val startSyncHeader =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_account_sign_in_header))
|
||||
private val startSyncDescription =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_manual_sign_in_description))
|
||||
private val signInButton =
|
||||
appItemWithResourceId("$packageName:id/fxa_sign_in_button")
|
||||
private val privacyProtectionHeader =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_tracking_protection_header))
|
||||
private val privacyProtectionDescription =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_tracking_protection_description))
|
||||
private fun standardTrackingProtectionToggle(isChecked: Boolean) =
|
||||
appItemStateWithResourceId("$packageName:id/tracking_protection_standard_option", isChecked)
|
||||
private fun strictTrackingProtectionToggle(isChecked: Boolean) =
|
||||
appItemStateWithResourceId("$packageName:id/tracking_protection_strict_default", isChecked)
|
||||
private val privacyNoticeHeader =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_privacy_notice_header_1))
|
||||
private val privacyNoticeDescription =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_privacy_notice_description))
|
||||
private val privacyNoticeButton =
|
||||
appItemWithResourceId("$packageName:id/read_button")
|
||||
private val startBrowsingButton =
|
||||
appItemWithResourceId("$packageName:id/finish_button")
|
||||
private val conclusionHeader =
|
||||
appItemContainingText(getStringResource(R.string.onboarding_conclusion_header))
|
||||
private val navigationToolbar =
|
||||
appItemWithResourceId("$packageName:id/toolbar")
|
||||
private val menuButton =
|
||||
appItemWithResourceId("$packageName:id/menuButton")
|
||||
private fun tabCounter(numberOfOpenTabs: String) =
|
||||
appItemWithResourceIdAndText("$packageName:id/counter_text", numberOfOpenTabs)
|
||||
|
||||
val deleteFromHistory =
|
||||
onView(
|
||||
allOf(
|
||||
|
|
|
@ -4,9 +4,6 @@
|
|||
|
||||
package org.mozilla.fenix.ui.util
|
||||
|
||||
const val STRING_ONBOARDING_ACCOUNT_SIGN_IN_HEADER = "Pick up where you left off"
|
||||
const val STRING_ONBOARDING_TRACKING_PROTECTION_HEADER = "Privacy protection by default"
|
||||
const val STRING_ONBOARDING_TOOLBAR_PLACEMENT_HEADER = "Pick your toolbar placement"
|
||||
const val FRENCH_LANGUAGE_HEADER = "Langues"
|
||||
const val ROMANIAN_LANGUAGE_HEADER = "Limbă"
|
||||
const val ARABIC_LANGUAGE_HEADER = "اللغة"
|
||||
|
|
Loading…
Reference in New Issue