我尝试编写一个小测试来尝试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键并单击R.id.theElementID
,它将在相应的布局文件中找到它。但是,当我尝试运行时,出现编译错误:
未解决的参考:id
我该如何解决?
答案 0 :(得分:4)
我碰到了这个问题。花了4个小时进行调查,但在互联网上找不到任何有用的东西。
所以,我希望以下信息可以对某人有所帮助。
简短答案:
gradlew :app:build
,它可能会显示导致根本原因的构建错误更长的答案:
我做了以下事情:
gradlew :app:build
第二步显示一条错误消息,提示BuildConfig已复制。 出现此问题的原因是,我有2个模块(android-app和android-library),它们的包名称略有不同(创建第二个模块时出现了拼写错误)。这导致从命令行构建失败。在将第二个模块的软件包名称修改为与第一个相同的软件包名称之后,问题得以解决。
我没有收到“找不到R.id”错误。因此,我可以继续编写有效的UI测试:-)
祝您编程愉快!
答案 1 :(得分:1)
猜测实际问题是该活动尚未开始。
R.id.theElementId
可能是无效的资源描述符。
改为尝试R.id.the_element_id
。
还要添加@UiThreadTest
注释...
答案 2 :(得分:0)
简短的答案::尝试删除所有不正确的import android.R
语句。
答案 我也遇到了这个问题。
在我的情况下,在测试类中,由于先前引用了属于android.R
软件包的一些错误资源ID(R.id.progress
),因此我正在导入android.R
软件包。
我也从测试类中删除了该引用和导入语句,即import android.R
,并解决了问题。然后,源识别出我的布局文件的R.id.etPassword
资源ID。