Bug 1829359 - Refactor clickPageObject methods in UI tests and other repetitive methods

fenix/114.1.0
oana.horvath 1 year ago committed by mergify[bot]
parent 3fcc8890b0
commit b54df009c3

@ -45,6 +45,9 @@ object MatcherHelper {
fun itemWithResIdAndText(resourceId: String, text: String) =
mDevice.findObject(UiSelector().resourceId(resourceId).text(text))
fun itemWithResIdContainingText(resourceId: String, text: String) =
mDevice.findObject(UiSelector().resourceId(resourceId).textContains(text))
fun assertItemWithResIdExists(vararg appItems: UiObject, exists: Boolean = true) {
if (exists) {
for (appItem in appItems) {

@ -65,11 +65,13 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.Constants.PackageName.YOUTUBE_APP
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeShort
import org.mozilla.fenix.helpers.ext.waitNotNull
import org.mozilla.fenix.helpers.idlingresource.NetworkConnectionIdlingResource
import org.mozilla.fenix.ui.robots.BrowserRobot
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.utils.IntentUtils
import org.mozilla.gecko.util.ThreadUtils
import java.io.File
@ -127,6 +129,9 @@ object TestHelper {
)
}
fun clickSnackbarButton(expectedText: String) =
clickPageObject(itemWithResIdAndText("$packageName:id/snackbar_btn", expectedText))
fun waitUntilSnackbarGone() {
mDevice.findObject(
UiSelector().resourceId("$packageName:id/snackbar_layout"),

@ -9,9 +9,11 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper
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.searchScreen
@ -95,7 +97,7 @@ class AddToHomeScreenTest {
fun addPDFToHomeScreenTest() {
navigationToolbar {
}.enterURLAndEnterToBrowser(downloadTestPage.toUri()) {
clickLinkMatchingText(pdfFileName)
clickPageObject(itemContainingText(pdfFileName))
verifyUrl(pdfFileURL)
verifyPageContent(pdfFileContent)
}.openThreeDotMenu {

@ -8,8 +8,12 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdContainingText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.exitMenu
import org.mozilla.fenix.helpers.TestHelper.packageName
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
@ -60,9 +64,14 @@ class AddressAutofillTest {
}
navigationToolbar {
}.enterURLAndEnterToBrowser(addressFormPage.url) {
clickStreetAddressTextBox()
clickPageObject(itemWithResId("streetAddress"))
clickSelectAddressButton()
clickAddressSuggestion("Harrison Street")
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/address_name",
"Harrison Street",
),
)
verifyAutofilledAddress("Harrison Street")
}
}
@ -164,7 +173,7 @@ class AddressAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(addressFormPage.url) {
clickStreetAddressTextBox()
clickPageObject(itemWithResId("streetAddress"))
verifySelectAddressButtonExists(true)
}.openThreeDotMenu {
}.openSettings {
@ -177,7 +186,7 @@ class AddressAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(addressFormPage.url) {
clickStreetAddressTextBox()
clickPageObject(itemWithResId("streetAddress"))
verifySelectAddressButtonExists(false)
}
}
@ -211,7 +220,7 @@ class AddressAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(addressFormPage.url) {
clickStreetAddressTextBox()
clickPageObject(itemWithResId("streetAddress"))
clickSelectAddressButton()
}.clickManageAddressButton {
verifyAutofillToolbarTitle()
@ -264,14 +273,24 @@ class AddressAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(addressFormPage.url) {
clickStreetAddressTextBox()
clickPageObject(itemWithResId("streetAddress"))
clickSelectAddressButton()
clickAddressSuggestion("Harrison Street")
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/address_name",
"Harrison Street",
),
)
verifyAutofilledAddress("Harrison Street")
clearAddressForm()
clickStreetAddressTextBox()
clickPageObject(itemWithResId("streetAddress"))
clickSelectAddressButton()
clickAddressSuggestion("Fort Street")
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/address_name",
"Fort Street",
),
)
verifyAutofilledAddress("Fort Street")
}
}
@ -358,9 +377,14 @@ class AddressAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(addressFormPage.url) {
clickStreetAddressTextBox()
clickPageObject(itemWithResId("streetAddress"))
clickSelectAddressButton()
clickAddressSuggestion("Harrison Street")
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/address_name",
"Harrison Street",
),
)
verifyAutofilledAddress("Harrison Street")
setTextForApartmentTextBox("Ap. 07")
verifyManuallyFilledAddress("Ap. 07")

@ -24,6 +24,7 @@ import org.mozilla.fenix.helpers.RecyclerViewIdlingResource
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
import org.mozilla.fenix.helpers.TestHelper.longTapSelectItem
import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources
import org.mozilla.fenix.ui.robots.bookmarksMenu

@ -16,6 +16,7 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.collectionRobot
import org.mozilla.fenix.ui.robots.homeScreen
@ -488,7 +489,7 @@ class CollectionTest {
homeScreen {
verifySnackBarText("Collection deleted")
clickUndoSnackBarButton()
clickSnackbarButton("UNDO")
verifyCollectionIsDisplayed(collectionName, true)
}
}

@ -16,10 +16,16 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
import org.mozilla.fenix.ui.robots.clickContextMenuItem
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.downloadRobot
import org.mozilla.fenix.ui.robots.longClickPageObject
import org.mozilla.fenix.ui.robots.navigationToolbar
import org.mozilla.fenix.ui.robots.shareOverlay
/**
* Tests for verifying basic functionality of content context menus
@ -72,9 +78,9 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("Link 1")
longClickPageObject(itemWithText("Link 1"))
verifyLinkContextMenuItems(genericURL.url)
clickContextOpenLinkInNewTab()
clickContextMenuItem("Open link in new tab")
verifySnackBarText("New tab opened")
clickSnackbarButton("SWITCH")
verifyUrl(genericURL.url.toString())
@ -96,9 +102,9 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("Link 2")
longClickPageObject(itemWithText("Link 2"))
verifyLinkContextMenuItems(genericURL.url)
clickContextOpenLinkInPrivateTab()
clickContextMenuItem("Open link in private tab")
verifySnackBarText("New private tab opened")
clickSnackbarButton("SWITCH")
verifyUrl(genericURL.url.toString())
@ -118,9 +124,9 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("Link 3")
longClickPageObject(itemWithText("Link 3"))
verifyLinkContextMenuItems(genericURL.url)
clickContextCopyLink()
clickContextMenuItem("Copy link")
verifySnackBarText("Link copied to clipboard")
}.openNavigationToolbar {
}.visitLinkFromClipboard {
@ -135,9 +141,9 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
longClickMatchingText("Link 3")
longClickPageObject(itemWithText("Link 3"))
verifyLinkContextMenuItems(genericURL.url)
clickContextCopyLink()
clickContextMenuItem("Copy link")
verifySnackBarText("Link copied to clipboard")
}.openNavigationToolbar {
}.visitLinkFromClipboard {
@ -160,9 +166,12 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("Link 1")
longClickPageObject(itemWithText("Link 1"))
verifyLinkContextMenuItems(genericURL.url)
clickContextShareLink(genericURL.url) // verify share intent is matched with associated URL
clickContextMenuItem("Share link")
shareOverlay {
verifyShareLinkIntent(genericURL.url)
}
}
}
@ -176,9 +185,9 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("test_link_image")
longClickPageObject(itemWithText("test_link_image"))
verifyLinkImageContextMenuItems(imageResource.url)
clickContextOpenImageNewTab()
clickContextMenuItem("Open image in new tab")
verifySnackBarText("New tab opened")
clickSnackbarButton("SWITCH")
verifyUrl(imageResource.url.toString())
@ -195,9 +204,9 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("test_link_image")
longClickPageObject(itemWithText("test_link_image"))
verifyLinkImageContextMenuItems(imageResource.url)
clickContextCopyImageLocation()
clickContextMenuItem("Copy image location")
verifySnackBarText("Link copied to clipboard")
}.openNavigationToolbar {
}.visitLinkFromClipboard {
@ -215,9 +224,9 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("test_link_image")
longClickPageObject(itemWithText("test_link_image"))
verifyLinkImageContextMenuItems(imageResource.url)
clickContextSaveImage()
clickContextMenuItem("Save image")
}
downloadRobot {
@ -240,13 +249,13 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(pageLinks.url) {
mDevice.waitForIdle()
longClickLink("Link 1")
longClickPageObject(itemWithText("Link 1"))
verifyLinkContextMenuItems(genericURL.url)
dismissContentContextMenu()
longClickLink("test_link_image")
longClickPageObject(itemWithText("test_link_image"))
verifyLinkImageContextMenuItems(imageResource.url)
dismissContentContextMenu()
longClickLink("test_no_link_image")
longClickPageObject(itemWithText("test_no_link_image"))
verifyNoLinkImageContextMenuItems(imageResource.url)
}
}
@ -258,8 +267,8 @@ class ContextMenusTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
longClickLink("Wikipedia link")
clickPageObject(itemWithText("PDF file"))
longClickPageObject(itemWithText("Wikipedia link"))
verifyLinkContextMenuItems("wikipedia.org".toUri(), false)
dismissContentContextMenu()
// Some options are missing from the linked and non liked images context menus in PDF files

@ -9,11 +9,16 @@ import org.junit.After
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.R
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithDescription
import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
import org.mozilla.fenix.helpers.TestHelper.getStringResource
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.navigationToolbar
/**
@ -68,7 +73,7 @@ class ContextualHintsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericPage.url) {
verifyCookiesProtectionHintIsDisplayed(true)
clickTotalCookieProtectionLearnMoreLink()
clickPageObject(itemContainingText(getStringResource(R.string.tcp_cfr_learn_more)))
verifyUrl("support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-android")
}
}
@ -81,7 +86,7 @@ class ContextualHintsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericPage.url) {
verifyCookiesProtectionHintIsDisplayed(true)
clickTotalCookieProtectionCloseButton()
clickPageObject(itemWithDescription(getStringResource(R.string.mozac_cfr_dismiss_button_content_description)))
verifyCookiesProtectionHintIsDisplayed(false)
}
}

@ -13,8 +13,11 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.getStringResource
import org.mozilla.fenix.helpers.TestHelper.packageName
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
@ -69,7 +72,7 @@ class CrashReportingTest {
navigationToolbar {
}.openTabCrashReporter {
clickTabCrashedRestoreButton()
clickPageObject(itemWithResId("$packageName:id/restoreTabButton"))
verifyPageContent(website.content)
}
}

@ -8,10 +8,14 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdContainingText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.bringAppToForeground
import org.mozilla.fenix.helpers.TestHelper.exitMenu
import org.mozilla.fenix.helpers.TestHelper.packageName
import org.mozilla.fenix.helpers.TestHelper.putAppToBackground
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
import java.time.LocalDate
@ -78,9 +82,14 @@ class CreditCardAutofillTest {
}
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickSelectCreditCardButton()
clickCreditCardSuggestion(MockCreditCard1.MOCK_LAST_CARD_DIGITS)
clickPageObject(itemWithResId("cardNumber"))
clickPageObject(itemWithResId("$packageName:id/select_credit_card_header"))
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/credit_card_number",
MockCreditCard1.MOCK_LAST_CARD_DIGITS,
),
)
verifyAutofilledCreditCard(MockCreditCard1.MOCK_CREDIT_CARD_NUMBER)
}
}
@ -221,8 +230,8 @@ class CreditCardAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickSelectCreditCardButton()
clickPageObject(itemWithResId("cardNumber"))
clickPageObject(itemWithResId("$packageName:id/select_credit_card_header"))
}.clickManageCreditCardsButton {
}.goBackToBrowser {
verifySelectCreditCardPromptExists(false)
@ -251,7 +260,7 @@ class CreditCardAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickPageObject(itemWithResId("cardNumber"))
verifySelectCreditCardPromptExists(true)
}.openThreeDotMenu {
}.openSettings {
@ -264,7 +273,7 @@ class CreditCardAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickPageObject(itemWithResId("cardNumber"))
verifySelectCreditCardPromptExists(false)
}
}
@ -339,9 +348,14 @@ class CreditCardAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickSelectCreditCardButton()
clickCreditCardSuggestion(MockCreditCard2.MOCK_LAST_CARD_DIGITS)
clickPageObject(itemWithResId("cardNumber"))
clickPageObject(itemWithResId("$packageName:id/select_credit_card_header"))
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/credit_card_number",
MockCreditCard2.MOCK_LAST_CARD_DIGITS,
),
)
verifyAutofilledCreditCard(MockCreditCard2.MOCK_CREDIT_CARD_NUMBER)
}
}
@ -441,13 +455,18 @@ class CreditCardAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickSelectCreditCardButton()
clickPageObject(itemWithResId("cardNumber"))
clickPageObject(itemWithResId("$packageName:id/select_credit_card_header"))
verifyCreditCardSuggestion(
MockCreditCard1.MOCK_LAST_CARD_DIGITS,
MockCreditCard2.MOCK_LAST_CARD_DIGITS,
)
clickCreditCardSuggestion(MockCreditCard2.MOCK_LAST_CARD_DIGITS)
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/credit_card_number",
MockCreditCard2.MOCK_LAST_CARD_DIGITS,
),
)
verifyAutofilledCreditCard(MockCreditCard2.MOCK_CREDIT_CARD_NUMBER)
}
}
@ -463,7 +482,7 @@ class CreditCardAutofillTest {
MockCreditCard1.MOCK_NAME_ON_CARD,
MockCreditCard1.MOCK_EXPIRATION_MONTH_AND_YEAR,
)
clickCancelCreditCardPromptButton()
clickPageObject(itemWithResId("$packageName:id/save_cancel"))
verifyUpdateOrSaveCreditCardPromptExists(exists = false)
}.openThreeDotMenu {
}.openSettings {
@ -483,7 +502,7 @@ class CreditCardAutofillTest {
MockCreditCard1.MOCK_NAME_ON_CARD,
MockCreditCard1.MOCK_EXPIRATION_MONTH_AND_YEAR,
)
clickUpdateOrSaveCreditCardPromptButton()
clickPageObject(itemWithResId("$packageName:id/save_confirm"))
verifyUpdateOrSaveCreditCardPromptExists(exists = false)
}.openThreeDotMenu {
}.openSettings {
@ -523,13 +542,18 @@ class CreditCardAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickSelectCreditCardButton()
clickCreditCardSuggestion(MockCreditCard2.MOCK_LAST_CARD_DIGITS)
clickPageObject(itemWithResId("cardNumber"))
clickPageObject(itemWithResId("$packageName:id/select_credit_card_header"))
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/credit_card_number",
MockCreditCard2.MOCK_LAST_CARD_DIGITS,
),
)
verifyAutofilledCreditCard(MockCreditCard2.MOCK_CREDIT_CARD_NUMBER)
changeCreditCardExpiryDate(MockCreditCard1.MOCK_EXPIRATION_MONTH_AND_YEAR)
clickCreditCardFormSubmitButton()
clickCancelCreditCardPromptButton()
clickPageObject(itemWithResId("$packageName:id/save_cancel"))
verifyUpdateOrSaveCreditCardPromptExists(false)
}.openThreeDotMenu {
}.openSettings {
@ -568,13 +592,18 @@ class CreditCardAutofillTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(creditCardFormPage.url) {
clickCreditCardNumberTextBox()
clickSelectCreditCardButton()
clickCreditCardSuggestion(MockCreditCard2.MOCK_LAST_CARD_DIGITS)
clickPageObject(itemWithResId("cardNumber"))
clickPageObject(itemWithResId("$packageName:id/select_credit_card_header"))
clickPageObject(
itemWithResIdContainingText(
"$packageName:id/credit_card_number",
MockCreditCard2.MOCK_LAST_CARD_DIGITS,
),
)
verifyAutofilledCreditCard(MockCreditCard2.MOCK_CREDIT_CARD_NUMBER)
changeCreditCardExpiryDate(MockCreditCard1.MOCK_EXPIRATION_MONTH_AND_YEAR)
clickCreditCardFormSubmitButton()
clickUpdateOrSaveCreditCardPromptButton()
clickPageObject(itemWithResId("$packageName:id/save_confirm"))
verifyUpdateOrSaveCreditCardPromptExists(false)
}.openThreeDotMenu {
}.openSettings {

@ -16,11 +16,15 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelperDelegate
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.createCustomTabIntent
import org.mozilla.fenix.helpers.TestHelper.openAppFromExternalLink
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.customTabScreen
import org.mozilla.fenix.ui.robots.longClickPageObject
import org.mozilla.fenix.ui.robots.navigationToolbar
import org.mozilla.fenix.ui.robots.notificationShade
import org.mozilla.fenix.ui.robots.openEditURLView
@ -78,7 +82,7 @@ class CustomTabsTest {
customTabScreen {
waitForPageToLoad()
clickLinkMatchingText("External link")
clickPageObject(itemContainingText("External link"))
waitForPageToLoad()
verifyCustomTabToolbarTitle(externalLinkURL)
}
@ -101,7 +105,7 @@ class CustomTabsTest {
browserScreen {
verifySaveLoginPromptIsDisplayed()
saveLoginFromPrompt("Save")
clickPageObject(itemWithText("Save"))
}
openAppFromExternalLink(loginPage)
@ -164,7 +168,7 @@ class CustomTabsTest {
}
browserScreen {
longClickMatchingText("content")
longClickPageObject(itemContainingText("content"))
}.clickShareSelectedText {
verifyAndroidShareLayout()
}

@ -14,11 +14,14 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.assertExternalAppOpens
import org.mozilla.fenix.helpers.TestHelper.deleteDownloadedFileOnStorage
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.downloadRobot
import org.mozilla.fenix.ui.robots.navigationToolbar
import org.mozilla.fenix.ui.robots.notificationShade
@ -214,7 +217,7 @@ class DownloadTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
clickPageObject(itemContainingText("PDF file"))
verifyPageContent("Washington Crossing the Delaware")
}
}
@ -227,7 +230,7 @@ class DownloadTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
clickPageObject(itemWithText("PDF file"))
}.openThreeDotMenu {
}.clickShareButton {
}.clickSaveAsPDF {

@ -16,15 +16,23 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper
import org.mozilla.fenix.helpers.TestHelper.exitMenu
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.helpers.TestHelper.packageName
import org.mozilla.fenix.helpers.TestHelper.restartApp
import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clearTextFieldItem
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.setPageObjectText
/**
* Tests for verifying:
@ -125,8 +133,9 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
// Click save to save the login
saveLoginFromPrompt("Save")
clickPageObject(itemWithText("Save"))
}
browserScreen {
}.openThreeDotMenu {
@ -152,8 +161,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials(userName, password)
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), userName)
setPageObjectText(itemWithResId("password"), password)
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -175,7 +187,7 @@ class LoginsTest {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
clickSubmitLoginButton()
// Don't save the login, add to exceptions
saveLoginFromPrompt("Never save")
clickPageObject(itemWithText("Never save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -203,16 +215,17 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
// Click Save to save the login
saveLoginFromPrompt("Save")
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
enterPassword("test")
mDevice.waitForIdle()
clickSubmitLoginButton()
verifyUpdateLoginPromptIsShown()
verifySaveLoginPromptIsDisplayed()
// Click Update to change the saved password
saveLoginFromPrompt("Update")
clickPageObject(itemWithText("Update"))
}.openThreeDotMenu {
}.openSettings {
scrollToElementByText("Logins and passwords")
@ -232,20 +245,35 @@ class LoginsTest {
@Test
fun verifyMultipleLoginsSelectionsTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
val firstUser = "mozilla"
val firstPass = "firefox"
val secondUser = "fenix"
val secondPass = "pass"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
fillAndSubmitLoginCredentials("firefox", "mozilla")
saveLoginFromPrompt("Save")
clearUserNameLoginCredential()
setPageObjectText(itemWithResId("username"), firstUser)
setPageObjectText(itemWithResId("password"), firstPass)
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
setPageObjectText(itemWithResId("username"), secondUser)
setPageObjectText(itemWithResId("password"), secondPass)
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
clearTextFieldItem(itemWithResId("username"))
clickSuggestedLoginsButton()
verifySuggestedUserName("firefox")
verifySuggestedUserName("mozilla")
clickLoginSuggestion("mozilla")
clickShowPasswordButton()
verifyPrefilledLoginCredentials("mozilla", "firefox", true)
verifySuggestedUserName(firstUser)
verifySuggestedUserName(secondUser)
clickPageObject(
itemWithResIdAndText(
"$packageName:id/username",
firstUser,
),
)
clickPageObject(itemWithResId("togglePassword"))
verifyPrefilledLoginCredentials(firstUser, firstPass, true)
}
}
@ -256,8 +284,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -281,8 +312,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -303,7 +337,7 @@ class LoginsTest {
}.openThreeDotMenu {
}.refreshPage {
waitForPageToLoad()
clickShowPasswordButton()
clickPageObject(itemWithResId("togglePassword"))
verifyPrefilledLoginCredentials("android", "fenix", true)
}
}
@ -315,8 +349,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -339,8 +376,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -365,8 +405,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -392,7 +435,7 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.url) {
clickSubmitLoginButton()
saveLoginFromPrompt("Save")
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -443,8 +486,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openTabDrawer {
closeTab()
}
@ -494,18 +540,23 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openTabDrawer {
closeTab()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
clickShowPasswordButton()
fillAndSubmitLoginCredentials("mozilla", "fenix")
verifyUpdateLoginPromptIsShown()
saveLoginFromPrompt("Dont update")
clickPageObject(itemWithResId("togglePassword"))
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "fenix")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Dont update"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
@ -526,11 +577,15 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
saveLoginFromPrompt("Save")
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
fillAndSubmitLoginCredentials("android", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "android")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
@ -568,11 +623,15 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
saveLoginFromPrompt("Save")
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
fillAndSubmitLoginCredentials("android", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "android")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
@ -610,11 +669,15 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
saveLoginFromPrompt("Save")
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
@ -652,11 +715,15 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
saveLoginFromPrompt("Save")
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
fillAndSubmitLoginCredentials("mozilla", "firefox")
saveLoginFromPrompt("Save")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
@ -712,11 +779,11 @@ class LoginsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
clickUsernameTextField()
clickPageObject(MatcherHelper.itemWithResId("username"))
clickSuggestedLoginsButton()
verifySuggestedUserName("mozilla")
clickLoginSuggestion("mozilla")
clickShowPasswordButton()
clickPageObject(itemWithResIdAndText("$packageName:id/username", "mozilla"))
clickPageObject(itemWithResId("togglePassword"))
verifyPrefilledLoginCredentials("mozilla", "firefox", true)
}
}

@ -17,9 +17,11 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
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.notificationShade
@ -70,7 +72,7 @@ class MediaNotificationTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(videoTestPage.url) {
mDevice.waitForIdle()
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}.openNotificationShade {
verifySystemNotificationExists(videoTestPage.title)
@ -104,7 +106,7 @@ class MediaNotificationTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(audioTestPage.url) {
mDevice.waitForIdle()
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}.openNotificationShade {
verifySystemNotificationExists(audioTestPage.title)
@ -140,7 +142,7 @@ class MediaNotificationTest {
}.openNewTab {
}.submitQuery(audioTestPage.url.toString()) {
mDevice.waitForIdle()
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}.openNotificationShade {
verifySystemNotificationExists("A site is playing media")

@ -15,8 +15,10 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.runWithSystemLocaleChanged
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
import java.util.Locale
@ -192,7 +194,7 @@ class NavigationToolbarTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
clickPageObject(itemWithText("PDF file"))
}.openThreeDotMenu {
verifyThreeDotMenuExists()
verifyFindInPageButton()

@ -8,14 +8,20 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.Constants.PackageName.GMAIL_APP
import org.mozilla.fenix.helpers.Constants.PackageName.PHONE_APP
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestHelper
import org.mozilla.fenix.helpers.TestHelper.assertNativeAppOpens
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.ui.robots.addToHomeScreen
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.customTabScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
import org.mozilla.fenix.ui.robots.pwaScreen
import org.mozilla.fenix.ui.robots.setPageObjectText
class PwaTest {
/* Updated externalLinks.html to v2.0,
@ -42,7 +48,7 @@ class PwaTest {
}.clickInstall {
clickAddAutomaticallyButton()
}.openHomeScreenShortcut(shortcutTitle) {
clickLinkMatchingText("External link")
clickPageObject(itemContainingText("External link"))
}
customTabScreen {
@ -62,7 +68,7 @@ class PwaTest {
}.clickInstall {
clickAddAutomaticallyButton()
}.openHomeScreenShortcut(shortcutTitle) {
clickLinkMatchingText("Email link")
clickPageObject(itemContainingText("Email link"))
assertNativeAppOpens(GMAIL_APP, emailLink)
}
}
@ -78,8 +84,8 @@ class PwaTest {
}.clickInstall {
clickAddAutomaticallyButton()
}.openHomeScreenShortcut(shortcutTitle) {
clickLinkMatchingText("Telephone link")
confirmOpenLinkInAnotherApp()
clickPageObject(itemContainingText("Telephone link"))
clickPageObject(itemWithResIdAndText("android:id/button1", "OPEN"))
assertNativeAppOpens(PHONE_APP, phoneLink)
}
}
@ -117,9 +123,11 @@ class PwaTest {
clickAddAutomaticallyButton()
}.openHomeScreenShortcut(shortcutTitle) {
mDevice.waitForIdle()
fillAndSubmitLoginCredentials("mozilla", "firefox")
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
saveLoginFromPrompt("Save")
clickPageObject(itemWithText("Save"))
TestHelper.openAppFromExternalLink(pwaPage)
browserScreen {

@ -24,17 +24,23 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.Constants.PackageName.ANDROID_SETTINGS
import org.mozilla.fenix.helpers.Constants.searchEngineCodes
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.SearchDispatcher
import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
import org.mozilla.fenix.helpers.TestHelper.appContext
import org.mozilla.fenix.helpers.TestHelper.assertNativeAppOpens
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
import org.mozilla.fenix.helpers.TestHelper.denyPermission
import org.mozilla.fenix.helpers.TestHelper.exitMenu
import org.mozilla.fenix.helpers.TestHelper.grantSystemPermission
import org.mozilla.fenix.helpers.TestHelper.longTapSelectItem
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.helpers.TestHelper.setCustomSearchEngine
import org.mozilla.fenix.ui.robots.clickContextMenuItem
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.longClickPageObject
import org.mozilla.fenix.ui.robots.multipleSelectionToolbar
/**
@ -179,13 +185,13 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
pressBack()
longClickLink("Link 2")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
}.openTabDrawer {
@ -217,23 +223,23 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
pressBack()
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
pressBack()
longClickLink("Link 2")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
pressBack()
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
}.openTabDrawer {
@ -265,10 +271,10 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
clickLinkMatchingText("Link 1")
clickPageObject(itemContainingText("Link 1"))
waitForPageToLoad()
pressBack()
clickLinkMatchingText("Link 2")
clickPageObject(itemContainingText("Link 2"))
waitForPageToLoad()
}.openTabDrawer {
}.openTabsListThreeDotMenu {
@ -296,10 +302,10 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
longClickLink("Link 1")
clickContextOpenLinkInPrivateTab()
longClickLink("Link 2")
clickContextOpenLinkInPrivateTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in private tab")
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in private tab")
}.openTabDrawer {
}.toggleToPrivateTabs {
}.openTabWithIndex(0) {
@ -337,13 +343,13 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
mDevice.pressBack()
longClickLink("Link 2")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
}.openTabDrawer {
@ -384,13 +390,13 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
mDevice.pressBack()
longClickLink("Link 2")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
}.openTabDrawer {
@ -432,13 +438,13 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
mDevice.pressBack()
longClickLink("Link 2")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
}.openTabDrawer {
@ -485,13 +491,13 @@ class SearchTest {
homeScreen {
}.openSearch {
}.submitQuery(queryString) {
longClickLink("Link 1")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 1"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
mDevice.pressBack()
longClickLink("Link 2")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
waitForPageToLoad()
}.openTabDrawer {

@ -16,10 +16,13 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.assertYoutubeAppOpens
import org.mozilla.fenix.helpers.TestHelper.exitMenu
import org.mozilla.fenix.helpers.TestHelper.runWithCondition
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
@ -139,7 +142,7 @@ class SettingsAdvancedTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
waitForPageToLoad()
verifyUrl("youtube.com")
}
@ -173,7 +176,7 @@ class SettingsAdvancedTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
waitForPageToLoad()
verifyUrl("youtube.com")
}
@ -209,18 +212,18 @@ class SettingsAdvancedTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
verifyOpenLinkInAnotherAppPrompt()
cancelOpenLinkInAnotherApp()
clickPageObject(itemWithResIdAndText("android:id/button2", "CANCEL"))
waitForPageToLoad()
verifyUrl("youtube.com")
}
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
verifyOpenLinkInAnotherAppPrompt()
confirmOpenLinkInAnotherApp()
clickPageObject(itemWithResIdAndText("android:id/button1", "OPEN"))
mDevice.waitForIdle()
assertYoutubeAppOpens()
}
@ -259,18 +262,18 @@ class SettingsAdvancedTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
verifyPrivateBrowsingOpenLinkInAnotherAppPrompt("youtube.com")
cancelOpenLinkInAnotherApp()
clickPageObject(itemWithResIdAndText("android:id/button2", "CANCEL"))
waitForPageToLoad()
verifyUrl("youtube.com")
}
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
verifyPrivateBrowsingOpenLinkInAnotherAppPrompt("youtube.com")
confirmOpenLinkInAnotherApp()
clickPageObject(itemWithResIdAndText("android:id/button1", "OPEN"))
mDevice.waitForIdle()
assertYoutubeAppOpens()
}
@ -305,7 +308,7 @@ class SettingsAdvancedTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
mDevice.waitForIdle()
assertYoutubeAppOpens()
}
@ -343,18 +346,18 @@ class SettingsAdvancedTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
verifyPrivateBrowsingOpenLinkInAnotherAppPrompt("youtube.com")
cancelOpenLinkInAnotherApp()
clickPageObject(itemWithResIdAndText("android:id/button2", "CANCEL"))
waitForPageToLoad()
verifyUrl("youtube.com")
}
navigationToolbar {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
clickLinkMatchingText("Youtube link")
clickPageObject(itemContainingText("Youtube link"))
verifyPrivateBrowsingOpenLinkInAnotherAppPrompt("youtube.com")
confirmOpenLinkInAnotherApp()
clickPageObject(itemWithResIdAndText("android:id/button1", "OPEN"))
mDevice.waitForIdle()
assertYoutubeAppOpens()
}

@ -13,6 +13,7 @@ import org.mozilla.fenix.R
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestAssetHelper.getStorageTestAsset
import org.mozilla.fenix.helpers.TestHelper.exitMenu
@ -21,6 +22,7 @@ import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.helpers.TestHelper.restartApp
import org.mozilla.fenix.helpers.TestHelper.setNetworkEnabled
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.settingsScreen
@ -211,7 +213,7 @@ class SettingsDeleteBrowsingDataTest {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(cookiesTestPage) {
verifyPageContent("No cookies set")
clickSetCookiesButton()
clickPageObject(itemWithResId("setCookies"))
verifyPageContent("user=android")
}.openThreeDotMenu {
}.openSettings {

@ -10,8 +10,10 @@ import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.TestHelper.exitMenu
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
@ -82,11 +84,11 @@ class SettingsHTTPSOnlyModeTest {
verifyPageContent(httpsOnlyErrorMessage)
verifyPageContent(httpsOnlyErrorMessage2)
verifyPageContent(httpsOnlyBackButton)
clickLinkMatchingText(httpsOnlyBackButton)
clickPageObject(itemContainingText(httpsOnlyBackButton))
verifyPageContent("Example Domain")
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
clickLinkMatchingText(httpsOnlyContinueButton)
clickPageObject(itemContainingText(httpsOnlyContinueButton))
verifyPageContent("http.badssl.com")
}
}
@ -107,7 +109,7 @@ class SettingsHTTPSOnlyModeTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
verifyPageContent(httpsOnlyErrorTitle)
clickLinkMatchingText(httpsOnlyContinueButton)
clickPageObject(itemContainingText(httpsOnlyContinueButton))
verifyPageContent("http.badssl.com")
}.openTabDrawer {
closeTab()
@ -148,11 +150,11 @@ class SettingsHTTPSOnlyModeTest {
verifyPageContent(httpsOnlyErrorMessage)
verifyPageContent(httpsOnlyErrorMessage2)
verifyPageContent(httpsOnlyBackButton)
clickLinkMatchingText(httpsOnlyBackButton)
clickPageObject(itemContainingText(httpsOnlyBackButton))
verifyPageContent("Example Domain")
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(insecureHttpPage.toUri()) {
clickLinkMatchingText(httpsOnlyContinueButton)
clickPageObject(itemContainingText(httpsOnlyContinueButton))
verifyPageContent("http.badssl.com")
}
}

@ -19,12 +19,14 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
import org.mozilla.fenix.helpers.TestAssetHelper.getMutedVideoPageAsset
import org.mozilla.fenix.helpers.TestAssetHelper.getVideoPageAsset
import org.mozilla.fenix.helpers.TestHelper.exitMenu
import org.mozilla.fenix.helpers.TestHelper.grantSystemPermission
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
@ -131,14 +133,14 @@ class SettingsSitePermissionsTest {
}.enterURLAndEnterToBrowser(videoTestPage.url) {
try {
verifyPageContent(videoTestPage.content)
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
} catch (e: java.lang.AssertionError) {
navigationToolbar {
}.openThreeDotMenu {
}.refreshPage {
verifyPageContent(videoTestPage.content)
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}
}
@ -252,14 +254,14 @@ class SettingsSitePermissionsTest {
}.enterURLAndEnterToBrowser(videoTestPage.url) {
try {
verifyPageContent(videoTestPage.content)
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
} catch (e: java.lang.AssertionError) {
navigationToolbar {
}.openThreeDotMenu {
}.refreshPage {
verifyPageContent(videoTestPage.content)
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}
}
@ -282,14 +284,14 @@ class SettingsSitePermissionsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(mutedVideoTestPage.url) {
verifyPageContent("Media file not playing")
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
try {
verifyPageContent("Media file is playing")
} catch (e: java.lang.AssertionError) {
navigationToolbar {
}.openThreeDotMenu {
}.refreshPage {
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
verifyPageContent("Media file is playing")
}
}

@ -20,6 +20,7 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.MockLocationUpdatesRule
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
@ -27,6 +28,7 @@ import org.mozilla.fenix.helpers.TestHelper.appContext
import org.mozilla.fenix.helpers.TestHelper.assertExternalAppOpens
import org.mozilla.fenix.helpers.TestHelper.grantSystemPermission
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.navigationToolbar
/**
@ -316,7 +318,7 @@ class SitePermissionsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(testPage.url) {
clickUploadButton()
clickPageObject(itemWithResId("upload_file"))
grantSystemPermission()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
assertExternalAppOpens("com.google.android.documentsui")

@ -25,6 +25,7 @@ import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.RecyclerViewIdlingResource
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
@ -33,6 +34,7 @@ import org.mozilla.fenix.helpers.TestHelper.createCustomTabIntent
import org.mozilla.fenix.helpers.TestHelper.registerAndCleanupIdlingResources
import org.mozilla.fenix.helpers.ViewVisibilityIdlingResource
import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.customTabScreen
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
@ -441,7 +443,7 @@ class SmokeTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(audioTestPage.url) {
mDevice.waitForIdle()
clickMediaPlayerPlayButton()
clickPageObject(itemWithText("Play"))
assertPlaybackState(browserStore, MediaSession.PlaybackState.PLAYING)
}.openTabDrawer {
verifyTabMediaControlButtonState("Pause")

@ -11,9 +11,14 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.ui.robots.clickContextMenuItem
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.longClickPageObject
import org.mozilla.fenix.ui.robots.navigationToolbar
import org.mozilla.fenix.ui.robots.openEditURLView
import org.mozilla.fenix.ui.robots.searchScreen
@ -50,7 +55,9 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
longClickAndCopyText("content", true)
longClickPageObject(itemContainingText("content"))
clickContextMenuItem("Select all")
clickContextMenuItem("Copy")
}.openNavigationToolbar {
openEditURLView()
}
@ -72,7 +79,8 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
longClickAndCopyText("content")
longClickPageObject(itemContainingText("content"))
clickContextMenuItem("Copy")
}.openNavigationToolbar {
openEditURLView()
}
@ -92,7 +100,7 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
longClickLink(genericURL.content)
longClickPageObject(itemWithText(genericURL.content))
}.clickShareSelectedText {
verifyAndroidShareLayout()
}
@ -105,7 +113,8 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
longClickAndSearchText("Search", "content")
longClickPageObject(itemContainingText("content"))
clickContextMenuItem("Search")
mDevice.waitForIdle()
verifyTabCounter("2")
verifyUrl("google")
@ -122,7 +131,8 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
longClickAndSearchText("Private Search", "content")
longClickPageObject(itemContainingText("content"))
clickContextMenuItem("Private Search")
mDevice.waitForIdle()
verifyTabCounter("2")
verifyUrl("google")
@ -138,8 +148,10 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
longClickAndCopyText("Crossing", true)
clickPageObject(itemWithText("PDF file"))
longClickPageObject(itemContainingText("Crossing"))
clickContextMenuItem("Select all")
clickContextMenuItem("Copy")
}.openNavigationToolbar {
openEditURLView()
}
@ -162,8 +174,9 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
longClickAndCopyText("Crossing")
clickPageObject(itemWithText("PDF file"))
longClickPageObject(itemContainingText("Crossing"))
clickContextMenuItem("Copy")
}.openNavigationToolbar {
openEditURLView()
}
@ -184,8 +197,8 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
longClickMatchingText("Crossing")
clickPageObject(itemWithText("PDF file"))
longClickPageObject(itemContainingText("Crossing"))
}.clickShareSelectedText {
verifyAndroidShareLayout()
}
@ -199,8 +212,9 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
longClickAndSearchText("Search", "Crossing")
clickPageObject(itemWithText("PDF file"))
longClickPageObject(itemContainingText("Crossing"))
clickContextMenuItem("Search")
verifyTabCounter("2")
verifyUrl("google")
}
@ -217,8 +231,9 @@ class TextSelectionTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(genericURL.url) {
clickLinkMatchingText("PDF file")
longClickAndSearchText("Private Search", "Crossing")
clickPageObject(itemWithText("PDF file"))
longClickPageObject(itemContainingText("Crossing"))
clickContextMenuItem("Private Search")
verifyTabCounter("2")
verifyUrl("google")
}

@ -11,8 +11,14 @@ import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
import org.mozilla.fenix.ui.robots.clickContextMenuItem
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.longClickPageObject
/**
* Tests for verifying the main three dot menu options
@ -153,14 +159,14 @@ class ThreeDotMenuMainTest {
}.openThreeDotMenu {
verifyDesktopSiteModeEnabled(true)
}.closeBrowserMenuToBrowser {
clickLinkMatchingText("Link 1")
clickPageObject(itemContainingText("Link 1"))
}.openThreeDotMenu {
verifyDesktopSiteModeEnabled(true)
}.closeBrowserMenuToBrowser {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(webPage.url) {
longClickLink("Link 2")
clickContextOpenLinkInNewTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in new tab")
clickSnackbarButton("SWITCH")
}.openThreeDotMenu {
verifyDesktopSiteModeEnabled(false)
@ -183,14 +189,14 @@ class ThreeDotMenuMainTest {
}.openThreeDotMenu {
verifyDesktopSiteModeEnabled(true)
}.closeBrowserMenuToBrowser {
clickLinkMatchingText("Link 1")
clickPageObject(itemContainingText("Link 1"))
}.openThreeDotMenu {
verifyDesktopSiteModeEnabled(true)
}.closeBrowserMenuToBrowser {
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(webPage.url) {
longClickLink("Link 2")
clickContextOpenLinkInPrivateTab()
longClickPageObject(itemWithText("Link 2"))
clickContextMenuItem("Open link in private tab")
clickSnackbarButton("SWITCH")
}.openThreeDotMenu {
verifyDesktopSiteModeEnabled(false)

@ -18,6 +18,7 @@ import org.mozilla.fenix.helpers.Constants.defaultTopSitesList
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.RetryTestRule
import org.mozilla.fenix.helpers.TestAssetHelper.getGenericAsset
import org.mozilla.fenix.helpers.TestHelper.clickSnackbarButton
import org.mozilla.fenix.helpers.TestHelper.generateRandomString
import org.mozilla.fenix.helpers.TestHelper.getStringResource
import org.mozilla.fenix.helpers.TestHelper.waitUntilSnackbarGone
@ -186,7 +187,7 @@ class TopSitesTest {
}.openContextMenuOnTopSitesWithTitle(defaultWebPage.title) {
verifyTopSiteContextMenuItems()
}.removeTopSite {
clickUndoSnackBarButton()
clickSnackbarButton("UNDO")
verifyExistingTopSitesTabs(defaultWebPage.title)
}
}

@ -12,9 +12,16 @@ import org.junit.Test
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.Constants
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithDescription
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestAssetHelper.getHTMLControlsFormAsset
import org.mozilla.fenix.helpers.TestHelper.assertNativeAppOpens
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.navigationToolbar
import java.time.LocalDate
/**
* Tests for verifying basic interactions with web control elements
@ -51,103 +58,107 @@ class WebControlsTest {
@Test
fun cancelCalendarFormTest() {
val htmlControlsPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
val htmlControlsPage = getHTMLControlsFormAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(htmlControlsPage.url) {
clickForm("Calendar Form")
clickFormViewButton("CANCEL")
clickSubmitDateButton()
clickPageObject(itemWithResId("calendar"))
clickPageObject(itemContainingText("CANCEL"))
clickPageObject(itemWithResId("submitDate"))
verifyNoDateIsSelected()
}
}
@Test
fun setAndClearCalendarFormTest() {
val htmlControlsPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
val currentDate = LocalDate.now()
val currentDay = currentDate.dayOfMonth
val currentMonth = currentDate.month
val currentYear = currentDate.year
val htmlControlsPage = getHTMLControlsFormAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(htmlControlsPage.url) {
clickForm("Calendar Form")
selectDate()
clickFormViewButton("OK")
clickSubmitDateButton()
clickPageObject(itemWithResId("calendar"))
clickPageObject(itemWithDescription("$currentDay $currentMonth $currentYear"))
clickPageObject(itemContainingText("OK"))
clickPageObject(itemWithResId("submitDate"))
verifySelectedDate()
clickForm("Calendar Form")
clickFormViewButton("CLEAR")
clickSubmitDateButton()
clickPageObject(itemWithResId("calendar"))
clickPageObject(itemContainingText("CLEAR"))
clickPageObject(itemWithResId("submitDate"))
verifyNoDateIsSelected()
}
}
@Test
fun cancelClockFormTest() {
val htmlControlsPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
val htmlControlsPage = getHTMLControlsFormAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(htmlControlsPage.url) {
clickForm("Clock Form")
clickFormViewButton("CANCEL")
clickSubmitTimeButton()
clickPageObject(itemWithResId("clock"))
clickPageObject(itemContainingText("CANCEL"))
clickPageObject(itemWithResId("submitTime"))
verifyNoTimeIsSelected(hour, minute)
}
}
@Test
fun setAndClearClockFormTest() {
val htmlControlsPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
val htmlControlsPage = getHTMLControlsFormAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(htmlControlsPage.url) {
clickForm("Clock Form")
clickPageObject(itemWithResId("clock"))
selectTime(hour, minute)
clickFormViewButton("OK")
clickSubmitTimeButton()
clickPageObject(itemContainingText("OK"))
clickPageObject(itemWithResId("submitTime"))
verifySelectedTime(hour, minute)
clickForm("Clock Form")
clickFormViewButton("CLEAR")
clickSubmitTimeButton()
clickPageObject(itemWithResId("clock"))
clickPageObject(itemContainingText("CLEAR"))
clickPageObject(itemWithResId("submitTime"))
verifyNoTimeIsSelected(hour, minute)
}
}
@Test
fun cancelColorFormTest() {
val htmlControlsPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
val htmlControlsPage = getHTMLControlsFormAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(htmlControlsPage.url) {
clickForm("Color Form")
selectColor(colorHexValue)
clickFormViewButton("CANCEL")
clickSubmitColorButton()
clickPageObject(itemWithResId("colorPicker"))
clickPageObject(itemWithDescription(colorHexValue))
clickPageObject(itemContainingText("CANCEL"))
clickPageObject(itemWithResId("submitColor"))
verifyColorIsNotSelected(colorHexValue)
}
}
@Test
fun setColorFormTest() {
val htmlControlsPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
val htmlControlsPage = getHTMLControlsFormAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(htmlControlsPage.url) {
clickForm("Color Form")
selectColor(colorHexValue)
clickFormViewButton("SET")
clickSubmitColorButton()
clickPageObject(itemWithResId("colorPicker"))
clickPageObject(itemWithDescription(colorHexValue))
clickPageObject(itemContainingText("SET"))
clickPageObject(itemWithResId("submitColor"))
verifySelectedColor(colorHexValue)
}
}
@Test
fun verifyDropdownMenuTest() {
val htmlControlsPage = TestAssetHelper.getHTMLControlsFormAsset(mockWebServer)
val htmlControlsPage = getHTMLControlsFormAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(htmlControlsPage.url) {
clickForm("Drop-down Form")
selectDropDownOption("The National")
clickSubmitDropDownButton()
clickPageObject(itemWithResId("dropDown"))
clickPageObject(itemContainingText("The National"))
clickPageObject(itemWithResId("submitOption"))
verifySelectedDropDownOption("The National")
}
}
@ -158,7 +169,7 @@ class WebControlsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(externalLinksPage.url) {
clickLinkMatchingText("External link")
clickPageObject(itemContainingText("External link"))
verifyUrl("duckduckgo")
}
}
@ -169,8 +180,8 @@ class WebControlsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(externalLinksPage.url) {
clickLinkMatchingText("Email link")
confirmOpenLinkInAnotherApp()
clickPageObject(itemContainingText("Email link"))
clickPageObject(itemWithResIdAndText("android:id/button1", "OPEN"))
assertNativeAppOpens(Constants.PackageName.GMAIL_APP, emailLink)
}
}
@ -181,8 +192,8 @@ class WebControlsTest {
navigationToolbar {
}.enterURLAndEnterToBrowser(externalLinksPage.url) {
clickLinkMatchingText("Telephone link")
confirmOpenLinkInAnotherApp()
clickPageObject(itemContainingText("Telephone link"))
clickPageObject(itemWithResIdAndText("android:id/button1", "OPEN"))
assertNativeAppOpens(Constants.PackageName.PHONE_APP, phoneLink)
}
}

@ -11,13 +11,11 @@ import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiObject
import androidx.test.uiautomator.UiObjectNotFoundException
import androidx.test.uiautomator.UiSelector
import junit.framework.TestCase.assertTrue
import org.mozilla.fenix.R
import org.mozilla.fenix.helpers.Constants.LONG_CLICK_DURATION
import org.mozilla.fenix.helpers.Constants.RETRY_COUNT
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
import org.mozilla.fenix.helpers.TestHelper.appName
import org.mozilla.fenix.helpers.TestHelper.mDevice
@ -74,6 +72,7 @@ class CustomTabRobot {
.getFromParent(
UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_origin_view"),
),
waitingTime,
)
assertTrue(
@ -86,48 +85,27 @@ class CustomTabRobot {
}
fun longCLickAndCopyToolbarUrl() {
mDevice.waitForObjects(mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar")))
mDevice.waitForObjects(
mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar")),
waitingTime,
)
customTabToolbar().click(LONG_CLICK_DURATION)
mDevice.findObject(UiSelector().textContains("Copy")).waitForExists(waitingTime)
val copyText = mDevice.findObject(By.textContains("Copy"))
copyText.click()
clickContextMenuItem("Copy")
}
fun fillAndSubmitLoginCredentials(userName: String, password: String) {
mDevice.waitForIdle(waitingTime)
setPageObjectText(webPageItemWithResourceId("username"), userName)
setPageObjectText(webPageItemWithResourceId("password"), password)
clickPageObject(webPageItemWithResourceId("submit"))
mDevice.waitForObjects(mDevice.findObject(UiSelector().resourceId("$packageName:id/save_confirm")))
setPageObjectText(itemWithResId("username"), userName)
setPageObjectText(itemWithResId("password"), password)
clickPageObject(itemWithResId("submit"))
mDevice.waitForObjects(
mDevice.findObject(UiSelector().resourceId("$packageName:id/save_confirm")),
waitingTime,
)
}
fun clickLinkMatchingText(expectedText: String) = clickPageObject(webPageItemContainingText(expectedText))
fun waitForPageToLoad() = progressBar.waitUntilGone(waitingTime)
fun clickPageObject(webPageItem: UiObject) {
for (i in 1..RETRY_COUNT) {
try {
webPageItem.also {
it.waitForExists(waitingTime)
it.click()
}
break
} catch (e: UiObjectNotFoundException) {
if (i == RETRY_COUNT) {
throw e
} else {
browserScreen {
}.openThreeDotMenu {
}.refreshPage {
progressBar.waitUntilGone(waitingTime)
}
}
}
}
}
class Transition {
fun openMainMenu(interact: CustomTabRobot.() -> Unit): Transition {
mainMenuButton().waitForExists(waitingTime)
@ -176,36 +154,7 @@ private fun closeButton() = onView(withContentDescription("Return to previous ap
private fun customTabToolbar() = mDevice.findObject(By.res("$packageName:id/toolbar"))
private fun setPageObjectText(webPageItem: UiObject, text: String) {
for (i in 1..RETRY_COUNT) {
try {
webPageItem.also {
it.waitForExists(waitingTime)
it.setText(text)
}
break
} catch (e: UiObjectNotFoundException) {
if (i == RETRY_COUNT) {
throw e
} else {
browserScreen {
}.openThreeDotMenu {
}.refreshPage {
progressBar.waitUntilGone(waitingTime)
}
}
}
}
}
private val progressBar =
mDevice.findObject(
UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_progress"),
)
private fun webPageItemContainingText(itemText: String) =
mDevice.findObject(UiSelector().textContains(itemText))
private fun webPageItemWithResourceId(resourceId: String) =
mDevice.findObject(UiSelector().resourceId(resourceId))

@ -359,8 +359,6 @@ class HomeScreenRobot {
mDevice.waitNotNull(findObject(By.text(expectedText)), waitingTime)
}
fun clickUndoSnackBarButton() = undoSnackBarButton.click()
fun clickFirefoxLogo() = homepageWordmark.click()
fun verifyThoughtProvokingStories(enabled: Boolean) {
@ -1145,8 +1143,6 @@ private val menuButton =
itemWithResId("$packageName:id/menuButton")
private fun tabCounter(numberOfOpenTabs: String) =
itemWithResIdAndText("$packageName:id/counter_text", numberOfOpenTabs)
private val undoSnackBarButton =
itemWithResId("$packageName:id/snackbar_btn")
val deleteFromHistory =
onView(

@ -12,7 +12,6 @@ import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.helpers.TestHelper.packageName
class PwaRobot {
fun verifyCustomTabToolbarIsNotDisplayed() = assertFalse(customTabToolbar().exists())
fun verifyPwaActivityInCurrentTask() = assertTrue(isExternalAppBrowserActivityInCurrentTask())

@ -5,9 +5,11 @@
package org.mozilla.fenix.ui.robots
import android.content.Intent
import android.net.Uri
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.matcher.BundleMatchers
import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
@ -72,6 +74,30 @@ class ShareOverlayRobot {
)
}
fun verifyShareLinkIntent(url: Uri) {
// verify share intent is launched and matched with associated passed in URL
Intents.intended(
allOf(
IntentMatchers.hasAction(Intent.ACTION_CHOOSER),
IntentMatchers.hasExtras(
allOf(
BundleMatchers.hasEntry(
Intent.EXTRA_INTENT,
allOf(
IntentMatchers.hasAction(Intent.ACTION_SEND),
IntentMatchers.hasType("text/plain"),
IntentMatchers.hasExtra(
Intent.EXTRA_TEXT,
url.toString(),
),
),
),
),
),
),
)
}
class Transition {
fun clickSaveAsPDF(interact: DownloadRobot.() -> Unit): DownloadRobot.Transition {
itemContainingText("Save as PDF").click()
@ -82,6 +108,11 @@ class ShareOverlayRobot {
}
}
fun shareOverlay(interact: ShareOverlayRobot.() -> Unit): ShareOverlayRobot.Transition {
ShareOverlayRobot().interact()
return ShareOverlayRobot.Transition()
}
private fun shareTabsLayout() = onView(withResourceName("shareWrapper"))
private fun assertShareTabLayout() =

Loading…
Cancel
Save