UITests: New tests for save Login prompt (#8381)
* UITests: New tests for save Login prompt * fixing firebase timing issues when webpage loads * adding tests for don't save and check the prompt options * fix detekt issue * fix reviewer commentsmaster
parent
020608275d
commit
4582c25208
|
@ -0,0 +1,22 @@
|
|||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
</head>
|
||||
|
||||
<body aria-label="body">
|
||||
|
||||
<form method="GET" action="passwordsubmit.html">
|
||||
<p>Username: <input id="username" type="text" value="test@example.com"></p>
|
||||
<p>Password: <input id="password" type="password" value="verysecret"></p>
|
||||
<p><input type="submit" id="submit" value="Login" aria-label="submit"/></p>
|
||||
</form>
|
||||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
document.getElementById("password").value = Math.random().toString();
|
||||
</script>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,9 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width">
|
||||
</head>
|
||||
<body aria-label="body">
|
||||
<p>Password submitted. Nope just a test.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -83,4 +83,10 @@ object TestAssetHelper {
|
|||
|
||||
return TestAsset(url, "")
|
||||
}
|
||||
|
||||
fun getSaveLoginAsset(server: MockWebServer): TestAsset {
|
||||
val url = server.url("pages/password.html").toString().toUri()!!
|
||||
|
||||
return TestAsset(url, "")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,8 +14,10 @@ import org.junit.Ignore
|
|||
import org.junit.Test
|
||||
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
|
||||
import org.mozilla.fenix.helpers.HomeActivityTestRule
|
||||
import org.mozilla.fenix.helpers.TestAssetHelper
|
||||
import org.mozilla.fenix.helpers.TestHelper
|
||||
import org.mozilla.fenix.ui.robots.homeScreen
|
||||
import org.mozilla.fenix.ui.robots.navigationToolbar
|
||||
|
||||
/**
|
||||
* Tests for verifying the main three dot menu options
|
||||
|
@ -133,6 +135,65 @@ class SettingsPrivacyTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun saveLoginFromPromptTest() {
|
||||
val saveLoginTest =
|
||||
TestAssetHelper.getSaveLoginAsset(mockWebServer)
|
||||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
|
||||
verifySaveLoginPromptIsShown()
|
||||
// Click save to save the login
|
||||
saveLoginFromPrompt("Save")
|
||||
}.openHomeScreen {
|
||||
}.openThreeDotMenu {
|
||||
}.openSettings {
|
||||
TestHelper.scrollToElementByText("Logins and passwords")
|
||||
}.openLoginsAndPasswordSubMenu {
|
||||
verifyDefaultView()
|
||||
verifyDefaultValueSyncLogins()
|
||||
}.openSavedLogins {
|
||||
verifySavedLoginsView()
|
||||
tapSetupLater()
|
||||
// Verify that the login appears correctly
|
||||
verifySavedLoginFromPrompt()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun doNotSaveLoginFromPromptTest() {
|
||||
val saveLoginTest = TestAssetHelper.getSaveLoginAsset(mockWebServer)
|
||||
|
||||
navigationToolbar {
|
||||
}.enterURLAndEnterToBrowser(saveLoginTest.url) {
|
||||
verifySaveLoginPromptIsShown()
|
||||
// Don't save the login
|
||||
saveLoginFromPrompt("Don’t save")
|
||||
}.openHomeScreen {
|
||||
}.openThreeDotMenu {
|
||||
}.openSettings {
|
||||
}.openLoginsAndPasswordSubMenu {
|
||||
verifyDefaultView()
|
||||
verifyDefaultValueSyncLogins()
|
||||
}.openSavedLogins {
|
||||
verifySavedLoginsView()
|
||||
tapSetupLater()
|
||||
// Verify that the login list is empty
|
||||
verifyNotSavedLoginFromPromt()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun saveLoginsAndPasswordsOptions() {
|
||||
homeScreen {
|
||||
}.openThreeDotMenu {
|
||||
}.openSettings {
|
||||
}.openLoginsAndPasswordSubMenu {
|
||||
}.saveLoginsAndPasswordsOptions {
|
||||
verifySaveLoginsOptionsView()
|
||||
}
|
||||
}
|
||||
|
||||
@Ignore("This is a stub test, ignore for now")
|
||||
@Test
|
||||
fun toggleTrackingProtection() {
|
||||
|
|
|
@ -256,6 +256,18 @@ class BrowserRobot {
|
|||
).perform(ViewActions.click())
|
||||
}
|
||||
|
||||
fun verifySaveLoginPromptIsShown() {
|
||||
mDevice.waitNotNull(Until.findObjects(By.text("test@example.com")), TestAssetHelper.waitingTime)
|
||||
val submitButton = mDevice.findObject(By.res("submit"))
|
||||
submitButton.clickAndWait(Until.newWindow(), TestAssetHelper.waitingTime)
|
||||
// Click save to save the login
|
||||
mDevice.waitNotNull(Until.findObjects(By.text("Save")))
|
||||
}
|
||||
|
||||
fun saveLoginFromPrompt(optionToSaveLogin: String) {
|
||||
mDevice.findObject(By.text(optionToSaveLogin)).click()
|
||||
}
|
||||
|
||||
class Transition {
|
||||
private val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
|
||||
private fun threeDotButton() = onView(
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/* 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.espresso.Espresso.onView
|
||||
import androidx.test.espresso.action.ViewActions
|
||||
import androidx.test.espresso.assertion.ViewAssertions.matches
|
||||
import androidx.test.espresso.matcher.ViewMatchers
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
|
||||
import org.hamcrest.CoreMatchers
|
||||
|
||||
/**
|
||||
* Implementation of Robot Pattern for the Privacy Settings > saved logins sub menu
|
||||
*/
|
||||
|
||||
class SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot {
|
||||
fun verifySaveLoginsOptionsView() {
|
||||
onView(ViewMatchers.withText("Ask to save"))
|
||||
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
|
||||
|
||||
onView(ViewMatchers.withText("Never save"))
|
||||
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
|
||||
}
|
||||
|
||||
class Transition {
|
||||
fun goBack(interact: SettingsSubMenuLoginsAndPasswordRobot.() -> Unit): SettingsSubMenuLoginsAndPasswordRobot.Transition {
|
||||
goBackButton().perform(ViewActions.click())
|
||||
|
||||
SettingsSubMenuLoginsAndPasswordRobot().interact()
|
||||
return SettingsSubMenuLoginsAndPasswordRobot.Transition()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun goBackButton() =
|
||||
onView(CoreMatchers.allOf(ViewMatchers.withContentDescription("Navigate up")))
|
|
@ -65,6 +65,14 @@ class SettingsSubMenuLoginsAndPasswordRobot {
|
|||
SettingsTurnOnSyncRobot().interact()
|
||||
return SettingsTurnOnSyncRobot.Transition()
|
||||
}
|
||||
|
||||
fun saveLoginsAndPasswordsOptions(interact: SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.() -> Unit): SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.Transition {
|
||||
fun saveLoginsAndPasswordButton() = onView(ViewMatchers.withText("Save logins and passwords"))
|
||||
saveLoginsAndPasswordButton().click()
|
||||
|
||||
SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot().interact()
|
||||
return SettingsSubMenuLoginsAndPasswordOptionsToSaveRobot.Transition()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ package org.mozilla.fenix.ui.robots
|
|||
|
||||
import androidx.test.espresso.Espresso.onView
|
||||
import androidx.test.espresso.action.ViewActions
|
||||
import androidx.test.espresso.assertion.ViewAssertions
|
||||
import androidx.test.espresso.assertion.ViewAssertions.matches
|
||||
import androidx.test.espresso.matcher.ViewMatchers
|
||||
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
|
||||
|
@ -29,6 +30,11 @@ class SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot {
|
|||
|
||||
fun tapSetupLater() = onView(ViewMatchers.withText("Later")).perform(ViewActions.click())
|
||||
|
||||
fun verifySavedLoginFromPrompt() = mDevice.waitNotNull(Until.findObjects(By.text("test@example.com")))
|
||||
|
||||
fun verifyNotSavedLoginFromPromt() = onView(ViewMatchers.withText("test@example.com"))
|
||||
.check(ViewAssertions.doesNotExist())
|
||||
|
||||
class Transition {
|
||||
fun goBack(interact: SettingsSubMenuLoginsAndPasswordRobot.() -> Unit): SettingsSubMenuLoginsAndPasswordRobot.Transition {
|
||||
goBackButton().perform(ViewActions.click())
|
||||
|
|
Loading…
Reference in New Issue