繁体   English   中英

编写 Espresso 测试时未找到 R.id

[英]R.id not found when writing Espresso test

我尝试编写一个小测试来尝试 Espresso。

package com.mycompany.myapp.somemodule

import com.mycompany.myapp.R
import other.uselful.imports

@RunWith(AndroidJUnit4::class)
@LargeTest
class DemoTest {

    @get:Rule
    var startActivity: ActivityTestRule<StartActivity> = ActivityTestRule(StartActivity::class.java)


    @Test
    fun aDemoTest() {
        onView(withId(R.id.theElementId))
                .check(matches(isClickable()))
    }
}

Android Studio 没有显示任何错误。 如果我 ctrl+click R.id.theElementID ,它会在适当的布局文件中找到它。 但是,当我尝试运行时,出现编译错误:

未解析的参考:id

我该如何解决这个问题?

我碰到了这个问题。 花了 4 个小时进行调查,但没有在互联网上找到任何有用的东西。

所以,我希望下面的信息可以帮助某人。

简短的回答:

  1. 清理项目
  2. 从命令行/终端执行gradlew :app:build ,它可能会显示导致根本原因的构建错误

更长的答案:

我做了以下事情:

  1. 我从 Android Studio 中点击了“使缓存无效并重新启动”
  2. 我已经从命令行执行了gradlew :app:build

第二步打印了一条错误消息,指出 BuildConfig 被复制。 这个问题的原因是,我有 2 个模块(android-app 和 android-library),它们的包名称略有不同(我在创建第二个模块时打错了)。 这导致从命令行构建失败。 将第二个模块的包名修改为与第一个相同后,问题解决。

我没有收到“R.id not found”错误。 所以,我可以继续编写 UI 测试,这很有效:-)

快乐编码!

猜测实际问题是,该活动尚未开始。

R.id.theElementId可能是无效的资源描述符。

尝试R.id.the_element_id代替。

另外,添加@UiThreadTest注释...

简短回答:尝试删除任何不正确的import android.R语句。

长答案我也遇到过这个问题。

在我的情况下,测试类,我是进口android.R包,由于涉及一些不正确的资源ID前面( R.id.progress ),它属于android.R包。

我删除了该引用以及导入语句,即从测试类中import android.R并解决了问题。 然后 source 识别出我的布局文件的R.id.etPassword资源 ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM