我很困惑Espresso在处理失败时似乎有些不一致。
我尝试实现的是重新检查要显示的某个字符串。单击按钮将启动应在一段时间内完成的异步操作,并且我可以成功地在检查是否存在某个元素时设置try catch块:
try
{
onView(withId(fieldIdToBeAvailable))
.inRoot(isDialog())
.check(matches(isDisplayed()));
}
catch (NoMatchingViewException nmve)
{
// ok, retry this or fail
retry();
}
会抛出NoMatchingViewException
并以某种循环重新尝试。
但是,如果我尝试检查匹配的文本,例如
,Espresso不会抛出异常onView(withId(R.id.sync_status))
.check(matches(withText("Logged in")));
唯一发生的事情是
android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError:
有人会怎样写一个重试概念?当我把一个failureHandler放到位时我不能抛出它(因此我会捕获异常而不是AssertionFailed错误的评估),因为handle
不允许抛出:
onView(withId(R.id.sync_status)).withFailureHandler(new FailureHandler()
{
@Override
public void handle(Throwable error, Matcher<View> viewMatcher)
{
// Compiler error: Unhandled exception
throw new Exception("Failed, try again");
}
}).check(matches(withText("Logged in")));
答案 0 :(得分:1)
我建议使用空闲资源来处理异步操作https://developer.android.com/training/testing/espresso/idling-resource.html
无论如何,Exception
是一个已检查的异常,因此它应该用try-catch包装,或者方法应该使用throws
关键字定义该异常。
要“修复”编译器错误,您可以使用RuntimeException
或Error