否则
onView(withId(R.id.login_button)).check(matches(isClickable()));
用于验证按钮是否可点击。如何验证按钮是否可点击?
编辑:就像我说的,它只告诉我它是否isClickable
。我正在寻找一种方法来验证它不可点击。
答案 0 :(得分:3)
编辑 - 解决方案!
解决方法是使用not()函数返回一个匹配器,该匹配器具有与传递给它的匹配器相反的逻辑。
这很简单:not( isClickable() )
onView(withId(R.id.login_button)).check(matches( not(isClickable()) ));
我试图使用匹配或检查函数来测试它们通过的匹配器的虚假性,这是不可能的。但是,可以使用 not()函数创建一个与另一个匹配器具有相反逻辑的匹配器。
阅读documentation on ViewAssertions(如匹配)后,您会发现大多数ViewAssertions都不接受参数(并且没有接受我们在这种情况下关心的参数),并且必须{{ 1}}。这意味着我们无法改变ViewAssertion的工作方式,我们必须找到另一种方式。
分解代码 -
"Throw junit.framework.AssertionError when the view assertion does not hold."
函数返回我们想要使用的UI对象(id为onView
的按钮),我们在该视图对象上调用login_button
来应用断言,或 检查 某些断言是真的。
check
函数返回我们通过传入matches
构建的断言。 Matcher
函数向我们返回一个Matcher,我们可以用它来回馈isClickable()
。
matches()
是一个Matcher,它接受另一个Matcher,并返回一个Matcher,它具有相反的Matcher传递给它的逻辑/返回值。 (那是满口的!)
这归结为说我们对not()
应用断言。我们申请的断言是login_button
。
当ViewAssertion(matches( not( isClickable() ) )
)被应用(matches(not(isClickable()))
)到视图对象(onView(...).check(...)
)时,操作将被记录到logcat,如果断言被评估为false,那么<{1}}也将被抛出。