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