diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt
index bc59c57012..214dbfbe4b 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/classic/HelpMenuE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.StringConstants.HelpMenu
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.parentapp.R
import com.instructure.parentapp.utils.ParentComposeTest
import com.instructure.parentapp.utils.extensions.seedData
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt
index fa19e001e0..15ec57c6f3 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AlertsE2ETest.kt
@@ -22,7 +22,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.models.AlertType
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.SubmissionsApi
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt
index e9acd33eee..efa1f7d6bc 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentDetailsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.GradingType
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt
index 9a62c37a2e..c09800d29d 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/AssignmentReminderE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.model.GradingType
import com.instructure.dataseeding.model.SubmissionType
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt
index 9f533eef91..680c9e6efe 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/CalendarE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.toApiString
import com.instructure.dataseeding.api.CalendarEventApi
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt
index d4cbd79e91..042b2aeb9c 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/InboxE2ETest.kt
@@ -30,7 +30,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.toApiString
import com.instructure.dataseeding.api.AssignmentsApi
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt
index cc1562470e..c4203963d8 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/e2e/compose/SettingsE2ETest.kt
@@ -24,8 +24,8 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.model.GradingType
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt
index 58f168b5fc..b2b3cff577 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/AssignmentDetailsInteractionTest.kt
@@ -27,7 +27,6 @@ import com.instructure.canvas.espresso.FeatureCategory
import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
-import com.instructure.canvas.espresso.checkToastText
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.addAssignment
import com.instructure.canvas.espresso.mockcanvas.addAssignmentsToGroups
@@ -35,6 +34,7 @@ import com.instructure.canvas.espresso.mockcanvas.addObserverAlert
import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
import com.instructure.canvas.espresso.mockcanvas.init
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.canvasapi2.di.graphql.CustomGradeStatusModule
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.AlertType
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt
index d1e19afd22..a735975473 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/DashboardInteractionTest.kt
@@ -27,7 +27,7 @@ import com.google.android.apps.common.testing.accessibility.framework.Accessibil
import com.google.android.apps.common.testing.accessibility.framework.checks.SpeakableTextPresentCheck
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.utils.Pronouns
import com.instructure.loginapi.login.R
import com.instructure.parentapp.utils.ParentComposeTest
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt
index 2da7ba5fae..6ca653b22c 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/interaction/NotAParentInteractionsTest.kt
@@ -29,7 +29,7 @@ import com.instructure.canvas.espresso.mockcanvas.addEnrollment
import com.instructure.canvas.espresso.mockcanvas.addUser
import com.instructure.canvas.espresso.mockcanvas.init
import com.instructure.canvas.espresso.mockcanvas.updateUserEnrollments
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.Enrollment
import com.instructure.loginapi.login.R
import com.instructure.parentapp.utils.ParentComposeTest
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt
index bf8dcdff43..ea8cba98f0 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/HelpPage.kt
@@ -24,7 +24,7 @@ import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.StringConstants.HelpMenu
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithStringTextIgnoreCase
import com.instructure.espresso.OnViewWithText
import com.instructure.espresso.assertDisplayed
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt
index 4b337d12c8..d87d371dde 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/classic/LeftSideNavigationDrawerPage.kt
@@ -20,7 +20,7 @@ import androidx.test.espresso.Espresso
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
diff --git a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt
index 31d32d4e8e..415be10511 100644
--- a/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt
+++ b/apps/parent/src/androidTest/java/com/instructure/parentapp/ui/pages/compose/CourseDetailsPage.kt
@@ -31,7 +31,7 @@ import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.utils.toDate
import com.instructure.dataseeding.model.CourseApiModel
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt
index eec078207e..9838344829 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/AnnouncementsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt
index bf8ed827c7..a0be1ffab3 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ConferencesE2ETest.kt
@@ -22,7 +22,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.ConferencesApi
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt
index e82d90f94f..d2d2fa6497 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/DiscussionsE2ETest.kt
@@ -26,7 +26,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.dataseeding.api.FileFolderApi
import com.instructure.dataseeding.api.FileUploadsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt
index b679ab3742..b9dab39d0d 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/FilesE2ETest.kt
@@ -28,7 +28,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.managers.DiscussionManager
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.weave.awaitApiResponse
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt
index 315780cb1a..63699d6421 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/HelpMenuE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.StringConstants.HelpMenu
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.student.R
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt
index 307f52fe34..91487b9bc7 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/LoginE2ETest.kt
@@ -28,7 +28,7 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.api.EnrollmentsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt
index 7dd2d17a56..cfa4ea14db 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/NotificationsE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.ConversationsApi
import com.instructure.dataseeding.api.DiscussionTopicsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt
index c3599f92bc..adce215b1e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/QuizzesE2ETest.kt
@@ -29,7 +29,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.QuizzesApi
import com.instructure.dataseeding.model.QuizAnswer
import com.instructure.dataseeding.model.QuizQuestion
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt
index cb94725be3..c1d112aedf 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/ShareExtensionE2ETest.kt
@@ -25,7 +25,7 @@ import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiSelector
import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.model.GradingType
import com.instructure.dataseeding.model.SubmissionType
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt
index adfa998225..16b1297796 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAnnouncementsE2ETest.kt
@@ -27,7 +27,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.espresso.getVideoPosition
import com.instructure.student.ui.utils.StudentComposeTest
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt
index cc0dea1d60..0717d44007 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineAssignmentsE2ETest.kt
@@ -24,8 +24,8 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
import com.instructure.canvas.espresso.common.pages.compose.AssignmentListPage
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentGroupsApi
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.SubmissionsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt
index 0242c70521..ce50a83f58 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineDiscussionsE2ETest.kt
@@ -25,9 +25,9 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.dataseeding.api.FileFolderApi
import com.instructure.dataseeding.api.FileUploadsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt
index c48435baa6..59e60f35cd 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLeftSideMenuE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt
index 9ac702bffd..4c9f1a65be 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineLoginE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt
index 00754ec014..e4b60abc90 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineModulesE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.dataseeding.api.ModulesApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt
index 1d7dbfe403..1a21b749ec 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePagesE2ETest.kt
@@ -26,7 +26,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.PagesApi
import com.instructure.student.ui.pages.classic.WebViewTextCheck
import com.instructure.student.ui.utils.StudentTest
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt
index 6d6eb60128..5972482033 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflinePeopleE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt
index 2cab83b195..6b225a0f57 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSettingsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt
index 8969573d0a..890f2b767f 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyllabusE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt
index 0c21032139..07a3cf7d8b 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncProgressE2ETest.kt
@@ -26,7 +26,7 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.student.ui.utils.StudentTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt
index ccbf589970..5881802cff 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/classic/offline/OfflineSyncSettingsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.OfflineE2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.pandautils.R
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt
index 8bd1aaa082..c3f3a4ac1f 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/AssignmentsE2ETest.kt
@@ -28,9 +28,9 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
import com.instructure.canvas.espresso.common.pages.compose.AssignmentListPage
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentGroupsApi
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt
index 29a4d9207d..4e86a20d00 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/BookmarksE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
import com.instructure.dataseeding.api.PagesApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt
index 3413e11d85..048daa7474 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/CalendarE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.espresso.getDateInCanvasCalendarFormat
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt
index 1f9626a536..275a562e51 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/InboxE2ETest.kt
@@ -31,7 +31,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.ConversationsApi
import com.instructure.dataseeding.api.GroupsApi
import com.instructure.espresso.getVideoPosition
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt
index a08306675b..a22f0be4f8 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/PeopleE2ETest.kt
@@ -22,7 +22,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.student.ui.utils.StudentComposeTest
import com.instructure.student.ui.utils.extensions.seedData
import com.instructure.student.ui.utils.extensions.tokenLogin
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt
index c15553f422..d3fc026873 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/e2e/compose/SettingsE2ETest.kt
@@ -22,14 +22,14 @@ import androidx.test.espresso.Espresso
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.Intents.intended
import com.instructure.canvas.espresso.FeatureCategory
-import com.instructure.canvas.espresso.IntentActionMatcher
import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.IntentActionMatcher
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.canvasapi2.utils.RemoteConfigUtils
import com.instructure.dataseeding.api.ConversationsApi
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt
index 59f5dd620d..5dc787fa3e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/AssignmentDetailsInteractionTest.kt
@@ -37,14 +37,14 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
-import com.instructure.canvas.espresso.checkToastText
import com.instructure.canvas.espresso.mockcanvas.MockCanvas
import com.instructure.canvas.espresso.mockcanvas.addAssignment
import com.instructure.canvas.espresso.mockcanvas.addAssignmentsToGroups
import com.instructure.canvas.espresso.mockcanvas.addSubmissionForAssignment
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.di.graphql.CustomGradeStatusModule
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.Assignment
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt
index 0d050ae7b9..40577cf944 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/BookmarkInteractionTest.kt
@@ -29,7 +29,7 @@ import com.instructure.canvas.espresso.mockcanvas.addAssignment
import com.instructure.canvas.espresso.mockcanvas.addBookmark
import com.instructure.canvas.espresso.mockcanvas.fakes.FakeCustomGradeStatusesManager
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.di.graphql.CustomGradeStatusModule
import com.instructure.canvasapi2.managers.graphql.CustomGradeStatusesManager
import com.instructure.canvasapi2.models.Assignment
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt
index 4f5545bb7f..ad74db380d 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/interaction/GroupLinksInteractionTest.kt
@@ -30,7 +30,7 @@ import com.instructure.canvas.espresso.mockcanvas.addFolderToCourse
import com.instructure.canvas.espresso.mockcanvas.addGroupToCourse
import com.instructure.canvas.espresso.mockcanvas.addPageToCourse
import com.instructure.canvas.espresso.mockcanvas.init
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.DiscussionTopicHeader
import com.instructure.canvasapi2.models.Group
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt
index 7ea7db0296..04ec56f09f 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/AnnotationCommentListPage.kt
@@ -17,7 +17,7 @@
package com.instructure.student.ui.pages.classic
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt
index 1aa45b2065..905fbc3807 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/BookmarkPage.kt
@@ -27,8 +27,8 @@ import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiSelector
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.clearText
import com.instructure.espresso.click
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt
index a5a9fbf537..f9b1d5198b 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/CourseBrowserPage.kt
@@ -31,8 +31,8 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.withChild
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Tab
import com.instructure.dataseeding.model.CourseApiModel
@@ -189,8 +189,8 @@ open class CourseBrowserPage : BasePage(R.id.courseBrowserPage) {
// need either one or two swipe-downs to effect a refresh. We'll go with two to cover
// our bases.
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed()))
- .perform(withCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
- .perform(withCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), isDisplayingAtLeast(5)))
}
// When the toolbar is maximized, you can't do any operations with the recyclerView
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt
index de89ebf3fd..3c72d81a04 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DashboardPage.kt
@@ -37,9 +37,9 @@ import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.waitForViewToDisappear
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.waitForViewToDisappear
import com.instructure.canvasapi2.models.AccountNotification
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.Group
@@ -216,12 +216,12 @@ class DashboardPage : BasePage(R.id.dashboardPage) {
fun selectCourse(course: Course) {
assertDisplaysCourse(course)
- onView(withId(R.id.titleTextView) + withText(course.originalName)).perform(withCustomConstraints(click(), isDisplayingAtLeast(10)))
+ onView(withId(R.id.titleTextView) + withText(course.originalName)).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(10)))
}
fun selectCourse(courseName: String) {
assertDisplaysCourse(courseName)
- onView(withId(R.id.titleTextView) + withText(courseName)).perform(withCustomConstraints(click(), isDisplayingAtLeast(10)))
+ onView(withId(R.id.titleTextView) + withText(courseName)).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(10)))
}
fun selectGroup(group: Group) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt
index 159d39ea88..ff398d184e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/DiscussionListPage.kt
@@ -23,8 +23,8 @@ import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withParent
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.waitForMatcherWithRefreshes
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.waitForMatcherWithRefreshes
import com.instructure.canvasapi2.models.DiscussionTopicHeader
import com.instructure.espresso.DoesNotExistAssertion
import com.instructure.espresso.OnViewWithId
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt
index ccd1da8500..2e125a5a9a 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/FileListPage.kt
@@ -28,9 +28,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withChild
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.Searchable
import com.instructure.espresso.assertDisplayed
@@ -102,7 +102,7 @@ class FileListPage(val searchable: Searchable) : BasePage(R.id.fileListPage) {
// Doesn't worry about having scrolling to the top of the page first...
fun refresh() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(50)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
fun openOptionMenuFor(itemName: String) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt
index 3913699b3f..3e4b405ca1 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/HelpPage.kt
@@ -26,8 +26,8 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.StringConstants.HelpMenu
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.canvasapi2.models.Course
import com.instructure.dataseeding.model.CourseApiModel
import com.instructure.espresso.OnViewWithStringTextIgnoreCase
@@ -55,7 +55,7 @@ class HelpPage : BasePage(R.id.helpDialog) {
fun assertAskYourInstructorDialogDetails(course: Course, question: String) {
askInstructorLabel.scrollTo().click()
waitForView(withText(course.name)).assertDisplayed() // Verify that our course is selected in the spinner
- onView(withId(R.id.message)).scrollTo().perform(withCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
+ onView(withId(R.id.message)).scrollTo().perform(actionWithCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
Espresso.closeSoftKeyboard()
// Let's just make sure that the "Send" button is displayed, rather than actually pressing it
onView(containsTextCaseInsensitive("Send")).assertDisplayed()
@@ -64,7 +64,7 @@ class HelpPage : BasePage(R.id.helpDialog) {
private fun assertAskYourInstructorDialogDetails(course: CourseApiModel, question: String) {
askInstructorLabel.scrollTo().click()
waitForView(withText(course.name)).assertDisplayed() // Verify that our course is selected in the spinner
- onView(withId(R.id.message)).scrollTo().perform(withCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
+ onView(withId(R.id.message)).scrollTo().perform(actionWithCustomConstraints(typeText(question), isDisplayingAtLeast(1)))
Espresso.closeSoftKeyboard()
// Let's just make sure that the "Send" button is displayed, rather than actually pressing it
onView(containsTextCaseInsensitive("Send")).assertDisplayed()
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt
index 70745237d8..466e4300b0 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/LeftSideNavigationDrawerPage.kt
@@ -9,7 +9,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.OnViewWithContentDescription
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt
index 3a2f540655..0176440bc4 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ModulesPage.kt
@@ -26,9 +26,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withChild
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.ImageViewDrawableMatcher
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.ImageViewDrawableMatcher
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.Course
import com.instructure.canvasapi2.models.ModuleObject
@@ -183,7 +183,7 @@ class ModulesPage : BasePage(R.id.modulesPage) {
}
fun refresh() {
- onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed())).perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(5)))
+ onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed())).perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(5)))
}
fun clickOnModuleExpandCollapseIcon(moduleName: String) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt
index b201a65456..c240353169 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/NotificationPage.kt
@@ -20,9 +20,9 @@ import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.refresh
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.refresh
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.RecyclerViewItemCountGreaterThanAssertion
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt
index 0424bc4619..d33a9e5ab3 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PageListPage.kt
@@ -20,7 +20,7 @@ import android.view.View
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Page
import com.instructure.dataseeding.model.PageApiModel
import com.instructure.espresso.DoesNotExistAssertion
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt
index d692cd4016..1a6313f582 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PairObserverPage.kt
@@ -18,8 +18,8 @@ package com.instructure.student.ui.pages.classic
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.getText
-import com.instructure.canvas.espresso.matchToolbarText
+import com.instructure.canvas.espresso.utils.getText
+import com.instructure.canvas.espresso.utils.matchToolbarText
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.WaitForViewWithId
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt
index 235df4a65d..d777dc428e 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PandaAvatarPage.kt
@@ -2,7 +2,7 @@ package com.instructure.student.ui.pages.classic
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.stringContainsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.stringContainsTextCaseInsensitive
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
import com.instructure.espresso.page.onView
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt
index f8814d9c37..0648a5d49c 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/PeopleListPage.kt
@@ -23,7 +23,7 @@ import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
-import com.instructure.canvas.espresso.getViewChildCountWithoutId
+import com.instructure.canvas.espresso.utils.getViewChildCountWithoutId
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.OnViewWithId
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt
index 750c32bd45..a4e9a7499d 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/ProfileSettingsPage.kt
@@ -8,7 +8,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.withId
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt
index bbe2201c8b..55f7ad2a18 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/QuizListPage.kt
@@ -23,8 +23,8 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Quiz
import com.instructure.dataseeding.model.QuizApiModel
import com.instructure.espresso.RecyclerViewItemCountAssertion
@@ -93,7 +93,7 @@ class QuizListPage(val searchable: Searchable) : BasePage(R.id.quizListPage) {
fun refresh() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayed()))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
fun assertPointsDisplayed(points: String?) {
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt
index 73ea2f4b18..3430b842ef 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/RemoteConfigSettingsPage.kt
@@ -21,9 +21,9 @@ import android.widget.EditText
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.clearFocus
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.clearFocus
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt
index a84e6f8708..e5e5816906 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/StudentAssignmentDetailsPage.kt
@@ -27,7 +27,7 @@ import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
import com.instructure.canvas.espresso.CanvasTest
import com.instructure.canvas.espresso.common.pages.AssignmentDetailsPage
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.espresso.ModuleItemInteractions
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt
index fbf83aa826..4921f25378 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SubmissionDetailsPage.kt
@@ -38,10 +38,10 @@ import androidx.test.espresso.web.sugar.Web.onWebView
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.clickCoordinates
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.clickCoordinates
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.dataseeding.model.RubricCriterion
@@ -232,7 +232,7 @@ open class SubmissionDetailsPage : BasePage(R.id.submissionDetails) {
if(click) {
//onView(commentMatcher).click()
onView(allOf(withId(R.id.attachmentNameTextView), withText(fileName)))
- .perform(withCustomConstraints(click(), isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(5)))
}
}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt
index 7fc11742d9..7500c55fc0 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/SyllabusPage.kt
@@ -24,9 +24,9 @@ import androidx.test.espresso.web.assertion.WebViewAssertions
import androidx.test.espresso.web.sugar.Web
import androidx.test.espresso.web.webdriver.DriverAtoms
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.matchToolbarText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.matchToolbarText
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt
index 6a7e466a4c..444065deaa 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/k5/ImportantDatesPage.kt
@@ -21,7 +21,7 @@ import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.countConstraintLayoutsInRecyclerView
+import com.instructure.canvas.espresso.utils.countConstraintLayoutsInRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertHasChild
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt
index e54b83838d..a0f162c6e5 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/ManageOfflineContentPage.kt
@@ -24,9 +24,9 @@ import androidx.test.espresso.matcher.ViewMatchers.Visibility
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.hasCheckedState
-import com.instructure.canvas.espresso.withRotation
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.hasCheckedState
+import com.instructure.canvas.espresso.utils.withRotation
import com.instructure.espresso.ConstraintLayoutItemCountAssertion
import com.instructure.espresso.ConstraintLayoutItemCountAssertionWithMatcher
import com.instructure.espresso.DoesNotExistAssertion
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt
index ee17271db8..f5781ea21f 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/NativeDiscussionDetailsPage.kt
@@ -29,10 +29,10 @@ import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.DriverAtoms.webClick
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.isElementDisplayed
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.isElementDisplayed
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvas.espresso.withElementRepeat
import com.instructure.canvasapi2.models.DiscussionEntry
import com.instructure.canvasapi2.models.DiscussionTopicHeader
@@ -86,7 +86,7 @@ class NativeDiscussionDetailsPage(val moduleItemInteractions: ModuleItemInteract
fun refresh() {
scrollToTop()
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(10)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
fun scrollToRepliesWebview() {
@@ -348,6 +348,6 @@ class NativeDiscussionDetailsPage(val moduleItemInteractions: ModuleItemInteract
private fun scrollToTop() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(10)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
}
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt
index 35e251c694..5b34077de8 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/classic/offline/SyncProgressPage.kt
@@ -20,8 +20,8 @@ package com.instructure.student.ui.pages.classic.offline
import android.widget.TextView
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.getView
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.getView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertContainsText
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt
index a7f389471c..5663e3288b 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/pages/compose/TextSubmissionUploadPage.kt
@@ -17,8 +17,8 @@
package com.instructure.student.ui.pages.compose
import androidx.compose.ui.test.junit4.ComposeTestRule
-import com.instructure.canvas.espresso.TypeInRCETextEditor
-import com.instructure.canvas.espresso.explicitClick
+import com.instructure.canvas.espresso.utils.TypeInRCETextEditor
+import com.instructure.canvas.espresso.utils.explicitClick
import com.instructure.composetest.clickToolbarIconButton
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.OnViewWithText
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt
index e9c3e63113..96887e33d3 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/SubmissionRubricRenderTest.kt
@@ -22,7 +22,7 @@ import androidx.test.espresso.matcher.RootMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasChildCount
import androidx.test.espresso.matcher.ViewMatchers.isSelected
import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.instructure.canvas.espresso.assertFontSizeSP
+import com.instructure.canvas.espresso.utils.assertFontSizeSP
import com.instructure.canvasapi2.models.Assignment
import com.instructure.canvasapi2.models.RubricCriterion
import com.instructure.canvasapi2.models.RubricCriterionRating
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt
index 4a58351281..6ad7cb93ae 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceDetailsRenderPage.kt
@@ -18,7 +18,7 @@ package com.instructure.student.ui.rendertests.renderpages
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers.withAlpha
-import com.instructure.canvas.espresso.assertIsRefreshing
+import com.instructure.canvas.espresso.utils.assertIsRefreshing
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertGone
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt
index afe553df23..403a323975 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/ConferenceListRenderPage.kt
@@ -17,8 +17,8 @@
package com.instructure.student.ui.rendertests.renderpages
import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
-import com.instructure.canvas.espresso.assertIsRefreshing
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.assertIsRefreshing
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertGone
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt
index c08fb787ce..64a52656dd 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/PairObserverRenderPage.kt
@@ -16,7 +16,7 @@
*/
package com.instructure.student.ui.rendertests.renderpages
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.assertGone
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt
index bca33cea82..0e2f6f62be 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/rendertests/renderpages/SubmissionCommentsRenderPage.kt
@@ -23,8 +23,8 @@ import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.DirectlyPopulateEditText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.DirectlyPopulateEditText
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.utils.Pronouns
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
diff --git a/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt b/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt
index 881050f439..7aa6f0d5dd 100644
--- a/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt
+++ b/apps/student/src/androidTest/java/com/instructure/student/ui/utils/extensions/StudentTestExtensions.kt
@@ -24,14 +24,12 @@ import android.net.Uri
import android.os.Environment
import androidx.fragment.app.FragmentActivity
import androidx.test.espresso.Espresso
-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.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.platform.app.InstrumentationRegistry
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CoursesApi
@@ -210,9 +208,9 @@ fun CanvasTest.tokenLogin(domain: String, token: String, user: User) {
}
// Sometimes, especially on slow FTL emulators, it can take a bit for the dashboard to show
// up after a token login. Add some tolerance for that.
- waitForMatcherWithSleeps(ViewMatchers.withId(R.id.dashboardPage), 20000).check(
- ViewAssertions.matches(
- ViewMatchers.isDisplayed()
+ waitForMatcherWithSleeps(withId(R.id.dashboardPage), 20000).check(
+ matches(
+ isDisplayed()
)
)
}
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt
index fe902958b3..f9c62a23ab 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/CourseSettingsE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.PagesApi
import com.instructure.teacher.ui.utils.TeacherTest
import com.instructure.teacher.ui.utils.extensions.seedData
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt
index 57aa73617e..ad0f9e7394 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/DiscussionsE2ETest.kt
@@ -24,7 +24,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.DiscussionTopicsApi
import com.instructure.espresso.getCustomDateCalendar
import com.instructure.teacher.ui.utils.TeacherComposeTest
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt
index 0e6e422a88..017fe41694 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/FilesE2ETest.kt
@@ -31,7 +31,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.managers.DiscussionManager
import com.instructure.canvasapi2.models.CanvasContext
import com.instructure.canvasapi2.utils.weave.awaitApiResponse
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt
index ab06c7897f..fc29dd5e61 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/HelpMenuE2ETest.kt
@@ -25,7 +25,7 @@ import com.instructure.canvas.espresso.StringConstants.HelpMenu
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.teacher.R
import com.instructure.teacher.ui.utils.TeacherTest
import com.instructure.teacher.ui.utils.extensions.seedData
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt
index 008090edc2..7bb77b66a1 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/LoginE2ETest.kt
@@ -28,7 +28,7 @@ import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.annotations.Stub
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.ApiPrefs
import com.instructure.dataseeding.api.SeedApi
import com.instructure.dataseeding.api.UserApi
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt
index 90b94db5ec..a9f712333a 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/PeopleE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.GroupsApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.SubmissionType
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt
index 18c6f89f08..6ce29caa54 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/QuizE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt
index a63fd69d55..a56d4b74f8 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/SettingsE2ETest.kt
@@ -26,8 +26,8 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.canvasapi2.utils.RemoteConfigUtils
import com.instructure.dataseeding.api.ConversationsApi
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt
index 5cec37a8e2..3564023c5b 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/classic/TodoE2ETest.kt
@@ -17,17 +17,17 @@
package com.instructure.teacher.ui.e2e.classic
import android.util.Log
-import com.instructure.canvas.espresso.annotations.E2E
import com.instructure.canvas.espresso.FeatureCategory
import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
+import com.instructure.canvas.espresso.annotations.E2E
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.SubmissionType
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.dataseeding.util.iso8601
-import com.instructure.canvas.espresso.pressBackButton
import com.instructure.teacher.ui.utils.TeacherTest
import com.instructure.teacher.ui.utils.extensions.seedAssignmentSubmission
import com.instructure.teacher.ui.utils.extensions.seedAssignments
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt
index 61aede1098..0236863495 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/AssignmentE2ETest.kt
@@ -28,7 +28,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.FileUploadsApi
import com.instructure.dataseeding.api.SectionsApi
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt
index 9c6a40d819..dd5bf37673 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CalendarE2ETest.kt
@@ -23,7 +23,7 @@ import com.instructure.canvas.espresso.SecondaryFeatureCategory
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.dataseeding.util.days
import com.instructure.dataseeding.util.fromNow
import com.instructure.espresso.getDateInCanvasCalendarFormat
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt
index e66e78c29e..4476447de8 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/CustomStatusesE2ETest.kt
@@ -6,7 +6,7 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
+import com.instructure.canvas.espresso.utils.pressBackButton
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.CustomStatusApi
import com.instructure.dataseeding.api.DifferentiationTagsApi
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt
index 7bc32ffde6..ccee5a3cb4 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/InboxE2ETest.kt
@@ -31,8 +31,8 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.ConversationsApi
import com.instructure.dataseeding.api.GroupsApi
import com.instructure.dataseeding.model.CanvasUserApiModel
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt
index 522a5b84af..0272312f7a 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/e2e/compose/SpeedGraderE2ETest.kt
@@ -23,8 +23,8 @@ import com.instructure.canvas.espresso.Priority
import com.instructure.canvas.espresso.TestCategory
import com.instructure.canvas.espresso.TestMetaData
import com.instructure.canvas.espresso.annotations.E2E
-import com.instructure.canvas.espresso.pressBackButton
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.pressBackButton
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.dataseeding.api.LatePolicyApi
import com.instructure.dataseeding.api.SubmissionsApi
import com.instructure.dataseeding.model.LatePolicy
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt
index e8f754dbdd..7f826618e2 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/AssigneeListPage.kt
@@ -24,7 +24,7 @@ import androidx.test.espresso.contrib.RecyclerViewActions.scrollToHolder
import androidx.test.espresso.matcher.BoundedMatcher
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithContentDescription
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.OnViewWithText
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt
index f9e3b19bdd..6b3f2034a2 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseBrowserPage.kt
@@ -25,7 +25,7 @@ import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.contrib.RecyclerViewActions.scrollToPosition
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.TextViewColorAssertion
import com.instructure.espresso.WaitForViewWithId
@@ -167,12 +167,12 @@ class CourseBrowserPage : BasePage() {
private fun scrollOpen(textName: String, scrollPosition: Int) {
try {
- waitForViewWithText(textName).perform(withCustomConstraints(click(), isDisplayingAtLeast(50)))
+ waitForViewWithText(textName).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(50)))
} catch (e: Exception) {
when(e) {
is NoMatchingViewException, is PerformException -> {
scrollDownToCourseBrowser(scrollPosition)
- waitForViewWithText(textName).perform(withCustomConstraints(click(), isDisplayingAtLeast(50)))
+ waitForViewWithText(textName).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(50)))
}
else -> throw e
}
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt
index 2d1fef16b3..367625a472 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/CourseSettingsPage.kt
@@ -18,8 +18,8 @@ package com.instructure.teacher.ui.pages.classic
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
-import com.instructure.canvas.espresso.checked
-import com.instructure.canvas.espresso.matchToolbarText
+import com.instructure.canvas.espresso.utils.isRadioButtonChecked
+import com.instructure.canvas.espresso.utils.matchToolbarText
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisabled
import com.instructure.espresso.assertEnabled
@@ -87,7 +87,7 @@ class CourseSettingsPage : BasePage() {
fun selectNewHomePage(): String {
var newHomePageString = ""
val unselectedRadioButton =
- onView(checked(false) { newHomePageString = it })
+ onView(isRadioButtonChecked(false) { newHomePageString = it })
val dialogOkButton = onViewWithText(android.R.string.ok)
unselectedRadioButton.click()
dialogOkButton.click()
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt
index 686284c2b3..f2ccc6a553 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditAssignmentDetailsPage.kt
@@ -23,9 +23,9 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.PickerActions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import com.instructure.canvas.espresso.has
-import com.instructure.canvas.espresso.hasTextInputLayoutErrorText
-import com.instructure.canvas.espresso.withIndex
+import com.instructure.canvas.espresso.utils.has
+import com.instructure.canvas.espresso.utils.hasTextInputLayoutErrorText
+import com.instructure.canvas.espresso.utils.withIndex
import com.instructure.canvasapi2.utils.DateHelper
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.WaitForViewWithId
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt
index 126611630d..ea2dcaa2e2 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditPageDetailsPage.kt
@@ -7,7 +7,7 @@ import androidx.test.espresso.web.sugar.Web.onWebView
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.checkToastText
+import com.instructure.canvas.espresso.utils.checkToastText
import com.instructure.canvas.espresso.withElementRepeat
import com.instructure.dataseeding.model.PageApiModel
import com.instructure.espresso.ActivityHelper
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt
index 3ca19651cb..dd27e90a39 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditQuizDetailsPage.kt
@@ -25,9 +25,9 @@ import androidx.test.espresso.contrib.PickerActions
import androidx.test.espresso.matcher.ViewMatchers.Visibility
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import com.instructure.canvas.espresso.has
-import com.instructure.canvas.espresso.hasTextInputLayoutErrorText
-import com.instructure.canvas.espresso.withIndex
+import com.instructure.canvas.espresso.utils.has
+import com.instructure.canvas.espresso.utils.hasTextInputLayoutErrorText
+import com.instructure.canvas.espresso.utils.withIndex
import com.instructure.canvasapi2.utils.DateHelper
import com.instructure.espresso.ClickUntilMethod
import com.instructure.espresso.OnViewWithId
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt
index 67203f5c21..b7eff413fa 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/EditSyllabusPage.kt
@@ -18,7 +18,7 @@ package com.instructure.teacher.ui.pages.classic
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.OnViewWithText
import com.instructure.espresso.WaitForViewWithId
@@ -81,6 +81,6 @@ class EditSyllabusPage : BasePage(R.id.editSyllabusPage) {
*/
fun editSyllabusToggleShowSummary() {
editSyllabusShowCourseSummaryLabel.scrollTo()
- onView(withId(R.id.showSummarySwitch)).perform(withCustomConstraints(click(), isDisplayingAtLeast(50)))
+ onView(withId(R.id.showSummarySwitch)).perform(actionWithCustomConstraints(click(), isDisplayingAtLeast(50)))
}
}
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt
index 475e1925f0..5931b08bcf 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/FileListPage.kt
@@ -28,9 +28,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isDisplayingAtLeast
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.withCustomConstraints
+import com.instructure.canvas.espresso.utils.actionWithCustomConstraints
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.Searchable
import com.instructure.espresso.assertDisplayed
@@ -114,7 +114,7 @@ class FileListPage(val searchable: Searchable) : BasePage(R.id.fileListPage) {
*/
fun refresh() {
onView(allOf(withId(R.id.swipeRefreshLayout), isDisplayingAtLeast(50)))
- .perform(withCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
+ .perform(actionWithCustomConstraints(swipeDown(), isDisplayingAtLeast(10)))
}
/**
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt
index ac7606f125..c0f9552fbc 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/HelpPage.kt
@@ -24,7 +24,7 @@ import androidx.test.espresso.intent.matcher.IntentMatchers
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.instructure.canvas.espresso.StringConstants.HelpMenu
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithStringTextIgnoreCase
import com.instructure.espresso.OnViewWithText
import com.instructure.espresso.assertDisplayed
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt
index 6c0d83251a..6857e2e9c7 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/LeftSideNavigationDrawerPage.kt
@@ -7,7 +7,7 @@ import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.dataseeding.model.CanvasUserApiModel
import com.instructure.espresso.OnViewWithContentDescription
import com.instructure.espresso.OnViewWithId
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt
index 77abf532fd..5814919e66 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/ModulesPage.kt
@@ -3,7 +3,7 @@ package com.instructure.teacher.ui.pages.classic
import androidx.annotation.StringRes
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withChild
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.RecyclerViewItemCountAssertion
import com.instructure.espresso.ViewAlphaAssertion
import com.instructure.espresso.assertDisplayed
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt
index e9578656ae..56029ca89e 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PageListPage.kt
@@ -19,7 +19,7 @@ import android.view.View
import androidx.test.espresso.Espresso
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.models.Page
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.RecyclerViewItemCountAssertion
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt
index dc4ced74c7..3a87bcd5b9 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/PersonContextPage.kt
@@ -18,7 +18,7 @@
package com.instructure.teacher.ui.pages.classic
import androidx.test.espresso.assertion.ViewAssertions.matches
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.dataseeding.model.CourseApiModel
import com.instructure.espresso.WaitForViewWithId
import com.instructure.espresso.assertContainsText
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt
index c94595441f..cf9d3f03ac 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/RemoteConfigSettingsPage.kt
@@ -21,9 +21,9 @@ import android.widget.EditText
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.clearFocus
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.clearFocus
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
import com.instructure.canvasapi2.utils.RemoteConfigParam
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt
index 5351c68628..d57be70dda 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/classic/SyllabusPage.kt
@@ -23,11 +23,21 @@ import androidx.test.espresso.web.sugar.Web
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.checkToastText
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.espresso.*
-import com.instructure.espresso.page.*
+import com.instructure.canvas.espresso.utils.checkToastText
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.espresso.OnViewWithId
+import com.instructure.espresso.assertDisplayed
+import com.instructure.espresso.assertNotDisplayed
+import com.instructure.espresso.click
+import com.instructure.espresso.page.BasePage
+import com.instructure.espresso.page.onView
+import com.instructure.espresso.page.onViewWithId
+import com.instructure.espresso.page.plus
+import com.instructure.espresso.page.waitForView
+import com.instructure.espresso.page.withAncestor
+import com.instructure.espresso.page.withId
+import com.instructure.espresso.swipeDown
import com.instructure.teacher.R
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.comparesEqualTo
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt
index 1fec868ba4..cdbe72ed4e 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/pages/compose/SpeedGraderPage.kt
@@ -48,7 +48,7 @@ import androidx.test.espresso.web.sugar.Web.onWebView
import androidx.test.espresso.web.webdriver.DriverAtoms.findElement
import androidx.test.espresso.web.webdriver.DriverAtoms.getText
import androidx.test.espresso.web.webdriver.Locator
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.canvasapi2.models.Submission
import com.instructure.canvasapi2.models.User
import com.instructure.composetest.hasTestTagThatContains
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt
index d448abd6f3..4a3013849b 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/rendertests/renderpages/ModuleListRenderPage.kt
@@ -21,8 +21,8 @@ import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
-import com.instructure.canvas.espresso.SwipeRefreshLayoutMatchers
-import com.instructure.canvas.espresso.ViewSizeMatcher
+import com.instructure.canvas.espresso.utils.SwipeRefreshLayoutMatchers
+import com.instructure.canvas.espresso.utils.ViewSizeMatcher
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.RecyclerViewItemCountAssertion
import com.instructure.espresso.assertDisplayed
diff --git a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt
index 9f3dca688f..ce3896fcfa 100644
--- a/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt
+++ b/apps/teacher/src/androidTest/java/com/instructure/teacher/ui/utils/extensions/TeacherTestExtensions.kt
@@ -27,7 +27,7 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.platform.app.InstrumentationRegistry
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
import com.instructure.canvasapi2.models.User
import com.instructure.dataseeding.api.AssignmentsApi
import com.instructure.dataseeding.api.ConversationsApi
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt
index 806f1af8c7..99e7b61a25 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/interaction/InboxListInteractionTest.kt
@@ -27,7 +27,7 @@ import com.instructure.canvas.espresso.mockcanvas.addConversation
import com.instructure.canvas.espresso.mockcanvas.addConversations
import com.instructure.canvas.espresso.mockcanvas.addConversationsToCourseMap
import com.instructure.canvas.espresso.mockcanvas.createBasicConversation
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.User
import org.junit.Test
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt
index dbd2f9b6b6..17c8ea7dd2 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentDetailsPage.kt
@@ -41,10 +41,10 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isEnabled
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import com.instructure.canvas.espresso.CanvasTest
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
-import com.instructure.canvas.espresso.stringContainsTextCaseInsensitive
-import com.instructure.canvas.espresso.waitForMatcherWithSleeps
-import com.instructure.canvas.espresso.withResourceIdContaining
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.stringContainsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.waitForMatcherWithSleeps
+import com.instructure.canvas.espresso.utils.withResourceIdContaining
import com.instructure.canvasapi2.models.Assignment
import com.instructure.dataseeding.model.AssignmentApiModel
import com.instructure.espresso.ModuleItemInteractions
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt
index 9867a17115..b55beb1507 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/AssignmentReminderPage.kt
@@ -43,7 +43,7 @@ import androidx.test.espresso.matcher.ViewMatchers.isRoot
import androidx.test.espresso.matcher.ViewMatchers.withClassName
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.withIndex
+import com.instructure.canvas.espresso.utils.withIndex
import com.instructure.espresso.click
import com.instructure.espresso.matchers.WaitForViewMatcher.waitForView
import com.instructure.espresso.scrollTo
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt
index 658940b56f..3c54dcf371 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/FileChooserPage.kt
@@ -22,7 +22,7 @@ import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withChild
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.WaitForViewWithId
import com.instructure.espresso.assertDisplayed
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt
index 7b991c195e..5a1e01466e 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/InboxPage.kt
@@ -26,9 +26,9 @@ import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
-import com.instructure.canvas.espresso.refresh
-import com.instructure.canvas.espresso.scrollRecyclerView
-import com.instructure.canvas.espresso.waitForMatcherWithRefreshes
+import com.instructure.canvas.espresso.utils.refresh
+import com.instructure.canvas.espresso.utils.scrollRecyclerView
+import com.instructure.canvas.espresso.utils.waitForMatcherWithRefreshes
import com.instructure.canvasapi2.models.Conversation
import com.instructure.canvasapi2.models.Course
import com.instructure.espresso.OnViewWithId
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt
index abf0a235ee..9fb5fbb27d 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LegalPage.kt
@@ -19,12 +19,12 @@ package com.instructure.canvas.espresso.common.pages
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withParent
-import com.instructure.canvas.espresso.containsTextCaseInsensitive
+import com.instructure.canvas.espresso.utils.containsTextCaseInsensitive
import com.instructure.espresso.OnViewWithId
-import com.instructure.pandautils.R
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
import com.instructure.espresso.page.BasePage
+import com.instructure.pandautils.R
import org.hamcrest.Matchers.allOf
/**
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt
index fe63eb0241..37a9057f2d 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/LoginFindSchoolPage.kt
@@ -16,7 +16,7 @@
*/
package com.instructure.canvas.espresso.common.pages
-import com.instructure.canvas.espresso.getHintText
+import com.instructure.canvas.espresso.utils.getHintText
import com.instructure.espresso.OnViewWithId
import com.instructure.espresso.assertDisplayed
import com.instructure.espresso.click
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt
index 6669521d8f..dc667a1233 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/AssignmentListPage.kt
@@ -41,7 +41,7 @@ import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.matcher.ViewMatchers.hasSibling
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
-import com.instructure.canvas.espresso.refresh
+import com.instructure.canvas.espresso.utils.refresh
import com.instructure.canvasapi2.models.Assignment
import com.instructure.dataseeding.model.AssignmentApiModel
import com.instructure.dataseeding.model.QuizApiModel
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt
index 3883e73d2d..f8f3d22416 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/common/pages/compose/InboxDetailsPage.kt
@@ -35,7 +35,7 @@ import androidx.compose.ui.test.onParent
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performScrollTo
import androidx.test.espresso.Espresso.onView
-import com.instructure.canvas.espresso.withResourceIdContaining
+import com.instructure.canvas.espresso.utils.withResourceIdContaining
import com.instructure.canvasapi2.models.Conversation
import com.instructure.espresso.assertDisplayed
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomActions.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomActions.kt
similarity index 58%
rename from automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomActions.kt
rename to automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomActions.kt
index d7800b70ed..0d52718251 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomActions.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomActions.kt
@@ -14,59 +14,42 @@
* along with this program. If not, see .
*
*/
-package com.instructure.canvas.espresso
+package com.instructure.canvas.espresso.utils
-import android.app.Activity
import android.os.SystemClock
-import android.os.SystemClock.sleep
import android.view.InputDevice
import android.view.MotionEvent
import android.view.View
import android.widget.EditText
-import androidx.annotation.StringRes
import androidx.recyclerview.widget.RecyclerView
-import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import androidx.test.espresso.Espresso
import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.NoMatchingViewException
import androidx.test.espresso.PerformException
import androidx.test.espresso.UiController
import androidx.test.espresso.ViewAction
-import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.action.CoordinatesProvider
import androidx.test.espresso.action.GeneralClickAction
import androidx.test.espresso.action.Press
import androidx.test.espresso.action.Tap
import androidx.test.espresso.action.ViewActions
-import androidx.test.espresso.assertion.ViewAssertions
-import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions
-import androidx.test.espresso.matcher.RootMatchers.withDecorView
import androidx.test.espresso.matcher.ViewMatchers
-import androidx.test.espresso.matcher.ViewMatchers.Visibility
-import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
-import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
-import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.espresso.util.HumanReadables
import androidx.viewpager.widget.ViewPager
import com.instructure.espresso.assertDisplayed
-import com.instructure.espresso.retryWithIncreasingDelay
import com.instructure.espresso.swipeUp
import instructure.rceditor.RCETextEditor
import org.hamcrest.Matcher
import org.hamcrest.Matchers
-import org.hamcrest.Matchers.allOf
-import org.hamcrest.Matchers.`is`
-import org.hamcrest.Matchers.not
-
-//
-// This is a repo for generally useful Espresso actions
-//
-
-// Copied from https://stackoverflow.com/questions/33505953/espresso-how-to-test-swiperefreshlayout
-// Allows you to perform an action with custom constraints. This is especially useful for
-// being able to perform a swipe on a view that is not quite 90% displayed.
-fun withCustomConstraints(action: ViewAction, constraints: Matcher): ViewAction {
+
+// This file is for generally useful Espresso and/or Compose UI actions
+
+/**
+ * Allows you to perform an action with custom constraints. This is especially useful for
+ * being able to perform a swipe on a view that is not quite 90% displayed.
+ * Source: https://stackoverflow.com/questions/33505953/espresso-how-to-test-swiperefreshlayout
+ */
+fun actionWithCustomConstraints(action: ViewAction, constraints: Matcher): ViewAction {
return object : ViewAction {
override fun getConstraints(): Matcher {
return constraints
@@ -96,7 +79,6 @@ fun scrollRecyclerView(recyclerViewId: Int, target: String) {
fun scrollRecyclerView(recyclerViewId: Int, target: Matcher) {
val recyclerViewMatcher = Matchers.allOf(ViewMatchers.withId(recyclerViewId), ViewMatchers.isDisplayed())
- // Grab the SwipeRefreshLayout, if one is available
val swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
// If a SwipeRefreshLayout is available, then allow a couple of swipe-refreshes if the list/recycler
@@ -112,7 +94,7 @@ fun scrollRecyclerView(recyclerViewId: Int, target: Matcher) {
catch(t: Throwable) {
refreshesLeft -= 1
onView(swipeRefreshLayoutMatcher)
- .perform(withCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
SystemClock.sleep(1000) // Allow some time to react to the update.
}
}
@@ -132,56 +114,6 @@ fun scrollRecyclerView(recyclerViewId: Int, target: Matcher) {
}
-/**
- * Returns a matcher for the SwipeRefreshLayout if one is available, otherwise null.
- */
-private fun getSwipeRefreshLayoutMatcher(): Matcher? {
- val swipeRefreshLayoutMatcher = allOf(ViewMatchers.isAssignableFrom(SwipeRefreshLayout::class.java), isDisplayed())
- try {
- onView(swipeRefreshLayoutMatcher).check(matches(isDisplayed()));
- return swipeRefreshLayoutMatcher
- }
- catch(e: Exception) {
- return null
- }
-}
-
-
-// Custom action to directly populate an EditText, bypassing the normal espresso actions
-// of clicking on the EditText, typing into it, and then dismissing the soft keyboard.
-class DirectlyPopulateEditText(val text: String) : ViewAction {
- override fun getDescription(): String {
- return "Populate EditText with $text"
- }
-
- override fun getConstraints(): Matcher {
- return ViewMatchers.isAssignableFrom(EditText::class.java)
- }
-
- override fun perform(uiController: UiController?, view: View?) {
- when(view) {
- is EditText -> {
- view.text.clear()
- view.text.append(text)
- }
- }
- }
-
-}
-
-/**
- * Convenience method to see whether (and by how much) a view is displayed on the screen.
- */
-private fun isDisplayedAtLeast(target: Matcher, displayPercentage: Int) : Boolean {
- try {
- onView(target).check(matches(ViewMatchers.isDisplayingAtLeast(displayPercentage)))
- return true
- }
- catch(t: Throwable) {
- return false
- }
-}
-
/**
* Send an explicit performClick() to a view, instead of using Espresso's click(), which
* can sometimes be interpreted as a long-click.
@@ -249,31 +181,6 @@ fun clickCoordinates(percentX: Float, percentY: Float) : ViewAction {
)
}
-/**
- * Wait for a specified matcher to appear, trying a couple of pull-to-refreshes before giving up.
- * This is one way to combat the "late delayed job" problem.
- */
-fun waitForMatcherWithRefreshes(target: Matcher) {
- val swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
-
- if(swipeRefreshLayoutMatcher != null) {
- var refreshesLeft = 2;
- while(refreshesLeft > 0) {
- try {
- onView(target).assertDisplayed()
- return
- }
- catch(t: Throwable) {
- refreshesLeft -= 1
- onView(swipeRefreshLayoutMatcher)
- .perform(withCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
- SystemClock.sleep(1000) // Allow some time to react to the update.
-
- }
- }
- }
-}
-
/**
* Refresh the current screen via pull-to-refresh.
* Assumes that a SwipeRefreshLayout element is visible.
@@ -285,36 +192,51 @@ fun refresh() {
swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
}
onView(swipeRefreshLayoutMatcher)
- .perform(withCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
}
-/** A better version of the shared espresso lib's WaitForViewMatcher.waitForView()
- * for a couple of reasons:
- * (1) It allows the caller to specify the wait time
- * (2) It uses sleeps to avoid monopolizing the CPU and spamming our log files.
- *
- * Waits for [target] to become visible for up to [waitMs] milliseconds,
- * sleeping [sleepMs] milliseconds after every attempt.
+/**
+ * Helper method to press the Espresso back button for the given number of times.
*/
-fun waitForMatcherWithSleeps(target: Matcher, timeout: Long = 10000, pollInterval: Long = 100) : ViewInteraction {
- val endTime = System.currentTimeMillis() + timeout
- do {
- try {
- return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
- } catch (ignored: Exception) {
- println("There is an exception occurred. Stacktrace: " + ignored.stackTrace)
- } catch (ignored: Error) {
- println("There is an error occurred. Stacktrace: " + ignored.stackTrace)
- }
+fun pressBackButton(times: Int) {
+ for(i in 1..times) {
+ Espresso.pressBack()
+ }
+}
- sleep(pollInterval) // re-check every 100 ms
- } while(System.currentTimeMillis() < endTime)
+/**
+ * Helper method to create a View's String representation.
+ */
+fun toString(view: View): String {
+ return HumanReadables.getViewHierarchyErrorMessage(view, null, "", null)
+}
- // If we aren't successful by now, make one more unprotected attempt to throw
- // the correct error.
- return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
+/**
+ * Custom action to directly populate an EditText, bypassing the normal espresso actions
+ * of clicking on the EditText, typing into it, and then dismissing the soft keyboard.
+ */
+class DirectlyPopulateEditText(val text: String) : ViewAction {
+ override fun getDescription(): String {
+ return "Populate EditText with $text"
+ }
+
+ override fun getConstraints(): Matcher {
+ return ViewMatchers.isAssignableFrom(EditText::class.java)
+ }
+
+ override fun perform(uiController: UiController?, view: View?) {
+ when(view) {
+ is EditText -> {
+ view.text.clear()
+ view.text.append(text)
+ }
+ }
+ }
}
+/**
+ * Custom action to set the current item of a ViewPager.
+ */
class SetViewPagerCurrentItemAction(private val pageNumber: Int) : ViewAction {
override fun getDescription() = "set ViewPager current item to $pageNumber"
@@ -340,56 +262,11 @@ class SetViewPagerCurrentItemAction(private val pageNumber: Int) : ViewAction {
uiController.loopMainThreadUntilIdle()
}
-
-}
-
-fun checkToastText(text: String, activity: Activity) {
- onView(withText(text)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
-}
-
-fun checkToastText(@StringRes stringRes: Int, activity: Activity) {
- retryWithIncreasingDelay(times = 3, initialDelay = 500, maxDelay = 5000) {
- try {
- onView(withText(stringRes)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
- } catch (e: NoMatchingViewException) {
- // Toast did not appear yet, so try to check it again.
- }
- }
-
- retryWithIncreasingDelay(times = 5, initialDelay = 500, maxDelay = 15500) {
- try {
- onView(withText(stringRes)).check(matches(withEffectiveVisibility(Visibility.GONE)))
- } catch (e: NoMatchingViewException) {
- //Intentionally empty as we would like to wait for the toast to disappear. Somehow doesNotExist() doesn't work because it passes even if the toast is still there and visible.
- }
- }
-}
-
-fun pressBackButton(times: Int) {
- for(i in 1..times) {
- Espresso.pressBack()
- }
-}
-
-fun waitForViewToDisappear(viewMatcher: Matcher, timeoutInSeconds: Long) {
- val startTime = System.currentTimeMillis()
-
- while (System.currentTimeMillis() - startTime < (timeoutInSeconds * 1000)) {
- try {
- onView(viewMatcher)
- .check(ViewAssertions.doesNotExist())
- return
- } catch (e: AssertionError) {
- Thread.sleep(200)
- }
- }
- throw AssertionError("The view has not been displayed within $timeoutInSeconds seconds.")
-}
-
-fun toString(view: View): String {
- return HumanReadables.getViewHierarchyErrorMessage(view, null, "", null)
}
+/**
+ * Custom action to set (aka. "write") the html inner text of the current item.
+ */
class TypeInRCETextEditor(val text: String) : ViewAction {
override fun getDescription(): String {
return "Enters text into an RCETextEditor"
@@ -404,5 +281,4 @@ class TypeInRCETextEditor(val text: String) : ViewAction {
is RCETextEditor -> view.applyHtml(text)
}
}
-
}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomAssertions.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomAssertions.kt
new file mode 100644
index 0000000000..ba41881e10
--- /dev/null
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomAssertions.kt
@@ -0,0 +1,264 @@
+/*
+ * Copyright (C) 2026 - present Instructure, Inc.
+ *
+ * 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 com.instructure.canvas.espresso.utils
+
+import android.app.Activity
+import android.os.SystemClock.sleep
+import android.view.View
+import android.widget.TextView
+import androidx.annotation.StringRes
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.NoMatchingViewException
+import androidx.test.espresso.ViewInteraction
+import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.assertion.ViewAssertions
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.BoundedMatcher
+import androidx.test.espresso.matcher.RootMatchers.withDecorView
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.espresso.matcher.ViewMatchers.Visibility
+import androidx.test.espresso.matcher.ViewMatchers.assertThat
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import com.instructure.espresso.assertDisplayed
+import com.instructure.espresso.retryWithIncreasingDelay
+import org.hamcrest.CoreMatchers
+import org.hamcrest.Description
+import org.hamcrest.Matcher
+import org.hamcrest.Matchers.`is`
+import org.hamcrest.Matchers.not
+import org.hamcrest.TypeSafeMatcher
+
+// This file is for generally useful Espresso and/or Compose UI assertions.
+
+/**
+ * Check the toast text if it's displayed.
+ * @param text The string of the toast text.
+ * @param activity The activity to get the decor view from.
+ */
+fun checkToastText(text: String, activity: Activity) {
+ onView(withText(text)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
+}
+
+/**
+ * Check the toast text if it's displayed.
+ * @param stringRes The string resource ID of the toast text.
+ * @param activity The activity to get the decor view from.
+ */
+fun checkToastText(@StringRes stringRes: Int, activity: Activity) {
+ retryWithIncreasingDelay(times = 3, initialDelay = 500, maxDelay = 5000) {
+ try {
+ onView(withText(stringRes)).inRoot(withDecorView(not(`is`(activity.window.decorView)))).check(matches(isDisplayed()))
+ } catch (e: NoMatchingViewException) {
+ // Intentionally empty: Toast did not appear yet, so try to check it again.
+ }
+ }
+
+ retryWithIncreasingDelay(times = 5, initialDelay = 500, maxDelay = 15500) {
+ try {
+ onView(withText(stringRes)).check(matches(withEffectiveVisibility(Visibility.GONE)))
+ } catch (e: NoMatchingViewException) {
+ //Intentionally empty as we would like to wait for the toast to disappear. Somehow doesNotExist() doesn't work because it passes even if the toast is still there and visible.
+ }
+ }
+}
+
+/**
+ * Asserts that the SwipeRefreshLayout is refreshing or not.
+ */
+fun ViewInteraction.assertIsRefreshing(isRefreshing: Boolean) {
+ val matcher = object : BoundedMatcher(SwipeRefreshLayout::class.java) {
+
+ override fun describeTo(description: Description) {
+ description.appendText(if (isRefreshing) "is refreshing" else "is not refreshing")
+ }
+
+ override fun matchesSafely(view: SwipeRefreshLayout): Boolean {
+ return view.isRefreshing == isRefreshing
+ }
+ }
+ check(matches(matcher))
+}
+
+/**
+ * Asserts that the TextView uses the specified font size in scaled pixels.
+ * @param expectedSP The expected font size in scaled pixels.
+ */
+fun ViewInteraction.assertFontSizeSP(expectedSP: Float) {
+ val matcher = object : TypeSafeMatcher(View::class.java) {
+
+ override fun matchesSafely(target: View): Boolean {
+ if (target !is TextView) return false
+ val actualSP = target.textSize / target.getResources().displayMetrics.scaledDensity
+ return actualSP.compareTo(expectedSP) == 0
+ }
+
+ override fun describeTo(description: Description) {
+ description.appendText("with fontSize: ${expectedSP}px")
+ }
+ }
+ check(matches(matcher))
+}
+
+/**
+ * Asserts that a view is completely above of another view.
+ * @param other The other view to compare against.
+ */
+fun ViewInteraction.assertCompletelyAbove(other: ViewInteraction) {
+ val view1 = getView()
+ val view2 = other.getView()
+ val location1 = view1.locationOnScreen
+ val location2 = view2.locationOnScreen
+ val isAbove = location1[1] + view1.height <= location2[1]
+ assertThat("completely above", isAbove, CoreMatchers.`is`(true))
+}
+
+/**
+ * Asserts that a view is completely below of another view.
+ * @param other The other view to compare against.
+ */
+fun ViewInteraction.assertCompletelyBelow(other: ViewInteraction) {
+ val view1 = getView()
+ val view2 = other.getView()
+ val location1 = view1.locationOnScreen
+ val location2 = view2.locationOnScreen
+ val isAbove = location2[1] + view2.height <= location1[1]
+ assertThat("completely below", isAbove, CoreMatchers.`is`(true))
+}
+
+/**
+ * Get the location of the view on the screen.
+ */
+val View.locationOnScreen get() = IntArray(2).apply { getLocationOnScreen(this) }
+
+/**
+ * Assert that a TextView has the specified number of lines.
+ * @param lineCount The number of the expected lines.
+ */
+fun ViewInteraction.assertLineCount(lineCount: Int) {
+ val matcher = object : TypeSafeMatcher() {
+ override fun matchesSafely(item: View): Boolean {
+ return (item as TextView).lineCount == lineCount
+ }
+
+ override fun describeTo(description: Description) {
+ description.appendText("isTextInLines")
+ }
+ }
+ check(matches(matcher))
+}
+
+/**
+ * Waits for a view to disappear.
+ * @param viewMatcher The matcher for the view to wait for.
+ * @param timeoutInSeconds The timeout in seconds.
+ */
+fun waitForViewToDisappear(viewMatcher: Matcher, timeoutInSeconds: Long) {
+ val startTime = System.currentTimeMillis()
+
+ while (System.currentTimeMillis() - startTime < (timeoutInSeconds * 1000)) {
+ try {
+ onView(viewMatcher)
+ .check(ViewAssertions.doesNotExist())
+ return
+ } catch (e: AssertionError) {
+ Thread.sleep(200)
+ }
+ }
+ throw AssertionError("The view has not been displayed within $timeoutInSeconds seconds.")
+}
+
+/**
+ * Wait for a specified matcher to appear, trying a couple of pull-to-refreshes before giving up.
+ * This is one way to combat the "late delayed job" problem.
+ */
+fun waitForMatcherWithRefreshes(target: Matcher) {
+ val swipeRefreshLayoutMatcher = getSwipeRefreshLayoutMatcher()
+
+ if(swipeRefreshLayoutMatcher != null) {
+ var refreshesLeft = 2;
+ while(refreshesLeft > 0) {
+ try {
+ onView(target).assertDisplayed()
+ return
+ }
+ catch(t: Throwable) {
+ refreshesLeft -= 1
+ onView(swipeRefreshLayoutMatcher)
+ .perform(actionWithCustomConstraints(ViewActions.swipeDown(), ViewMatchers.isDisplayingAtLeast(5)))
+ sleep(1000) // Allow some time to react to the update.
+
+ }
+ }
+ }
+}
+
+/** A better version of the shared espresso lib's WaitForViewMatcher.waitForView()
+ * for a couple of reasons:
+ * (1) It allows the caller to specify the wait time
+ * (2) It uses sleeps to avoid monopolizing the CPU and spamming our log files.
+ *
+ * Waits for [target] to become visible for up to [waitMs] milliseconds,
+ * sleeping [sleepMs] milliseconds after every attempt.
+ */
+fun waitForMatcherWithSleeps(target: Matcher, timeout: Long = 10000, pollInterval: Long = 100) : ViewInteraction {
+ val endTime = System.currentTimeMillis() + timeout
+ do {
+ try {
+ return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
+ } catch (ignored: Exception) {
+ println("There is an exception occurred. Stacktrace: " + ignored.stackTrace)
+ } catch (ignored: Error) {
+ println("There is an error occurred. Stacktrace: " + ignored.stackTrace)
+ }
+
+ sleep(pollInterval) // re-check every 100 ms
+ } while(System.currentTimeMillis() < endTime)
+
+ // If we aren't successful by now, make one more unprotected attempt to throw
+ // the correct error.
+ return onView(target).check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
+}
+
+/**
+ * Convenience method to see whether (and by how much) a view is displayed on the screen.
+ */
+fun isDisplayedAtLeast(target: Matcher, displayPercentage: Int) : Boolean {
+ try {
+ onView(target).check(matches(ViewMatchers.isDisplayingAtLeast(displayPercentage)))
+ return true
+ }
+ catch(t: Throwable) {
+ return false
+ }
+}
+
+/**
+ * Returns true if the element with the given resource id is currently displayed, false otherwise.
+ */
+fun isElementDisplayed(resourceId: Int) : Boolean {
+ try {
+ onView(withId(resourceId)).check(matches(isDisplayed()))
+ return true
+ }
+ catch(t: Throwable) {
+ return false
+ }
+}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomMatchers.kt b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomMatchers.kt
similarity index 81%
rename from automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomMatchers.kt
rename to automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomMatchers.kt
index e3f610772e..ad587ecb7e 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/CustomMatchers.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/canvas/espresso/utils/CustomMatchers.kt
@@ -15,7 +15,7 @@
*
*/
-package com.instructure.canvas.espresso
+package com.instructure.canvas.espresso.utils
import android.content.Intent
import android.content.res.Resources
@@ -41,10 +41,8 @@ import androidx.test.espresso.ViewAssertion
import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.BoundedMatcher
-import androidx.test.espresso.matcher.ViewMatchers.assertThat
import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
-import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.util.HumanReadables
import androidx.test.espresso.util.TreeIterables
import com.google.android.apps.common.testing.accessibility.framework.AccessibilityViewCheckResult
@@ -54,14 +52,12 @@ import com.instructure.espresso.ActivityHelper
import com.instructure.pandautils.utils.ColorUtils
import junit.framework.AssertionFailedError
import org.hamcrest.BaseMatcher
-import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.Description
import org.hamcrest.Matcher
+import org.hamcrest.Matchers.allOf
import org.hamcrest.TypeSafeMatcher
-//
-// This is a repo for useful custom matchers
-//
+// This is file is for Espresso and/or Compose UI matchers.
/**
* Matches if the view is a TextView and its text contains [textToMatch], case insensitive
@@ -83,8 +79,10 @@ fun containsTextCaseInsensitive(textToMatch: String) : Matcher {
}
}
-// Similar to containsTextCaseInsensitive(), but operates on a String rather than a TextView.
-// Originally created to combat situations where a content description contains garbage characters.
+/**
+ * Similar to containsTextCaseInsensitive(), but operates on a String rather than a TextView.
+ * Originally created to combat situations where a content description contains garbage characters.
+ */
fun stringContainsTextCaseInsensitive(textToMatch: String) : Matcher {
return object: BaseMatcher() {
override fun matches(item: Any?): Boolean {
@@ -103,28 +101,12 @@ fun stringContainsTextCaseInsensitive(textToMatch: String) : Matcher {
}
/**
- * Returns true if the element with the given resource id is currently displayed, false otherwise.
+ * Returns if the radio button is checked or not.
+ * @param checked True if the radio button should be checked, false otherwise.
+ * @param index The index of the radio button to check.
+ * @param getText A function to get the text of the checked radio button.
*/
-fun isElementDisplayed(resourceId: Int) : Boolean {
- try {
- onView(withId(resourceId)).check(matches(isDisplayed()))
- return true
- }
- catch(t: Throwable) {
- return false
- }
-}
-
-inline fun typedViewCondition(crossinline onCheckCondition: (T) -> Boolean): Matcher {
- return object : BaseMatcher() {
- override fun matches(item: Any?): Boolean = (item as? T)?.let(onCheckCondition) ?: false
- override fun describeTo(description: Description?) {
- description?.appendText("matches view type '${T::class.java.simpleName}' and fulfills the given condition")
- }
- }
-}
-
-fun checked(checked: Boolean = true, index: Int = 0, getText: (String) -> Unit = {}): BoundedMatcher {
+fun isRadioButtonChecked(checked: Boolean = true, index: Int = 0, getText: (String) -> Unit = {}): BoundedMatcher {
return object : BoundedMatcher(RadioButton::class.java) {
var currentIndex = 0
override fun describeTo(description: Description) {
@@ -378,54 +360,9 @@ object SwipeRefreshLayoutMatchers {
}
}
-object ViewSizeMatcher {
- fun hasWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a width of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.width == pixels
- }
-
- fun hasHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a height of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.height == pixels
- }
-
- fun hasMinWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a minimum width of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.width >= pixels
- }
-
- fun hasMinHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
- override fun describeTo(description: Description) {
- description.appendText("has a minimum height of ${pixels}px")
- }
-
- override fun matchesSafely(view: View): Boolean = view.height >= pixels
- }
-}
-
-fun ViewInteraction.assertLineCount(lineCount: Int) {
- val matcher = object : TypeSafeMatcher() {
- override fun matchesSafely(item: View): Boolean {
- return (item as TextView).lineCount == lineCount
- }
-
- override fun describeTo(description: Description) {
- description.appendText("isTextInLines")
- }
- }
- check(matches(matcher))
-}
-
-
+/**
+ * Get the view reference from a ViewInteraction
+ */
fun ViewInteraction.getView(): View {
lateinit var matchingView: View
perform(object : ViewAction {
@@ -442,60 +379,11 @@ fun ViewInteraction.getView(): View {
return matchingView
}
-fun ViewInteraction.assertCompletelyAbove(other: ViewInteraction) {
- val view1 = getView()
- val view2 = other.getView()
- val location1 = view1.locationOnScreen
- val location2 = view2.locationOnScreen
- val isAbove = location1[1] + view1.height <= location2[1]
- assertThat("completely above", isAbove, `is`(true))
-}
-
-fun ViewInteraction.assertCompletelyBelow(other: ViewInteraction) {
- val view1 = getView()
- val view2 = other.getView()
- val location1 = view1.locationOnScreen
- val location2 = view2.locationOnScreen
- val isAbove = location2[1] + view2.height <= location1[1]
- assertThat("completely below", isAbove, `is`(true))
-}
-
-val View.locationOnScreen get() = IntArray(2).apply { getLocationOnScreen(this) }
-
-
/**
- * Asserts that the TextView uses the specified font size in scaled pixels
+ * Custom matcher for intent and their data
+ * @param intentType The type of the specific intent
+ * @param dataMatcher The data to match in the intent
*/
-fun ViewInteraction.assertFontSizeSP(expectedSP: Float) {
- val matcher = object : TypeSafeMatcher(View::class.java) {
-
- override fun matchesSafely(target: View): Boolean {
- if (target !is TextView) return false
- val actualSP = target.textSize / target.getResources().displayMetrics.scaledDensity
- return actualSP.compareTo(expectedSP) == 0
- }
-
- override fun describeTo(description: Description) {
- description.appendText("with fontSize: ${expectedSP}px")
- }
- }
- check(matches(matcher))
-}
-
-fun ViewInteraction.assertIsRefreshing(isRefreshing: Boolean) {
- val matcher = object : BoundedMatcher(SwipeRefreshLayout::class.java) {
-
- override fun describeTo(description: Description) {
- description.appendText(if (isRefreshing) "is refreshing" else "is not refreshing")
- }
-
- override fun matchesSafely(view: SwipeRefreshLayout): Boolean {
- return view.isRefreshing == isRefreshing
- }
- }
- check(matches(matcher))
-}
-
class IntentActionMatcher(private val intentType: String, private val dataMatcher: String) : TypeSafeMatcher() {
override fun describeTo(description: Description?) {
@@ -507,13 +395,13 @@ class IntentActionMatcher(private val intentType: String, private val dataMatche
}
}
-// Adapted from https://medium.com/@dbottillo/android-ui-test-espresso-matcher-for-imageview-1a28c832626f
/**
* Matches ImageView (or ImageButton) with the drawable associated with [resourceId]. If [resourceId] < 0, will
* match against "no drawable" / "drawable is null".
*
- * If the [color] param is non-null, then the drawable associated with [resourceId] will be colored
- * prior to matching.
+ * Source: https://medium.com/@dbottillo/android-ui-test-espresso-matcher-for-imageview-1a28c832626f
+ *
+ * If the [color] param is non-null, then the drawable associated with [resourceId] will be colored prior to matching.
*/
class ImageViewDrawableMatcher(val resourceId: Int, val color: Int? = null) : TypeSafeMatcher(
ImageView::class.java) {
@@ -552,7 +440,7 @@ class ImageViewDrawableMatcher(val resourceId: Int, val color: Int? = null) : Ty
/**
* Matches views whose resource ID contains the specified substring.
- * Useful for matching PSPDFKit or other third-party library views with dynamic resource IDs.
+ * Useful for matching PSPDFKit (aka. Nutrient) or other third-party library views with dynamic resource IDs.
*/
fun withResourceIdContaining(substring: String) = object : TypeSafeMatcher() {
override fun describeTo(description: Description) {
@@ -568,3 +456,54 @@ fun withResourceIdContaining(substring: String) = object : TypeSafeMatcher
return resourceId.contains(substring, ignoreCase = true)
}
}
+
+/**
+ * Returns a matcher for the SwipeRefreshLayout if one is available, otherwise null.
+ */
+fun getSwipeRefreshLayoutMatcher(): Matcher? {
+ val swipeRefreshLayoutMatcher = allOf(isAssignableFrom(SwipeRefreshLayout::class.java), isDisplayed())
+ try {
+ onView(swipeRefreshLayoutMatcher).check(matches(isDisplayed()));
+ return swipeRefreshLayoutMatcher
+ }
+ catch(e: Exception) {
+ return null
+ }
+}
+
+/**
+ * This object collects the different view size matchers.
+ */
+object ViewSizeMatcher {
+ fun hasWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a width of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.width == pixels
+ }
+
+ fun hasHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a height of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.height == pixels
+ }
+
+ fun hasMinWidth(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a minimum width of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.width >= pixels
+ }
+
+ fun hasMinHeight(pixels: Int): Matcher = object : TypeSafeMatcher(View::class.java) {
+ override fun describeTo(description: Description) {
+ description.appendText("has a minimum height of ${pixels}px")
+ }
+
+ override fun matchesSafely(view: View): Boolean = view.height >= pixels
+ }
+}
\ No newline at end of file
diff --git a/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt b/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt
index f6e0332e27..c830389292 100644
--- a/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt
+++ b/automation/espresso/src/main/kotlin/com/instructure/espresso/ViewInteractionExtensions.kt
@@ -22,13 +22,19 @@ import android.view.View
import androidx.test.espresso.ViewAction
import androidx.test.espresso.ViewAssertion
import androidx.test.espresso.ViewInteraction
-import androidx.test.espresso.action.*
+import androidx.test.espresso.action.CoordinatesProvider
+import androidx.test.espresso.action.EspressoKey
+import androidx.test.espresso.action.GeneralLocation
+import androidx.test.espresso.action.GeneralSwipeAction
+import androidx.test.espresso.action.Press
+import androidx.test.espresso.action.Swipe
+import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
-import com.instructure.canvas.espresso.SetViewPagerCurrentItemAction
+import com.instructure.canvas.espresso.utils.SetViewPagerCurrentItemAction
import org.hamcrest.Matcher
import org.hamcrest.Matchers
-import java.util.concurrent.*
+import java.util.concurrent.TimeUnit
fun ViewInteraction.assertVisible(): ViewInteraction