gpt4 book ai didi

android - 尝试使用 Espresso 单击 RecyclerView 项目时没有虚拟方法 findViewHolderForPosition(I)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:24 29 4
gpt4 key购买 nike

我正在尝试做一个简单的 Espresso 测试,它将找到第一个项目RecyclerView 没有特定标签并点击它。为此,我将 espresso-contrib 添加到项目中,如下所示:

androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2') {
// Necessary to avoid version conflicts
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'design'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'appcompat-v7'
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'recyclerview-v7'
}

并在我的测试用例中写下了以下表达式:onView(withId(R.id.sresults_list_recycler)).perform(RecyclerViewActions.actionOnHolderItem(new FirstNotSoldOutMatcher(), click()).atPosition(1));

Matcher 完美运行,RecyclerView 滚动到目标项目。但后来我得到错误:

java.lang.NoSuchMethodError: No virtual method findViewHolderForPosition(I)Landroid/support/v7/widget/RecyclerView$ViewHolder; in class Landroid/support/v7/widget/RecyclerView; or its super classes (declaration of 'android.support.v7.widget.RecyclerView' appears in /data/app/com.example-1/base.apk)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:288)
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemViewAction.perform(RecyclerViewActions.java:232)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

这对我来说很奇怪。我在 Google 文档中读到 findViewHolderForPosition 方法现在已弃用,但它应该仍然存在。我还在应用程序中启用了 multidex,但根据文档,它是开箱即用的,所以应该也不是问题。

你知道这个测试可能有什么问题吗?

最佳答案

好的,在我的案例中,问题出在 ProGuard 中,它正在收缩未使用的方法。禁用它进行测试有帮助。

对于 future 的寻求者——如果您不想为调试构建禁用混淆器,将此行添加到混淆器配置中也应该有所帮助:

-keepclasseswithmembers public class android.support.v7.widget.RecyclerView { *; }

此外,请注意,此规则应添加到常规混淆文件(proguardFiles 中列出的那个)而不是测试文件(声明为 testProguardFile)

关于android - 尝试使用 Espresso 单击 RecyclerView 项目时没有虚拟方法 findViewHolderForPosition(I),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39775782/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com