bus*_*lee 7 android android-espresso
是否有能力espresso检查所有视图listview,而不是从中获取一个视图,但是检查所有视图.
它似乎onData()用于返回与列表中只有一个列表项的交互.这不是我的问题.
编辑:
其实我找到了一个解决方案,解决了我的问题,但它看起来像是尖峰而不是好的.我启动StealCount动作从ListViewcuz 获取项目数量我们不能从测试中做到这一点(因为我们在Inst线程内部).然后我开始使用列表视图检查任何项目的数据DataInteraction.看起来像这样:
public static void assertAllItems(
final Matcher<View> adapterViewMatcher,
final Matcher<View> itemsMatcher
) {
StealCountAction stealCountAction = new StealCountAction();
onView(adapterViewMatcher).perform(stealCountAction);
DataInteraction dataInteraction = onData(anything())
.inAdapterView(adapterViewMatcher);
for (int i = 0 ; i < stealCountAction.count; i++) {
dataInteraction.atPosition(i)
.onChildView(itemsMatcher)
.check(ViewAssertions.matches(isDisplayed()));
}
}
static class StealCountAction implements ViewAction {
public int count;
@Override
public Matcher<View> getConstraints() {
return instanceOf(AdapterView.class);
}
@Override
public String getDescription() {
return "Steal count action";
}
@Override
public void perform(UiController uiController, View view) {
count = ((AdapterView) view).getCount();
}
}
Run Code Online (Sandbox Code Playgroud)
但无论如何它对我来说似乎很难看.还有其他能力吗?
我会用不同的方式来做。
要检查列表视图,您只需执行以下操作:
for (int i = 0; i < numItems; i++) {
onData(anything())
.inAdapterView(withId(R.id.listViewId)).atPosition(i)
.check(matches(isDisplayed()));
}
Run Code Online (Sandbox Code Playgroud)
而且,以前,要获取 numItems 变量,您只需通过 ActivityTestRule 访问列表适配器即可:
int numItems = ((ListView) mActivityRule.getActivity().findViewById(R.id.listViewId)).getAdapter().getCount();
Run Code Online (Sandbox Code Playgroud)
或者,如果它位于片段内:
int numItems = ((ListView) mActivityRule.getActivity().getSupportFragmentManager().findFragmentById(R.id.fragmentId).getView().findViewById(R.id.listViewId)).getAdapter().getCount();
Run Code Online (Sandbox Code Playgroud)
尽管我理解你的代码,但我认为这个更容易理解。唯一令人困惑的部分是访问适配器的方式。但如果您愿意,您可以创建其他中间变量以使其更具可读性,或者创建一个函数来获取此数字。
| 归档时间: |
|
| 查看次数: |
1969 次 |
| 最近记录: |