Merge pull request #6512 from vector-im/feature/adm/ui-test-stabilization

UI test stabilization
This commit is contained in:
Adam Brown 2022-07-14 15:47:28 +01:00 committed by GitHub
commit ac7aa9f31d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 61 additions and 32 deletions

View File

@ -99,30 +99,33 @@ class UiAllScreensSanityTest {
testThreadScreens() testThreadScreens()
val spaceName = UUID.randomUUID().toString()
elementRobot.space { elementRobot.space {
createSpace { createSpace {
crawl() createAndCrawl(spaceName)
} }
val spaceName = UUID.randomUUID().toString() val publicSpaceName = UUID.randomUUID().toString()
createSpace { createSpace {
createPublicSpace(spaceName) createPublicSpace(publicSpaceName)
} }
spaceMenu(spaceName) { spaceMenu(publicSpaceName) {
spaceMembers() spaceMembers()
spaceSettings { spaceSettings {
crawl() crawl()
} }
exploreRooms() exploreRooms()
invitePeople().also { openMenu(spaceName) } invitePeople().also { openMenu(publicSpaceName) }
addRoom().also { openMenu(spaceName) } addRoom().also { openMenu(publicSpaceName) }
addSpace().also { openMenu(spaceName) } addSpace().also { openMenu(publicSpaceName) }
leaveSpace() leaveSpace()
} }
} }
elementRobot.space { selectSpace(spaceName) }
elementRobot.withDeveloperMode { elementRobot.withDeveloperMode {
settings { settings {
advancedSettings { crawlDeveloperOptions() } advancedSettings { crawlDeveloperOptions() }
@ -159,7 +162,7 @@ class UiAllScreensSanityTest {
elementRobot.newRoom { elementRobot.newRoom {
createNewRoom { createNewRoom {
crawl() crawl()
createRoom { createRoom(roomName = "thread room") {
val message = "Hello This message will be a thread!" val message = "Hello This message will be a thread!"
postMessage(message) postMessage(message)
replyToThread(message) replyToThread(message)

View File

@ -16,7 +16,11 @@
package im.vector.app.ui.robot package im.vector.app.ui.robot
import androidx.test.espresso.Espresso.closeSoftKeyboard
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.action.ViewActions.replaceText
import androidx.test.espresso.matcher.ViewMatchers.withHint
import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withId
import com.adevinta.android.barista.assertion.BaristaListAssertions import com.adevinta.android.barista.assertion.BaristaListAssertions
import com.adevinta.android.barista.interaction.BaristaClickInteractions import com.adevinta.android.barista.interaction.BaristaClickInteractions
@ -25,14 +29,20 @@ import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilActivityVisible import im.vector.app.espresso.tools.waitUntilActivityVisible
import im.vector.app.espresso.tools.waitUntilViewVisible import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.home.room.detail.RoomDetailActivity import im.vector.app.features.home.room.detail.RoomDetailActivity
import org.hamcrest.CoreMatchers.allOf
class CreateNewRoomRobot( class CreateNewRoomRobot(
var createdRoom: Boolean = false var createdRoom: Boolean = false
) { ) {
fun createRoom(block: RoomDetailRobot.() -> Unit) { fun createRoom(roomName: String? = null, block: RoomDetailRobot.() -> Unit) {
createdRoom = true createdRoom = true
BaristaListAssertions.assertListItemCount(R.id.createRoomForm, 12) BaristaListAssertions.assertListItemCount(R.id.createRoomForm, 12)
roomName?.let {
onView(allOf(withId(R.id.formTextInputTextInputEditText), withHint(R.string.create_room_name_hint)))
.perform(replaceText(roomName))
closeSoftKeyboard()
}
BaristaListInteractions.clickListItemChild(R.id.createRoomForm, 11, R.id.form_submit_button) BaristaListInteractions.clickListItemChild(R.id.createRoomForm, 11, R.id.form_submit_button)
waitUntilActivityVisible<RoomDetailActivity> { waitUntilActivityVisible<RoomDetailActivity> {
waitUntilViewVisible(withId(R.id.composerEditText)) waitUntilViewVisible(withId(R.id.composerEditText))

View File

@ -17,6 +17,7 @@
package im.vector.app.ui.robot package im.vector.app.ui.robot
import android.view.View import android.view.View
import androidx.test.espresso.Espresso.closeSoftKeyboard
import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.action.ViewActions import androidx.test.espresso.action.ViewActions
@ -91,8 +92,7 @@ class ElementRobot {
waitUntilActivityVisible<CreateDirectRoomActivity> { waitUntilActivityVisible<CreateDirectRoomActivity> {
waitUntilViewVisible(withId(R.id.userListSearch)) waitUntilViewVisible(withId(R.id.userListSearch))
} }
// close keyboard closeSoftKeyboard()
pressBack()
block(NewDirectMessageRobot()) block(NewDirectMessageRobot())
pressBack() pressBack()
waitUntilViewVisible(withId(R.id.bottomNavigationView)) waitUntilViewVisible(withId(R.id.bottomNavigationView))

View File

@ -16,6 +16,7 @@
package im.vector.app.ui.robot package im.vector.app.ui.robot
import androidx.test.espresso.Espresso.closeSoftKeyboard
import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.espresso.matcher.ViewMatchers.withText
@ -59,6 +60,7 @@ class MessageMenuRobot(
clickOn(R.string.message_add_reaction) clickOn(R.string.message_add_reaction)
// Wait for emoji to load, it's async now // Wait for emoji to load, it's async now
waitUntilActivityVisible<EmojiReactionPickerActivity> { waitUntilActivityVisible<EmojiReactionPickerActivity> {
closeSoftKeyboard()
waitUntilViewVisible(withId(R.id.emojiRecyclerView)) waitUntilViewVisible(withId(R.id.emojiRecyclerView))
waitUntilViewVisible(withText("😀")) waitUntilViewVisible(withText("😀"))
} }

View File

@ -17,6 +17,7 @@
package im.vector.app.ui.robot package im.vector.app.ui.robot
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso.closeSoftKeyboard
import androidx.test.espresso.Espresso.onView import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.Espresso.pressBack import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.action.ViewActions import androidx.test.espresso.action.ViewActions
@ -44,6 +45,7 @@ class RoomDetailRobot {
fun postMessage(content: String) { fun postMessage(content: String) {
writeTo(R.id.composerEditText, content) writeTo(R.id.composerEditText, content)
closeSoftKeyboard()
waitUntilViewVisible(withId(R.id.sendButton)) waitUntilViewVisible(withId(R.id.sendButton))
clickOn(R.id.sendButton) clickOn(R.id.sendButton)
waitUntilViewVisible(withText(content)) waitUntilViewVisible(withText(content))
@ -68,6 +70,7 @@ class RoomDetailRobot {
} }
val threadMessage = "Hello universe - long message to avoid espresso tapping edited!" val threadMessage = "Hello universe - long message to avoid espresso tapping edited!"
writeTo(R.id.composerEditText, threadMessage) writeTo(R.id.composerEditText, threadMessage)
closeSoftKeyboard()
waitUntilViewVisible(withId(R.id.sendButton)) waitUntilViewVisible(withId(R.id.sendButton))
clickOn(R.id.sendButton) clickOn(R.id.sendButton)
} }
@ -105,6 +108,7 @@ class RoomDetailRobot {
// TODO Cancel action // TODO Cancel action
val edit = "Hello universe - long message to avoid espresso tapping edited!" val edit = "Hello universe - long message to avoid espresso tapping edited!"
writeTo(R.id.composerEditText, edit) writeTo(R.id.composerEditText, edit)
closeSoftKeyboard()
// Wait a bit for the keyboard layout to update // Wait a bit for the keyboard layout to update
waitUntilViewVisible(withId(R.id.sendButton)) waitUntilViewVisible(withId(R.id.sendButton))
clickOn(R.id.sendButton) clickOn(R.id.sendButton)
@ -150,7 +154,9 @@ class RoomDetailRobot {
fun openThreadSummaries() { fun openThreadSummaries() {
clickMenu(R.id.menu_timeline_thread_list) clickMenu(R.id.menu_timeline_thread_list)
waitUntilViewVisible(withId(R.id.threadListRecyclerView)) withRetry {
waitUntilViewVisible(withId(R.id.threadListRecyclerView))
}
} }
fun selectThreadSummariesFilter() { fun selectThreadSummariesFilter() {

View File

@ -32,15 +32,14 @@ import im.vector.app.espresso.tools.waitUntilDialogVisible
import im.vector.app.espresso.tools.waitUntilViewVisible import im.vector.app.espresso.tools.waitUntilViewVisible
import im.vector.app.features.home.HomeActivity import im.vector.app.features.home.HomeActivity
import im.vector.app.features.spaces.manage.SpaceManageActivity import im.vector.app.features.spaces.manage.SpaceManageActivity
import java.util.UUID
class SpaceCreateRobot { class SpaceCreateRobot {
fun crawl() { fun createAndCrawl(name: String) {
// public // public
clickOn(R.id.publicButton) clickOn(R.id.publicButton)
waitUntilViewVisible(withId(R.id.recyclerView)) waitUntilViewVisible(withId(R.id.recyclerView))
onView(ViewMatchers.withHint(R.string.create_room_name_hint)).perform(ViewActions.replaceText(UUID.randomUUID().toString())) onView(ViewMatchers.withHint(R.string.create_room_name_hint)).perform(ViewActions.replaceText(name))
clickOn(R.id.nextButton) clickOn(R.id.nextButton)
waitUntilViewVisible(withId(R.id.recyclerView)) waitUntilViewVisible(withId(R.id.recyclerView))
pressBack() pressBack()

View File

@ -16,13 +16,9 @@
package im.vector.app.ui.robot.space package im.vector.app.ui.robot.space
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso import androidx.test.espresso.Espresso
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import com.adevinta.android.barista.internal.viewaction.ClickChildAction
import im.vector.app.R import im.vector.app.R
import im.vector.app.clickOnSheet import im.vector.app.clickOnSheet
import im.vector.app.espresso.tools.waitUntilActivityVisible import im.vector.app.espresso.tools.waitUntilActivityVisible
@ -33,22 +29,9 @@ import im.vector.app.features.roomprofile.RoomProfileActivity
import im.vector.app.features.spaces.SpaceExploreActivity import im.vector.app.features.spaces.SpaceExploreActivity
import im.vector.app.features.spaces.leave.SpaceLeaveAdvancedActivity import im.vector.app.features.spaces.leave.SpaceLeaveAdvancedActivity
import im.vector.app.features.spaces.manage.SpaceManageActivity import im.vector.app.features.spaces.manage.SpaceManageActivity
import org.hamcrest.Matchers
class SpaceMenuRobot { class SpaceMenuRobot {
fun openMenu(spaceName: String) {
waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView))
onView(ViewMatchers.withId(R.id.groupListView))
.perform(
RecyclerViewActions.actionOnItem<RecyclerView.ViewHolder>(
ViewMatchers.hasDescendant(Matchers.allOf(ViewMatchers.withId(R.id.groupNameView), ViewMatchers.withText(spaceName))),
ClickChildAction.clickChildWithId(R.id.groupTmpLeave)
).atPosition(0)
)
waitUntilDialogVisible(ViewMatchers.withId(R.id.spaceNameView))
}
fun invitePeople() = apply { fun invitePeople() = apply {
clickOnSheet(R.id.invitePeople) clickOnSheet(R.id.invitePeople)
waitUntilDialogVisible(ViewMatchers.withId(R.id.inviteByMxidButton)) waitUntilDialogVisible(ViewMatchers.withId(R.id.inviteByMxidButton))

View File

@ -16,9 +16,17 @@
package im.vector.app.ui.robot.space package im.vector.app.ui.robot.space
import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers
import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer import com.adevinta.android.barista.interaction.BaristaDrawerInteractions.openDrawer
import com.adevinta.android.barista.internal.viewaction.ClickChildAction
import im.vector.app.R import im.vector.app.R
import im.vector.app.espresso.tools.waitUntilDialogVisible
import im.vector.app.espresso.tools.waitUntilViewVisible
import org.hamcrest.Matchers
class SpaceRobot { class SpaceRobot {
@ -35,4 +43,22 @@ class SpaceRobot {
block() block()
} }
} }
fun openMenu(spaceName: String) {
waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView))
Espresso.onView(ViewMatchers.withId(R.id.groupListView))
.perform(
RecyclerViewActions.actionOnItem<RecyclerView.ViewHolder>(
ViewMatchers.hasDescendant(Matchers.allOf(ViewMatchers.withId(R.id.groupNameView), ViewMatchers.withText(spaceName))),
ClickChildAction.clickChildWithId(R.id.groupTmpLeave)
).atPosition(0)
)
waitUntilDialogVisible(ViewMatchers.withId(R.id.spaceNameView))
}
fun selectSpace(spaceName: String) {
openDrawer()
waitUntilViewVisible(ViewMatchers.withId(R.id.groupListView))
clickOn(spaceName)
}
} }