0
我有一个列表视图,包含具有相同ID的多行;每行有几个不同的组件。这里的层次结构(所有的知名度=可见)的摘录:如何获取某个列表元素的详细信息?
->ListView{id=213, res-name=listview, child-count=2}
-->RelativeLayout{id=214, res-name=bground, child-count=5}
--->AppCompatTextView{id=215, res-name=name, text=Short}
--->AppCompatTextView{id=216, res-name=valid, text=10.04.}
--->... further elements in the RelativeLayout res-name=bground
-->RelativeLayout{id=214, res-name=bground, child-count=5}
--->AppCompatTextView{id=215, res-name=name, text=Group}
--->AppCompatTextView{id=216, res-name=valid, text=09.04}
--->...
我想环路在此列表中所有的第一级别的元素(所有的RelativeLayout元素与RES-NAME = bground),并检查name属性;一旦我找到了我搜索的元素(例如name = Group),我想检查它的其他属性。
我的当前编码是:
for (int i = 0; i < numItems; i++) {
String type = getDataText(allOf(withId(R.id.name),
childAtPosition(
allOf(withId(R.id.bground),
childAtPosition(withId(R.id.listview),i)),
0),
isDisplayed()));
其中getDataText是:
String getDataText(final Matcher<View> matcher) {
final String[] stringHolder = { null };
onData(matcher).perform(new ViewAction() {
@Override
public Matcher<View> getConstraints() {
return isAssignableFrom(TextView.class);
}
@Override
public String getDescription() {
return "getting text from a TextView";
}
@Override
public void perform(UiController uiController, View view) {
TextView tv = (TextView)view;
stringHolder[0] = tv.getText().toString();
}
});
return stringHolder[0];
}
在该循环的执行如上所示,得到了一个AmbiguousViewMatcherException,其中列表视图被标记为问题。我想这意味着Espresso在listview元素中找到了不明确的子元素(什么是真的),但是childAtPosition应该只取得位置索引指定的元素。
如何正确实现循环?
感谢和问候 格哈德
谢谢您的回答。不幸的是,我没有得到它的工作。 – Gerhard
同时我发现这个: 该应用程序显示三个选项卡(第一个在屏幕上可见),所有三个选项卡在视图层次结构中都具有visible = VISIBLE属性。第一个也是第三个选项卡包含一个listview元素。 我预计,这应该解决: '... allOf(childAtPosition( allOf(childAtPosition( childAtPosition( withId(R.id.pager),1), 0),isDisplayed()), 0)/ * = listview * /,isDisplayed()),... 您能否再解释一下您的解决方案? 谢谢,最好的问候 Gerhard – Gerhard