[fenix] For https://github.com/mozilla-mobile/fenix/issues/26144 new address autofill UI smoke tests

pull/600/head
AndiAJ 2 years ago committed by mergify[bot]
parent 541a48765b
commit e52c7a0ed3

@ -0,0 +1,17 @@
<html>
<head>
<meta name="viewport" content="width=device-width">
<title>Address_Form</title>
</head>
<body>
<form>
<p>Street Address: <input id="streetAddress" type="text"></p>
<p>City: <input id="city" type="text"></p>
<p>Zip Code: <input id="zipCode" type="text"></p>
<p>Country: <input id="country" type="text"></p>
<p>Telephone: <input id="telephone" type="text"></p>
<p>Email: <input id="email" type="text"></p>
</form>
</body>
</html>

@ -87,6 +87,12 @@ object TestAssetHelper {
return TestAsset(url, "", "")
}
fun getAddressFormAsset(server: MockWebServer): TestAsset {
val url = server.url("pages/addressForm.html").toString().toUri()!!
return TestAsset(url, "", "")
}
fun getAudioPageAsset(server: MockWebServer): TestAsset {
val url = server.url("pages/audioMediaPage.html").toString().toUri()!!
val title = "Audio_Test_Page"

@ -11,12 +11,15 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.FenixApplication
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.FeatureSettingsHelper
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
import org.mozilla.fenix.helpers.TestAssetHelper.getLoremIpsumAsset
import org.mozilla.fenix.ui.robots.checkTextSizeOnWebsite
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
/**
* Tests for verifying the General section of the Settings menu
@ -122,4 +125,69 @@ class SettingsBasicsTest {
verifyMenuItemsAreDisabled()
}
}
@SmokeTest
@Test
fun verifyAddressAutofillTest() {
val addressFormPage =
TestAssetHelper.getAddressFormAsset(mockWebServer)
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openAutofillSubMenu {
clickAddAddressButton()
fillAndSaveAddress(
"Mozilla",
"Fenix",
"Firefox",
"Harrison Street",
"San Francisco",
"Alaska",
"94105",
"United States",
"555-5555",
"foo@bar.com"
)
}.goBack {
}.goBack {
}
navigationToolbar {
}.enterURLAndEnterToBrowser(addressFormPage.url) {
clickStreetAddressTextBox()
clickSelectAddressButton()
clickAddressSuggestion("Harrison Street")
verifyAutofilledAddress("Harrison Street")
}
}
@SmokeTest
@Test
fun deleteSavedAddressTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openAutofillSubMenu {
clickAddAddressButton()
fillAndSaveAddress(
"Mozilla",
"Fenix",
"Firefox",
"Harrison Street",
"San Francisco",
"Alaska",
"94105",
"United States",
"555-5555",
"foo@bar.com"
)
clickManageAddressesButton()
clickSavedAddress("Mozilla")
clickDeleteAddressButton()
clickCancelDeleteAddressButton()
clickDeleteAddressButton()
clickConfirmDeleteAddressButton()
verifyAddAddressButton()
}
}
}

@ -599,6 +599,16 @@ class BrowserRobot {
}
}
fun clickStreetAddressTextBox() {
streetAddressTextBox().waitForExists(waitingTime)
streetAddressTextBox().click()
}
fun clickSelectAddressButton() {
selectAddressButton.waitForExists(waitingTime)
selectAddressButton.clickAndWaitForNewWindow(waitingTime)
}
fun clickLoginSuggestion(userName: String) {
val loginSuggestion =
mDevice.findObject(
@ -610,6 +620,11 @@ class BrowserRobot {
loginSuggestion.click()
}
fun clickAddressSuggestion(streetName: String) {
addressSuggestion(streetName).waitForExists(waitingTime)
addressSuggestion(streetName).click()
}
fun verifySuggestedUserName(userName: String) {
mDevice.findObject(
UiSelector()
@ -645,6 +660,11 @@ class BrowserRobot {
assertTrue(userNameTextBox.text.equals(userName))
}
fun verifyAutofilledAddress(streetAddress: String) {
mDevice.waitForObjects(streetAddressTextBox(streetAddress))
assertTrue(streetAddressTextBox(streetAddress).waitForExists(waitingTime))
}
fun verifyPrefilledPWALoginCredentials(userName: String, shortcutTitle: String) {
mDevice.waitForIdle(waitingTime)
@ -906,6 +926,23 @@ private var progressBar =
)
private val suggestedLogins = mDevice.findObject(UiSelector().resourceId("$packageName:id/loginSelectBar"))
private val selectAddressButton = mDevice.findObject(UiSelector().resourceId("$packageName:id/select_address_header"))
private fun addressSuggestion(streetName: String) =
mDevice.findObject(
UiSelector()
.resourceId("$packageName:id/address_name")
.textContains(streetName)
)
private fun streetAddressTextBox(streetAddress: String = "") =
mDevice.findObject(
UiSelector()
.resourceId("streetAddress")
.textContains(streetAddress)
.className("android.widget.EditText")
.packageName("$packageName")
)
// Permissions test page elements & prompts
// Test page used located at https://mozilla-mobile.github.io/testapp/permissions

@ -171,6 +171,15 @@ class SettingsRobot {
return SettingsSubMenuHomepageRobot.Transition()
}
fun openAutofillSubMenu(interact: SettingsSubMenuAutofillRobot.() -> Unit): SettingsSubMenuAutofillRobot.Transition {
mDevice.findObject(UiSelector().textContains(getStringResource(R.string.preferences_autofill))).waitForExists(waitingTime)
onView(withText(R.string.preferences_autofill)).click()
SettingsSubMenuAutofillRobot().interact()
return SettingsSubMenuAutofillRobot.Transition()
}
fun openAccessibilitySubMenu(interact: SettingsSubMenuAccessibilityRobot.() -> Unit): SettingsSubMenuAccessibilityRobot.Transition {
scrollToElementByText("Accessibility")

@ -0,0 +1,105 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.ui.robots
import androidx.test.uiautomator.UiSelector
import org.junit.Assert.assertTrue
import org.mozilla.fenix.R
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
import org.mozilla.fenix.helpers.TestHelper.getStringResource
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.helpers.TestHelper.packageName
import org.mozilla.fenix.helpers.TestHelper.scrollToElementByText
class SettingsSubMenuAutofillRobot {
fun clickAddAddressButton() = addAddressButton.click()
fun clickManageAddressesButton() = manageAddressesButton.click()
fun clickSavedAddress(firstName: String) = savedAddress(firstName).clickAndWaitForNewWindow(waitingTime)
fun clickDeleteAddressButton() {
deleteAddressButton.waitForExists(waitingTime)
deleteAddressButton.click()
}
fun clickCancelDeleteAddressButton() {
cancelDeleteAddressButton.waitForExists(waitingTime)
cancelDeleteAddressButton.click()
}
fun clickConfirmDeleteAddressButton() {
confirmDeleteAddressButton.waitForExists(waitingTime)
confirmDeleteAddressButton.click()
}
fun clickSubRegionOption(subRegion: String) {
subRegionOption(subRegion).waitForExists(waitingTime)
subRegionOption(subRegion).click()
}
fun clickCountryOption(country: String) {
countryOption(country).waitForExists(waitingTime)
countryOption(country).click()
}
fun verifyAddAddressButton() = assertTrue(addAddressButton.waitForExists(waitingTime))
fun fillAndSaveAddress(
firstName: String,
middleName: String,
lastName: String,
streetAddress: String,
city: String,
state: String,
zipCode: String,
country: String,
phoneNumber: String,
emailAddress: String
) {
firstNameTextInput.waitForExists(waitingTime)
firstNameTextInput.setText(firstName)
middleNameTextInput.setText(middleName)
lastNameTextInput.setText(lastName)
streetAddressTextInput.setText(streetAddress)
scrollToElementByText(getStringResource(R.string.addresses_city))
cityTextInput.setText(city)
subRegionDropDown.click()
clickSubRegionOption(state)
zipCodeTextInput.setText(zipCode)
countryDropDown.click()
clickCountryOption(country)
scrollToElementByText(getStringResource(R.string.addresses_phone))
phoneTextInput.setText(phoneNumber)
emailTextInput.setText(emailAddress)
scrollToElementByText(getStringResource(R.string.addresses_save_button))
saveButton.click()
manageAddressesButton.waitForExists(waitingTime)
}
class Transition {
fun goBack(interact: SettingsRobot.() -> Unit): SettingsRobot.Transition {
mDevice.pressBack()
SettingsRobot().interact()
return SettingsRobot.Transition()
}
}
}
private val addAddressButton = mDevice.findObject(UiSelector().textContains(getStringResource(R.string.preferences_addresses_add_address)))
private val manageAddressesButton = mDevice.findObject(UiSelector().textContains(getStringResource(R.string.preferences_addresses_manage_addresses)))
private val firstNameTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/first_name_input"))
private val middleNameTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/middle_name_input"))
private val lastNameTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/last_name_input"))
private val streetAddressTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/street_address_input"))
private val cityTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/city_input"))
private val subRegionDropDown = mDevice.findObject(UiSelector().resourceId("$packageName:id/subregion_drop_down"))
private val zipCodeTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/zip_input"))
private val countryDropDown = mDevice.findObject(UiSelector().resourceId("$packageName:id/country_drop_down"))
private val phoneTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/phone_input"))
private val emailTextInput = mDevice.findObject(UiSelector().resourceId("$packageName:id/email_input"))
private val saveButton = mDevice.findObject(UiSelector().resourceId("$packageName:id/save_button"))
private val deleteAddressButton = mDevice.findObject(UiSelector().resourceId("$packageName:id/delete_address_button"))
private val cancelDeleteAddressButton = mDevice.findObject(UiSelector().resourceId("android:id/button2"))
private val confirmDeleteAddressButton = mDevice.findObject(UiSelector().resourceId("android:id/button1"))
private fun savedAddress(firstName: String) = mDevice.findObject(UiSelector().textContains(firstName))
private fun subRegionOption(subRegion: String) = mDevice.findObject(UiSelector().textContains(subRegion))
private fun countryOption(country: String) = mDevice.findObject(UiSelector().textContains(country))
Loading…
Cancel
Save