You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt

834 lines
31 KiB
Kotlin

/* 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
import android.os.Build
import android.view.autofill.AutofillManager
import androidx.core.net.toUri
import okhttp3.mockwebserver.MockWebServer
import org.junit.After
import org.junit.Before
import org.junit.Ignore
import org.junit.Rule
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.helpers.TestHelper.verifySnackBarText
import org.mozilla.fenix.helpers.TestHelper.waitForAppWindowToBeUpdated
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:
* - the Logins and Passwords menu and sub-menus.
* - save login prompts.
* - saving logins based on the user's preferences.
*/
class LoginsTest {
private lateinit var mockWebServer: MockWebServer
@get:Rule
val activityTestRule =
HomeActivityIntentTestRule.withDefaultSettingsOverrides(skipOnboarding = true)
@Before
fun setUp() {
mockWebServer = MockWebServer().apply {
dispatcher = AndroidAssetDispatcher()
start()
}
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.R) {
val autofillManager: AutofillManager =
TestHelper.appContext.getSystemService(AutofillManager::class.java)
autofillManager.disableAutofillServices()
}
}
@After
fun tearDown() {
mockWebServer.shutdown()
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2092713
// Tests the Logins and passwords menu items and default values
@Test
fun loginsAndPasswordsSettingsItemsTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
// Necessary to scroll a little bit for all screen sizes
scrollToElementByText("Logins and passwords")
}.openLoginsAndPasswordSubMenu {
verifyDefaultView()
verifyAutofillInFirefoxToggle(true)
verifyAutofillLoginsInOtherAppsToggle(false)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/517816
// Tests only for initial state without signing in.
// For tests after signing in, see SyncIntegration test suite
@Test
fun verifySavedLoginsListTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
// Necessary to scroll a little bit for all screen sizes
scrollToElementByText("Logins and passwords")
}.openLoginsAndPasswordSubMenu {
verifyDefaultView()
}.openSavedLogins {
verifySecurityPromptForLogins()
tapSetupLater()
// Verify that logins list is empty
verifyEmptySavedLoginsListView()
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2092925
@Test
fun verifySyncLoginsOptionsTest() {
homeScreen {
}.openThreeDotMenu {
}.openSettings {
// Necessary to scroll a little bit for all screen sizes
scrollToElementByText("Logins and passwords")
}.openLoginsAndPasswordSubMenu {
}.openSyncLogins {
verifyReadyToScanOption()
verifyUseEmailOption()
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/523839
@Test
fun saveLoginFromPromptTest() {
val saveLoginTest =
TestAssetHelper.getSaveLoginAsset(mockWebServer)
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSaveLoginsAndPasswordsOptions {
verifySaveLoginsOptionsView()
}
exitMenu()
navigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
// Click save to save the login
clickPageObject(itemWithText("Save"))
}
browserScreen {
}.openThreeDotMenu {
}.openSettings {
scrollToElementByText("Logins and passwords")
}.openLoginsAndPasswordSubMenu {
verifyDefaultView()
}.openSavedLogins {
verifySecurityPromptForLogins()
tapSetupLater()
// Verify that the login appears correctly
verifySavedLoginsSectionUsername("test@example.com")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/960412
@Test
fun openLoginWebsiteInBrowserTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/loginForm"
val originWebsite = "mozilla-mobile.github.io"
val userName = "test"
val password = "pass"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
setPageObjectText(itemWithResId("username"), userName)
setPageObjectText(itemWithResId("password"), password)
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
verifySecurityPromptForLogins()
tapSetupLater()
viewSavedLoginDetails(userName)
}.goToSavedWebsite {
verifyUrl(originWebsite)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/517817
@Test
fun neverSaveLoginFromPromptTest() {
val saveLoginTest = TestAssetHelper.getSaveLoginAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
clickSubmitLoginButton()
// Don't save the login, add to exceptions
clickPageObject(itemWithText("Never save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
verifyDefaultView()
}.openSavedLogins {
verifySecurityPromptForLogins()
tapSetupLater()
// Verify that the login list is empty
verifyEmptySavedLoginsListView()
verifyNotSavedLoginFromPrompt()
}.goBack {
}.openLoginExceptions {
// Verify localhost was added to exceptions list
verifyLocalhostExceptionAdded()
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1508171
@SmokeTest
@Test
fun verifyUpdatedLoginIsSavedTest() {
val saveLoginTest =
TestAssetHelper.getSaveLoginAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
// Click Save to save the login
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
enterPassword("test")
mDevice.waitForIdle()
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
// Click Update to change the saved password
clickPageObject(itemWithText("Update"))
}.openThreeDotMenu {
}.openSettings {
scrollToElementByText("Logins and passwords")
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
verifySecurityPromptForLogins()
tapSetupLater()
// Verify that the login appears correctly
verifySavedLoginsSectionUsername("test@example.com")
viewSavedLoginDetails("test@example.com")
revealPassword()
verifyPasswordSaved("test") // failing here locally
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1049971
@SmokeTest
@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()) {
setPageObjectText(itemWithResId("username"), firstUser)
waitForAppWindowToBeUpdated()
setPageObjectText(itemWithResId("password"), firstPass)
waitForAppWindowToBeUpdated()
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
setPageObjectText(itemWithResId("username"), secondUser)
waitForAppWindowToBeUpdated()
setPageObjectText(itemWithResId("password"), secondPass)
waitForAppWindowToBeUpdated()
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
clearTextFieldItem(itemWithResId("username"))
clickSuggestedLoginsButton()
verifySuggestedUserName(firstUser)
verifySuggestedUserName(secondUser)
clickPageObject(
itemWithResIdAndText(
"$packageName:id/username",
firstUser,
),
)
clickPageObject(itemWithResId("togglePassword"))
verifyPrefilledLoginCredentials(firstUser, firstPass, true)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/875849
@Test
fun verifyEditLoginsViewTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/loginForm"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails(originWebsite)
clickThreeDotButton(activityTestRule)
clickEditLoginButton()
setNewPassword("fenix")
saveEditedLogin()
revealPassword()
verifyPasswordSaved("fenix")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/875851
@Test
fun verifyEditedLoginsAreSavedTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails(originWebsite)
clickThreeDotButton(activityTestRule)
clickEditLoginButton()
setNewUserName("android")
setNewPassword("fenix")
saveEditedLogin()
}
exitMenu()
browserScreen {
}.openThreeDotMenu {
}.refreshPage {
waitForPageToLoad()
clickPageObject(itemWithResId("togglePassword"))
verifyPrefilledLoginCredentials("android", "fenix", true)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2266452
@Test
fun verifyLoginWithNoUserNameCanNotBeSavedTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/loginForm"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails(originWebsite)
clickThreeDotButton(activityTestRule)
clickEditLoginButton()
clickClearUserNameButton()
verifyUserNameRequiredErrorMessage()
verifySaveLoginButtonIsEnabled(false)
clickGoBackButton()
verifyLoginItemUsername("mozilla")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2266453
@Test
fun verifyLoginWithoutPasswordCanNotBeSavedTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/loginForm"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails(originWebsite)
clickThreeDotButton(activityTestRule)
clickEditLoginButton()
clickClearPasswordButton()
verifyPasswordRequiredErrorMessage()
verifySaveLoginButtonIsEnabled(false)
clickGoBackButton()
revealPassword()
verifyPasswordSaved("firefox")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/876531
@Test
fun verifyEditModeDismissalDoesNotSaveLoginCredentialsTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/loginForm"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails(originWebsite)
clickThreeDotButton(activityTestRule)
clickEditLoginButton()
setNewUserName("android")
setNewPassword("fenix")
clickGoBackButton()
verifyLoginItemUsername("mozilla")
revealPassword()
verifyPasswordSaved("firefox")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/876532
@Test
fun verifyDeleteLoginButtonTest() {
val loginPage = TestAssetHelper.getSaveLoginAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.url) {
clickSubmitLoginButton()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails("test@example.com")
clickThreeDotButton(activityTestRule)
clickDeleteLoginButton()
verifyLoginDeletionPrompt()
clickCancelDeleteLogin()
verifyLoginItemUsername("test@example.com")
viewSavedLoginDetails("test@example.com")
clickThreeDotButton(activityTestRule)
clickDeleteLoginButton()
verifyLoginDeletionPrompt()
clickConfirmDeleteLogin()
// The account remains displayed, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1812431
// verifyNotSavedLoginFromPrompt()
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/517818
@SmokeTest
@Test
fun verifyNeverSaveLoginOptionTest() {
val loginPage = TestAssetHelper.getSaveLoginAsset(mockWebServer)
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSaveLoginsAndPasswordsOptions {
clickNeverSaveOption()
}.goBack {
}
exitMenu()
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsNotDisplayed()
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/517819
@Test
fun verifyAutofillToggleTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
waitForPageToLoad()
setPageObjectText(itemWithResId("username"), "mozilla")
waitForAppWindowToBeUpdated()
setPageObjectText(itemWithResId("password"), "firefox")
waitForAppWindowToBeUpdated()
clickPageObject(itemWithResId("submit"))
waitForPageToLoad()
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openTabDrawer {
closeTab()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
waitForPageToLoad()
clickPageObject(itemWithResId("togglePassword"))
verifyPrefilledLoginCredentials("mozilla", "firefox", true)
}.openTabDrawer {
closeTab()
}
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
verifyAutofillInFirefoxToggle(true)
clickAutofillInFirefoxOption()
verifyAutofillInFirefoxToggle(false)
}.goBack {
}
exitMenu()
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
verifyPrefilledLoginCredentials("mozilla", "firefox", false)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/593768
@Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1812995")
@Test
fun doNotSaveOptionWillNotUpdateALoginTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openTabDrawer {
closeTab()
}
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
clickPageObject(itemWithResId("togglePassword"))
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "fenix")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Dont update"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails(originWebsite)
revealPassword()
verifyPasswordSaved("firefox")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2090455
@Test
fun searchLoginsByUsernameTest() {
val firstLoginPage = TestAssetHelper.getSaveLoginAsset(mockWebServer)
val secondLoginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "android")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
clickSearchLoginButton()
searchLogin("ANDROID")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
searchLogin("android")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
searchLogin("AnDrOiD")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/608834
@Test
fun searchLoginsByUrlTest() {
val firstLoginPage = TestAssetHelper.getSaveLoginAsset(mockWebServer)
val secondLoginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "android")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
clickSearchLoginButton()
searchLogin("MOZILLA")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
searchLogin("mozilla")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
searchLogin("MoZiLlA")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2266441
@Test
fun verifyLastUsedLoginSortingOptionTest() {
val firstLoginPage = TestAssetHelper.getSaveLoginAsset(mockWebServer)
val secondLoginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
clickSavedLoginsChevronIcon()
verifyLoginsSortingOptions()
clickLastUsedSortingOption()
verifySortedLogin(0, originWebsite)
verifySortedLogin(1, firstLoginPage.url.authority.toString())
}.goBack {
}.openSavedLogins {
verifySortedLogin(0, originWebsite)
verifySortedLogin(1, firstLoginPage.url.authority.toString())
}
restartApp(activityTestRule)
browserScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
verifySortedLogin(0, originWebsite)
verifySortedLogin(1, firstLoginPage.url.authority.toString())
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2266442
@Test
fun verifyAlphabeticalLoginSortingOptionTest() {
val firstLoginPage = TestAssetHelper.getSaveLoginAsset(mockWebServer)
val secondLoginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
val originWebsite = "mozilla-mobile.github.io"
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openNavigationToolbar {
}.enterURLAndEnterToBrowser(secondLoginPage.toUri()) {
setPageObjectText(itemWithResId("username"), "mozilla")
setPageObjectText(itemWithResId("password"), "firefox")
clickPageObject(itemWithResId("submit"))
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
mDevice.waitForIdle()
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
verifySortedLogin(0, firstLoginPage.url.authority.toString())
verifySortedLogin(1, originWebsite)
}.goBack {
}.openSavedLogins {
verifySortedLogin(0, firstLoginPage.url.authority.toString())
verifySortedLogin(1, originWebsite)
}
restartApp(activityTestRule)
browserScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
verifySortedLogin(0, firstLoginPage.url.authority.toString())
verifySortedLogin(1, originWebsite)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1518435
@Test
fun verifyAddLoginManuallyTest() {
val loginPage = "https://mozilla-mobile.github.io/testapp/v2.0/loginForm.html"
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
clickAddLoginButton()
verifyAddNewLoginView()
enterSiteCredential("mozilla")
verifyHostnameErrorMessage()
enterSiteCredential(loginPage)
verifyHostnameClearButtonEnabled()
setNewUserName("mozilla")
setNewPassword("firefox")
clickClearPasswordButton()
verifyPasswordErrorMessage()
setNewPassword("firefox")
verifyPasswordClearButtonEnabled()
saveEditedLogin()
}
exitMenu()
navigationToolbar {
}.enterURLAndEnterToBrowser(loginPage.toUri()) {
clickPageObject(MatcherHelper.itemWithResId("username"))
clickSuggestedLoginsButton()
verifySuggestedUserName("mozilla")
clickPageObject(itemWithResIdAndText("$packageName:id/username", "mozilla"))
clickPageObject(itemWithResId("togglePassword"))
verifyPrefilledLoginCredentials("mozilla", "firefox", true)
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2068215
@Test
fun verifyCopyLoginCredentialsToClipboardTest() {
val firstLoginPage = TestAssetHelper.getSaveLoginAsset(mockWebServer)
navigationToolbar {
}.enterURLAndEnterToBrowser(firstLoginPage.url) {
clickSubmitLoginButton()
verifySaveLoginPromptIsDisplayed()
clickPageObject(itemWithText("Save"))
}.openThreeDotMenu {
}.openSettings {
}.openLoginsAndPasswordSubMenu {
}.openSavedLogins {
tapSetupLater()
viewSavedLoginDetails("test@example.com")
clickCopyUserNameButton()
verifySnackBarText("Username copied to clipboard")
clickCopyPasswordButton()
verifySnackBarText("Password copied to clipboard")
}
}
}