我正在尝试使用新的android-test-kit(Espresso)编写一些测试。但我找不到有关如何检查视图是否显示以及对其执行某些操作的任何信息(例如单击按钮,e.t.c。)。请注意,我需要检查视图是否存在。如果它确实对视图执行了操作,如果没有继续进行下一个视图。
任何帮助将不胜感激。我只需要一个链接,或基本的一些示例代码:
检查视图是否存在 如果是,请执行操作 如果没有,请进入下一个屏幕
答案 0 :(得分:2)
您可以使用经典选项“try / catch”:
try {
onView(withText("Text")).check(matches(isDisplayed()));
//perform some actions on this view
} catch (NoMatchingViewException notExist) {
//proceed to the next screen
}
答案 1 :(得分:2)
Object currentActivity;
@Nullable
private Activity getCurrentActivity() throws Throwable {
getInstrumentation().waitForIdleSync();
getInstrumentation().runOnMainSync(new Runnable() {
public void run() {
Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(RESUMED);
if (resumedActivities.iterator().hasNext()) {
currentActivity = resumedActivities.iterator().next();
}
}
});
return (Activity) currentActivity;
}
使用此功能,您可以获取当前显示的活动。之后通过做这样的事情,你可以制作一个安全的代码部分
HOMESCREEN:
{
for (; ; ) {
if (getCurrentActivity() != null) {
//check if it is the required screen
if (getCurrentActivity().getLocalClassName().toLowerCase().contains("homescreen")) {
//if it is the required screen, break the
//loop and continue execution
break HOMESCREEN;
} else {
//wait for 2 seconds and run the loop again
sleep(2000);
}
} else {
break HOMESCREEN;
}
}
}
sleep(2000)是一个自定义函数,只调用thread.sleep,如下所示:
private void sleep(long milliseconds) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
throw new RuntimeException("Cannot execute Thread.sleep()");
}
}
答案 2 :(得分:1)
您必须控制测试的行为。因此,您必须添加一些先决条件,或创建将控制行为的@Rule,例如通过添加参数,具体取决于您的视图将显示与否。