为什么在 RecyclerView 上右滑时测试不会失败?
Why test not fail when swipeRight on RecyclerView?
这是我的 xml 和 RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/tradersRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="@{handler.tradersList.size > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tradersToolBar"
tools:listitem="@layout/trader_list_item" />
当在列表项上向左滑动t 时,我会显示子项(继续,停止)
像这样:
子项只有向左滑动才会显示。向右滑动时没有任何反应。
此处 Espresso 的测试检查 swipeLeft 是否有效
@Test
fun scroll_itemList_swipeLeft() {
// scroll
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
// swipe
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, swipeLeft()))
}
不错。测试通过。
现在我创建了一个向右滑动时必须失败的测试。因为向右滑动 没有任何反应
@Test
fun scroll_itemList_notSwipeRight() {
// scroll
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
// swipe
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, ViewActions.swipeRight()))
}
不过这个测试也成功通过了。为什么?
我需要创建测试来检查而不是向右滑动 没有任何反应
P.S。
向左滑动和向右滑动时的工作测试
@Test
fun itemList_swipeLeft_isDisplayedSwipeContainer() {
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, swipeLeft()))
onView(withRecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount, R.id.swipeContainer))
.check(matches(isDisplayed()))
}
@Test
fun itemList_swipeRight_notDisplayedSwipeContainer() {
onView(withId(R.id.tradersRecyclerView))
.perform(scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
onView(withId(R.id.tradersRecyclerView))
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, ViewActions.swipeRight()))
onView(withRecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount, R.id.swipeContainer))
.check(matches(not(isDisplayed())))
}
在你的睾丸(两个)上添加类似这样的东西:
onView(withId(R.id.*your_resume_button_id*)).check(mathes(isDisplayed()))
这将为 view
添加可见性检查,向左滑动时 只有 可见。
所以第一个测试将通过,第二个将失败,因为向右滑动时此视图将不可见。
希望对您有所帮助。
这是我的 xml 和 RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/tradersRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="@{handler.tradersList.size > 0 ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tradersToolBar"
tools:listitem="@layout/trader_list_item" />
当在列表项上向左滑动t 时,我会显示子项(继续,停止)
像这样:
子项只有向左滑动才会显示。向右滑动时没有任何反应。
此处 Espresso 的测试检查 swipeLeft 是否有效
@Test
fun scroll_itemList_swipeLeft() {
// scroll
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
// swipe
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, swipeLeft()))
}
不错。测试通过。
现在我创建了一个向右滑动时必须失败的测试。因为向右滑动 没有任何反应
@Test
fun scroll_itemList_notSwipeRight() {
// scroll
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
// swipe
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, ViewActions.swipeRight()))
}
不过这个测试也成功通过了。为什么? 我需要创建测试来检查而不是向右滑动 没有任何反应
P.S。 向左滑动和向右滑动时的工作测试
@Test
fun itemList_swipeLeft_isDisplayedSwipeContainer() {
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
onView(withId(R.id.tradersRecyclerView))
.perform(RecyclerViewActions.actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, swipeLeft()))
onView(withRecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount, R.id.swipeContainer))
.check(matches(isDisplayed()))
}
@Test
fun itemList_swipeRight_notDisplayedSwipeContainer() {
onView(withId(R.id.tradersRecyclerView))
.perform(scrollToPosition<RecyclerView.ViewHolder>(checkItemCount));
onView(withId(R.id.tradersRecyclerView))
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(checkItemCount, ViewActions.swipeRight()))
onView(withRecyclerView(R.id.tradersRecyclerView).atPositionOnView(checkItemCount, R.id.swipeContainer))
.check(matches(not(isDisplayed())))
}
在你的睾丸(两个)上添加类似这样的东西:
onView(withId(R.id.*your_resume_button_id*)).check(mathes(isDisplayed()))
这将为 view
添加可见性检查,向左滑动时 只有 可见。
所以第一个测试将通过,第二个将失败,因为向右滑动时此视图将不可见。
希望对您有所帮助。