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 测试框架提供的一些方法来断言视图对象。
doesNotExist()
返回一个视图断言,确保视图匹配器找不到任何匹配的视图。
onView(withText("Hello")) .check(doesNotExist());
此处,测试用例确保不存在带有文本 Hello 的视图。
matches()
接受目标视图匹配器并返回视图断言,该断言确保视图匹配器(实际)存在并与目标视图匹配器匹配的视图匹配。
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());
noMultilineButtons()
返回一个视图断言,确保视图层次结构不包含多行按钮。
onView(withId(R.id.view)) .check(noMultilineButtons());
noOverlaps()
返回一个视图断言,确保可分配给 TextView 或 ImageView 的后代对象不会相互重叠。它还有另一个选项,它接受目标视图匹配器并返回一个视图断言,确保与目标视图匹配的后代视图不会重叠。