Android 浓缩咖啡,找到对话,然后关闭它

Android 浓缩咖啡,找到对话,然后关闭它,android,android-espresso,android-dialogfragment,android-dialog,ui-testing,Android,Android Espresso,Android Dialogfragment,Android Dialog,Ui Testing,我试图在Espresso UI测试中找到一个对话框取消按钮并按下它,但我做不到 这是我的密码 onView(withId(R.id.dialog_close_button)).check(matches(isDisplayed())) 最好的解决方案是什么 请发表您的意见。如果您将UI自动机与AndroidX一起使用,您可以找到对话框和按钮 这是一个渐变依赖代码 dependencies { androidTestImplementation 'androidx.test.uiauto

我试图在Espresso UI测试中找到一个对话框取消按钮并按下它,但我做不到

这是我的密码

onView(withId(R.id.dialog_close_button)).check(matches(isDisplayed()))
最好的解决方案是什么


请发表您的意见。

如果您将UI自动机与AndroidX一起使用,您可以找到对话框和按钮

这是一个渐变依赖代码

dependencies {
    androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
}
您可以使用此代码到达按钮

这是科特林代码

val cancel = activityTestRule.activity.getString(R.string.dialog_cancel_button)
val button = UiDevice
    .getInstance(InstrumentationRegistry.getInstrumentation())
    .findObject(
        UiSelector()
            .text(cancel.toUpperCase())
            .text(cancel)
    )
if (button.exists() && button.isEnabled) {
    button.click()
}

如果它是一个Android对话框,并且您使用两个按钮,那么您可以通过以下方式找到视图:

onView.withId(android.R.id.button1).perform(ViewActions.click()) //Click on accept button
onView.withId(android.R.id.button2).perform(ViewActions.click()) //Click on cancel button
如果要测试它们是否可见,请使用:

assert onView.withId(android.R.id.button1).check(matches(ViewMatchers.isDisplayed()))
如果你不想要安卓系统,只需更换你的id就可以了,记住如果你有重复的id,它会抱怨

编辑 我建议您使用,这样您就可以找到屏幕上每个组件的ID,这样您就可以用旧答案替换它

因此,这些步骤是:

  • 打开应用程序并找到该对话框
  • 然后转到
    工具
    布局检查器
    >选择处理器
  • 单击要用浓缩咖啡单击的项目
  • 在您的
    onView.withId中替换它(这里是\u ID).
  • 您应该添加
    isDialog()
    ,以匹配作为对话框的根目录(即不是当前恢复的活动的窗口)

    如果你想像标题中所说的那样关闭对话框,也不要忘记点击该按钮

    使用此代码:

    onView(withId(R.id.dialog_close_button))
        .inRoot(isDialog())
        .check(matches(isDisplayed()))
        .perform(click());
    

    您可以发布对话框的xml吗?实现“androidx.biometric:biometric:1.0.0-beta02”请查看此博客,了解具体的对话框。该对话框是一种特殊情况,如biometric dialog,此代码无法到达对话框。您可以发布您的xml或对话框的图片吗?哦,我明白了,让我编辑我的答案,我从来没有这样做过,但我们可以看看我的编辑是否能帮助您解决这个问题!:)这方面有什么改进吗?我要改进我的答案吗@亨俊尧