在Android Espresso测试中关闭警报对话框

时间:2015-07-08 09:35:34

标签: android testing android-espresso

我已经四处寻找解决方案,但找不到一个。我正在创建Espresso测试,需要在第一次显示特定活动屏幕时关闭出现在屏幕中间的警报对话框。对话框上没有按钮,因此要关闭它,用户需要单击框外的任何位置。有谁知道我怎么能用Espresso做到这一点。我尝试点击底层屏幕上的布局,但Espresso无法说明在层次结构中找不到该视图。

5 个答案:

答案 0 :(得分:17)

使用onView(withText("alert_dialog_text")).perform(pressBack());这必须取消您的对话框。

答案 1 :(得分:2)

首先检查是否显示警告对话框,如果是,则执行pressBack click事件

onView(withText("OK")).inRoot(isDialog()).check(matches(isDisplayed())).perform(pressBack());

将OK文本替换为对话框

上显示的文本

答案 2 :(得分:1)

Espresso无法做到这一点。

您需要在Espresso测试中使用 uiautomator ,将其添加到您的项目中:

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'

出现对话框后,您可以在任意坐标处点击屏幕:

UiDevice device = UiDevice.getInstance(getInstrumentation());
        device.click(x,y);

这将关闭你的对话

答案 3 :(得分:1)

正如鲁本在先前的答案中已经提到的那样,使用 UIAutomator 似乎是一个要考虑的问题。使用 Espresso ,您只能在应用程序上下文中进行操作,而UIAutomator可让您控制测试设备。

  • 向项目的 build.gradle

    添加依赖项
    dependencies {
        androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.0.0'
    }
    
  • 下面的代码块检查屏幕上是否存在带有某些文本的对话框,然后按“后退”按钮将其关闭。

    UiDevice mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
    UiObject uiObject = mDevice.findObject(new UiSelector().text("TEXT TO CHECK"));
    if (uiObject.exists())
    {
        mDevice.pressBack();
    }
    

    注意 :此框架需要Android 4.3(API级别18)或更高版本。

答案 4 :(得分:0)

我尝试了结束,你只需要调用 pressBack()。我有同样的情况,这对我帮助很大。如果这对您没有帮助,我们可以说话,我会帮助您。 祝你好运!