Espresso 测试框架 - 查看断言


如前所述,视图断言用于断言实际视图(使用视图匹配器找到)和预期视图相同。示例代码如下,

onView(withId(R.id.my_view)) .check(matches(withText("Hello")))

这里,

  • onView()返回与匹配视图对应的ViewInteration对象。ViewInteraction用于与匹配的视图进行交互。

  • withId(R.id.my_view)返回一个视图匹配器,它将与id属性等于my_view 的视图(实际)匹配。

  • withText(“Hello”)还返回一个视图匹配器,它将与文本属性等于Hello 的视图(预期)进行匹配。

  • check是一种接受ViewAssertion类型的参数并使用传入的ViewAssertion对象进行断言的方法。

  • matches(withText(“Hello”))返回一个视图断言,它将真正断言实际视图(使用withId找到)和预期视图(使用withText找到)是相同的。

让我们学习 espresso 测试框架提供的一些断言视图对象的方法。

不存在()

返回一个视图断言,它确保视图匹配器找不到任何匹配的视图。

onView(withText("Hello")) .check(doesNotExist());

此处,测试用例确保不存在带有文本 Hello 的视图。

火柴()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并与目标视图匹配器匹配的视图匹配。

onView(withId(R.id.textView_hello)) .check(matches(withText("Hello World!")));

这里,测试用例确保具有 id R.id.textView_hello 的视图存在并与带有文本 Hello World! 的目标视图匹配。

isBottomAlignedWith()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且与目标视图匹配器底部对齐。

onView(withId(R.id.view)) .check(isBottomAlignedWith(withId(R.id.target_view)))

这里,测试用例确保具有 id R.id.view的视图存在并且与具有 id R.id.target_view的视图底部对齐。

isCompletelyAbove()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且完全位于目标视图匹配器之上。

onView(withId(R.id.view)) .check(isCompletelyAbove(withId(R.id.target_view)))

这里,测试用例确保具有 id、R.id.view 的视图存在并且完全位于具有 id、R.id.target_view 的视图之上

isCompletelyBelow()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且完全位于目标视图匹配器下方。

onView(withId(R.id.view)) .check(isCompletelyBelow(withId(R.id.target_view)))

这里,测试用例确保具有 id R.id.view的视图存在并且完全位于具有 id R.id.target_view的视图下方。

isCompletelyLeftOf()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且完全位于目标视图匹配器的左侧。

onView(withId(R.id.view)) .check(isCompletelyLeftOf(withId(R.id.target_view)))

这里,测试用例确保具有 id、R.id.view 的视图存在并且完全位于具有 id、R.id.target_view的视图的左侧

isCompletelyRightOf()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且完全位于目标视图匹配器的右侧。

onView(withId(R.id.view)) .check(isCompletelyRightOf(withId(R.id.target_view)))

这里,测试用例确保具有 id、R.id.view 的视图存在并且完全位于具有 id、R.id.target_view 的视图的右侧。

isLeftAlignedWith()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且与目标视图匹配器左对齐。

onView(withId(R.id.view)) .check(isLeftAlignedWith(withId(R.id.target_view)))

这里,测试用例确保具有 id、R.id.view 的视图存在,并且与具有 id、 R.id.target_view 的视图左对齐

isPartiallyAbove()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且部分位于目标视图匹配器之上。

onView(withId(R.id.view)) .check(isPartiallyAbove(withId(R.id.target_view)))

这里,测试用例确保具有 id、R.id.view 的视图存在并且部分位于具有 id、 R.id.target_view 的视图上方

isPartiallyBelow()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且部分位于目标视图匹配器下方。

onView(withId(R.id.view)) .check(isPartiallyBelow(withId(R.id.target_view)))

这里,测试用例确保具有 id R.id.view的视图存在并且部分位于具有 id R.id.target_view的视图下方。

isPartiallyLeftOf()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且部分位于目标视图匹配器的左侧。

onView(withId(R.id.view)) .check(isPartiallyLeftOf(withId(R.id.target_view)))

这里,测试用例确保具有 id R.id.view 的视图存在并且部分位于具有 id R.id.target_view的视图的左侧。

isPartiallyRightOf()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且部分位于目标视图匹配器的右侧

onView(withId(R.id.view)) .check(isPartiallyRightOf(withId(R.id.target_view)))

这里,测试用例确保具有 id R.id.view 的视图存在并且部分位于具有 id R.id.target_view的视图的右侧。

isRightAlignedWith()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且与目标视图匹配器右对齐。

onView(withId(R.id.view)) .check(isRightAlignedWith(withId(R.id.target_view)))

这里,测试用例确保具有 id R.id.view的视图存在并且与具有 id R.id.target_view的视图右对齐。

isTopAlignedWith()

接受目标视图匹配器并返回视图断言,这确保视图匹配器(实际)存在并且与目标视图匹配器顶部对齐。

onView(withId(R.id.view)) .check(isTopAlignedWith(withId(R.id.target_view)))

这里,测试用例确保具有 id、R.id.view 的视图存在并且与具有 id、 R.id.target_view 的视图顶部对齐

noEllipsizedText()

返回一个视图断言,它确保视图层次结构不包含省略或截断的文本视图。

onView(withId(R.id.view)) .check(noEllipsizedText());

没有多行按钮()

返回一个视图断言,它确保视图层次结构不包含多行按钮。

onView(withId(R.id.view)) .check(noMultilineButtons());

没有重叠()

返回一个视图断言,确保可分配给 TextView 或 ImageView 的后代对象不会相互重叠。它还有另一个选项,它接受目标视图匹配器并返回视图断言,这确保与目标视图匹配的后代视图不会重叠。