removing sleeps in favour of waiting for the views to become ready

- improves the flakyness around the bottom sheets and dialogs
This commit is contained in:
Adam Brown 2021-11-05 11:15:46 +00:00
parent 5284765149
commit e0544a677d
2 changed files with 97 additions and 51 deletions

View file

@ -0,0 +1,29 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.ui.robot
import com.adevinta.android.barista.interaction.BaristaDialogInteractions.clickDialogNegativeButton
class DialogRobot(
var returnedToPreviousScreen: Boolean = false
) {
fun negativeAction() {
clickDialogNegativeButton()
returnedToPreviousScreen = true
}
}

View file

@ -16,107 +16,124 @@
package im.vector.app.ui.robot package im.vector.app.ui.robot
import androidx.test.espresso.Espresso import androidx.test.espresso.Espresso.pressBack
import androidx.test.espresso.action.ViewActions import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.withId
import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions import androidx.test.espresso.matcher.ViewMatchers.withText
import com.adevinta.android.barista.interaction.BaristaClickInteractions import com.adevinta.android.barista.assertion.BaristaVisibilityAssertions.assertDisplayed
import com.adevinta.android.barista.interaction.BaristaDialogInteractions import com.adevinta.android.barista.interaction.BaristaClickInteractions.clickOn
import com.adevinta.android.barista.interaction.BaristaListInteractions import com.adevinta.android.barista.interaction.BaristaDialogInteractions.clickDialogNegativeButton
import com.adevinta.android.barista.interaction.BaristaListInteractions.clickListItem
import im.vector.app.R import im.vector.app.R
import im.vector.app.waitForView import im.vector.app.espresso.tools.waitUntilViewVisible
class RoomSettingsRobot { class RoomSettingsRobot {
fun crawl() { fun crawl() {
// Room settings // Room settings
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 3) clickListItem(R.id.matrixProfileRecyclerView, 3)
navigateToRoomParameters() navigateToRoomParameters()
Espresso.pressBack() pressBack()
// Notifications // Notifications
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 5) clickListItem(R.id.matrixProfileRecyclerView, 5)
Espresso.pressBack() pressBack()
BaristaVisibilityAssertions.assertDisplayed(R.id.roomProfileAvatarView) assertDisplayed(R.id.roomProfileAvatarView)
// People // People
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 7) clickListItem(R.id.matrixProfileRecyclerView, 7)
BaristaVisibilityAssertions.assertDisplayed(R.id.inviteUsersButton) assertDisplayed(R.id.inviteUsersButton)
navigateToRoomPeople() navigateToRoomPeople()
// Fab // Fab
navigateToInvite() navigateToInvite()
Espresso.pressBack() pressBack()
Espresso.pressBack() pressBack()
BaristaVisibilityAssertions.assertDisplayed(R.id.roomProfileAvatarView) assertDisplayed(R.id.roomProfileAvatarView)
// Uploads // Uploads
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 9) clickListItem(R.id.matrixProfileRecyclerView, 9)
// File tab // File tab
BaristaClickInteractions.clickOn(R.string.uploads_files_title) clickOn(R.string.uploads_files_title)
Thread.sleep(1000) waitUntilViewVisible(withText(R.string.uploads_media_title))
Espresso.pressBack() pressBack()
waitUntilViewVisible(withId(R.id.matrixProfileRecyclerView))
BaristaVisibilityAssertions.assertDisplayed(R.id.roomProfileAvatarView) assertDisplayed(R.id.roomProfileAvatarView)
// Leave // Leave
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 13) leaveRoom {
BaristaDialogInteractions.clickDialogNegativeButton() negativeAction()
}
// Advanced // Advanced
// Room addresses // Room addresses
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 15)
Espresso.onView(ViewMatchers.isRoot()).perform(waitForView(ViewMatchers.withText(R.string.room_alias_published_alias_title))) clickListItem(R.id.matrixProfileRecyclerView, 15)
Espresso.pressBack() waitUntilViewVisible(withText(R.string.room_alias_published_alias_title))
pressBack()
// Room permissions // Room permissions
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 17) clickListItem(R.id.matrixProfileRecyclerView, 17)
Espresso.onView(ViewMatchers.isRoot()).perform(waitForView(ViewMatchers.withText(R.string.room_permissions_title))) waitUntilViewVisible(withText(R.string.room_permissions_title))
BaristaClickInteractions.clickOn(R.string.room_permissions_change_room_avatar) clickOn(R.string.room_permissions_change_room_avatar)
BaristaDialogInteractions.clickDialogNegativeButton() waitUntilViewVisible(withId(android.R.id.button2))
clickDialogNegativeButton()
waitUntilViewVisible(withText(R.string.room_permissions_title))
// Toggle // Toggle
BaristaClickInteractions.clickOn(R.string.show_advanced) clickOn(R.string.show_advanced)
BaristaClickInteractions.clickOn(R.string.hide_advanced) clickOn(R.string.hide_advanced)
Espresso.pressBack() pressBack()
// Menu share // Menu share
// clickMenu(R.id.roomProfileShareAction) // clickMenu(R.id.roomProfileShareAction)
// pressBack() // pressBack()
} }
private fun leaveRoom(block: DialogRobot.() -> Unit) {
clickListItem(R.id.matrixProfileRecyclerView, 13)
waitUntilViewVisible(withId(android.R.id.button2))
val dialogRobot = DialogRobot()
block(dialogRobot)
if (dialogRobot.returnedToPreviousScreen) {
waitUntilViewVisible(withId(R.id.matrixProfileRecyclerView))
}
}
private fun navigateToRoomParameters() { private fun navigateToRoomParameters() {
// Room history readability // Room history readability
BaristaListInteractions.clickListItem(R.id.roomSettingsRecyclerView, 4) clickListItem(R.id.roomSettingsRecyclerView, 4)
Espresso.pressBack() pressBack()
// Room access // Room access
BaristaListInteractions.clickListItem(R.id.roomSettingsRecyclerView, 6) clickListItem(R.id.roomSettingsRecyclerView, 6)
Espresso.pressBack() pressBack()
} }
private fun navigateToInvite() { private fun navigateToInvite() {
BaristaVisibilityAssertions.assertDisplayed(R.id.inviteUsersButton) assertDisplayed(R.id.inviteUsersButton)
BaristaClickInteractions.clickOn(R.id.inviteUsersButton) clickOn(R.id.inviteUsersButton)
ViewActions.closeSoftKeyboard() ViewActions.closeSoftKeyboard()
Espresso.pressBack() pressBack()
} }
private fun navigateToRoomPeople() { private fun navigateToRoomPeople() {
// Open first user // Open first user
BaristaListInteractions.clickListItem(R.id.roomSettingsRecyclerView, 1) clickListItem(R.id.roomSettingsRecyclerView, 1)
Thread.sleep(1000) waitUntilViewVisible(withId(R.id.memberProfilePowerLevelView))
BaristaVisibilityAssertions.assertDisplayed(R.id.memberProfilePowerLevelView)
// Verification // Verification
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 1) clickListItem(R.id.matrixProfileRecyclerView, 1)
BaristaClickInteractions.clickBack() waitUntilViewVisible(withId(R.id.bottomSheetRecyclerView))
pressBack()
waitUntilViewVisible(withId(R.id.matrixProfileRecyclerView))
// Role // Role
BaristaListInteractions.clickListItem(R.id.matrixProfileRecyclerView, 3) clickListItem(R.id.matrixProfileRecyclerView, 3)
Thread.sleep(1000) waitUntilViewVisible(withId(android.R.id.button2))
BaristaDialogInteractions.clickDialogNegativeButton() clickDialogNegativeButton()
Thread.sleep(1000) waitUntilViewVisible(withId(R.id.matrixProfileRecyclerView))
BaristaClickInteractions.clickBack() pressBack()
} }
} }