android - hdpi 设备上 RecyclerView espresso 测试中的 NullPointerException
问题描述
我为 RecyclerView 编写了以下测试
@Test
fun testHomeActivity_recyclerViewIndex0_configurationChange_displaysWelcomeMessageCorrectly() {
launch(HomeActivity::class.java).use {
onView(isRoot()).perform(orientationLandscape())
onView(
atPositionOnView(R.id.home_recycler_view, 0, R.id.welcome_text_view )
).check(matches(withText(containsString("Welcome"))))
}
}
它在我的真实设备上成功通过,但在Nexus S
hdpi 模拟器设备上失败。出现以下错误:
kotlin.KotlinNullPointerException
at org.oppia.app.recyclerview.RecyclerViewMatcher$Companion$atPositionOnView$1.matchesSafely(RecyclerViewMatcher.kt:52)
at org.oppia.app.recyclerview.RecyclerViewMatcher$Companion$atPositionOnView$1.matchesSafely(RecyclerViewMatcher.kt:28)
at org.hamcrest.TypeSafeMatcher.matches(TypeSafeMatcher.java:65)
at androidx.test.espresso.base.ViewFinderImpl$MatcherPredicateAdapter.apply(ViewFinderImpl.java:130)
at androidx.test.espresso.core.internal.deps.guava.collect.Iterators$5.computeNext(Iterators.java:637)
at androidx.test.espresso.core.internal.deps.guava.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:141)
at androidx.test.espresso.core.internal.deps.guava.collect.AbstractIterator.hasNext(AbstractIterator.java:136)
at androidx.test.espresso.base.ViewFinderImpl.getView(ViewFinderImpl.java:69)
at androidx.test.espresso.ViewInteraction$2.call(ViewInteraction.java:280)
at androidx.test.espresso.ViewInteraction$2.call(ViewInteraction.java:272)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
我认为这并不真正涉及这个问题,但这里是 home_recycler_view.xml :
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="org.oppia.app.R" />
<variable
name="presenter"
type="org.oppia.app.home.HomeFragmentPresenter" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:gravity="center"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/home_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:overScrollMode="never"
android:paddingTop="36dp"
android:paddingBottom="@dimen/bottom_white_space"
android:scrollbars="none" />
</LinearLayout>
</layout>
解决方案
好的,我解决了这个问题。基本上,在方向改变时,recyclerview 会向上滚动一点,所以我试图找到的视图被隐藏了。我添加了这一行以滚动到该位置,然后检查文本。
onView(withId(R.id.home_recycler_view)).perform(scrollToPosition<RecyclerView.ViewHolder>(0))
推荐阅读
- php - 如何使用特定标签订阅用户?
- firebase - 有没有人正确实施 action.devices.types.VALVE
- javascript - 使用 XMLHttpRequest 将数据从 javascript 发送到 php
- shopify - 获取 Shopify 产品更新的任何区分密钥并创建订单
- python - Python 中的 JSON 同步字典:处理临时引用
- python - 当我单击 pyvis.network // networkx 中的节点时,如何设置其他边缘不可见?
- python - 如何从自定义帮助命令中隐藏 Cogs/Commands
- python-3.x - PIL 的 Django 媒体图像完整路径
- android - 将图像从 firebase 检索到 StaggeredGridLayout Android
- qt - bitbake st-image-weston -c populate_sdk 失败并出现多个错误