检查Espresso是否显示对话框

Ser*_*ici 76 android android-espresso

我正在尝试用新的android-test-kit(Espresso)编写一些测试.但我找不到任何关于如何检查对话框是否显示并在其上执行某些操作的信息(如单击正负按钮等).请注意,对话框也可以由a显示WebView,而不是由应用程序自己显示.

任何帮助,将不胜感激.我只需要一个链接,或基本的一些示例代码:

  1. 检查是否出现对话框
  2. 执行单击对话框按钮
  3. 与对话框的内部视图交互(如果它是自定义视图)
  4. 预先在对话框外点击,并检查它是否显示(例如,如果setCancelable(false)在对话框构建器上调用,我们要检查它)

谢谢你的建议!

den*_*nys 111

  1. 要验证是否显示对话框,您只需检查是否显示带有对话框内文本的View:

    onView(withText("dialogText")).check(matches(isDisplayed()));
    
    Run Code Online (Sandbox Code Playgroud)

    或者,基于带有id的文本

    onView(withId(R.id.myDialogTextId)).check(matches(allOf(withText(myDialogText), isDisplayed()));
    
    Run Code Online (Sandbox Code Playgroud)
  2. 单击对话框按钮执行此操作(按钮1 - 确定,按钮2 - 取消):

    onView(withId(android.R.id.button1)).perform(click());
    
    Run Code Online (Sandbox Code Playgroud)

    UPDATE

  3. 我认为可以,因为Espresso 有多窗口支持.
  4. 不确定是否在自定义对话框视图外单击但是要检查它是否显示,您必须创建自定义匹配器并在其中进行检查.

  • 在ProgressDialog上,第1步对我不起作用.只是尝试验证对话框的标题和消息 (3认同)
  • @jvrodrigues每一个Espresso教程都使用静态导入.我建议你只是习惯它(虽然我理解沮丧).这有助于:https://google.github.io/android-testing-support-library/docs/ (2认同)

kir*_*wka 58

我目前使用它,它似乎工作正常.

onView(withText(R.string.my_title))
    .inRoot(isDialog()) // <---
    .check(matches(isDisplayed()));
Run Code Online (Sandbox Code Playgroud)


Lui*_*sto 25

如果您有这样的AlertDialog:

在此输入图像描述

您可以检查组件是否显示:

int titleId = mActivityTestRule.getActivity().getResources()
        .getIdentifier( "alertTitle", "id", "android" );

onView(withId(titleId))
        .inRoot(isDialog())
        .check(matches(withText(R.string.my_title)))
        .check(matches(isDisplayed()));

onView(withId(android.R.id.text1))
        .inRoot(isDialog())
        .check(matches(withText(R.string.my_message)))
        .check(matches(isDisplayed()));

onView(withId(android.R.id.button2))
        .inRoot(isDialog())
        .check(matches(withText(android.R.string.no)))
        .check(matches(isDisplayed()));

onView(withId(android.R.id.button3))
        .inRoot(isDialog())
        .check(matches(withText(android.R.string.yes)))
        .check(matches(isDisplayed()));
Run Code Online (Sandbox Code Playgroud)

并执行一个动作:

onView(withId(android.R.id.button3)).perform(click());
Run Code Online (Sandbox Code Playgroud)

  • 在我的案例中,文本的内容为"android.R.id.message",标题的隐藏ID为"android.R.id.alertTitle". (2认同)
  • 如果您使用来自 AppCompat 支持库的 AlertDialog(或 DialogFragment),请使用:`int alertDialogTitleId = android.support.v7.appcompat.R.id.alertTitle;` (2认同)

归档时间:

查看次数:

48414 次

最近记录:

8 年,1 月 前