我需要匹配由红色矩形突出显示的视图。我应该为它写出哪种Espresso表达式?
这是一个表格布局,所有单元格都是TextView的实例。单元格视图没有唯一的ID。感兴趣的视图可能包含也可能没有文本。我所知道的是,这种观点总是位于" Food Group"细胞
欢迎任何线索。
答案 0 :(得分:6)
这是我在你的案例中写的测试。
public void testCellBelowFoodGroup() {
getActivity();
onView(
allOf(
isDescendantOfA(isAssignableFrom(TableLayout.class)),
isInRowBelow(withText("Food Group")),
hasChildPosition(0)
)
).check(matches(withText("TEXT TO BE FOUND")));
}
因此,我们正在寻找一个给定TableLayout内的视图,该视图位于" Food Group"文本,这是该行的最左边元素。然后,我们可以使用该视图执行任何操作,例如检查它的文字。
Espresso不提供 isInRowBelow
和hasChildPosition
,它们是自定义方法,与使用Espresso进行测试时一样:建议您创建自己的视图断言并查看匹配器。
这是实施。
static Matcher<View> isInRowBelow(final Matcher<View> viewInRowAbove) {
checkNotNull(viewInRowAbove);
return new TypeSafeMatcher<View>(){
@Override
public void describeTo(Description description) {
description.appendText("is below a: ");
viewInRowAbove.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
// Find the current row
ViewParent viewParent = view.getParent();
if (!(viewParent instanceof TableRow)) {
return false;
}
TableRow currentRow = (TableRow) viewParent;
// Find the row above
TableLayout table = (TableLayout) currentRow.getParent();
int currentRowIndex = table.indexOfChild(currentRow);
if (currentRowIndex < 1) {
return false;
}
TableRow rowAbove = (TableRow) table.getChildAt(currentRowIndex - 1);
// Does the row above contains at least one view that matches viewInRowAbove?
for(int i = 0 ; i < rowAbove.getChildCount() ; i++) {
if (viewInRowAbove.matches(rowAbove.getChildAt(i))) {
return true;
}
}
return false;
}};
}
static Matcher<View> hasChildPosition(final int i) {
return new TypeSafeMatcher<View>(){
@Override
public void describeTo(Description description) {
description.appendText("is child #" + i);
}
@Override
public boolean matchesSafely(View view) {
ViewParent viewParent = view.getParent();
if (!(viewParent instanceof ViewGroup)) {
return false;
}
ViewGroup viewGroup = (ViewGroup) viewParent;
return (viewGroup.indexOfChild(view) == i);
}};
}
完整的源代码可以从https://github.com/acontal/android-stackoverflow-espresso-match_table_cell
下载