![](/img/trans.png)
[英]Android Nullpointerexception thrown when R.id value not found
[英]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 个小时进行调查,但没有在互联网上找到任何有用的东西。
所以,我希望下面的信息可以帮助某人。
简短的回答:
gradlew :app:build
,它可能会显示导致根本原因的构建错误更长的答案:
我做了以下事情:
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.