确定按钮是否无法使用Espresso进行点击

问题描述 投票:1回答:1

onView(withId(R.id.login_button)).check(matches(isClickable()));

对于验证按钮是否可点击非常有用。我如何验证按钮是否无法点击?

编辑:就像我说的,它只告诉我它是否是isClickable。我正在寻找一种方法来验证它是不可点击的。

android android-espresso
1个回答
5
投票

Edit - Solution!

解决方案是使用not()函数返回一个匹配器,该匹配器具有与传递给它的匹配器相反的逻辑。

它就像:not( isClickable() )一样简单

onView(withId(R.id.login_button)).check(matches( not(isClickable()) ));


Explanation -

我试图使用匹配或检查函数来测试它们通过的匹配器的虚假性,这是不可能的。但是,可以使用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

© www.soinside.com 2019 - 2024. All rights reserved.