【发布时间】:2019-04-10 16:57:55
【问题描述】:
我已经四处寻找解决方案,但找不到。我正在创建 Espresso 测试,并且需要在第一次显示特定活动屏幕时关闭出现在屏幕中间的警报对话框。对话框上没有按钮,因此用户需要单击框外的任意位置才能将其关闭。有谁知道我如何用 Espresso 做到这一点。我尝试单击底层屏幕上的布局,但 Espresso 未能在层次结构中找到该视图。
【问题讨论】:
标签: android testing android-espresso
我已经四处寻找解决方案,但找不到。我正在创建 Espresso 测试,并且需要在第一次显示特定活动屏幕时关闭出现在屏幕中间的警报对话框。对话框上没有按钮,因此用户需要单击框外的任意位置才能将其关闭。有谁知道我如何用 Espresso 做到这一点。我尝试单击底层屏幕上的布局,但 Espresso 未能在层次结构中找到该视图。
【问题讨论】:
标签: android testing android-espresso
使用onView(withText("alert_dialog_text")).perform(pressBack()); 这必须关闭您的对话框。
【讨论】:
perform() 需要 ViewAction 和 Espresso.pressBack() 返回 void。您想添加更多详细信息吗?
首先检查是否显示警报对话框,如果是则执行 pressBack 点击事件
onView(withText("OK")).inRoot(isDialog()).check(matches(isDisplayed())).perform(pressBack());
用对话框中显示的文本替换确定文本
【讨论】:
Espresso 无法做到这一点。
您需要在 Espresso 测试中使用 uiautomator,将其添加到项目的 gradle 中:
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
你的对话框出现后,你可以点击屏幕任意坐标:
UiDevice device = UiDevice.getInstance(getInstrumentation());
device.click(x,y);
这将关闭您的对话框
【讨论】:
正如 Ruben 在之前的答案中已经提到的,这看起来是一个需要考虑使用 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)或更高版本。
【讨论】:
AndroidX,依赖看起来像这样androidTestImplementation "androidx.test.uiautomator:uiautomator:2.2.0"
我试过了,你只需要调用 pressBack() 。我有同样的情况,这对我帮助很大。如果这对您没有帮助,我们可以谈谈,我会帮助您。 祝你好运!
【讨论】: