J'ai une vue de liste, contenant plusieurs lignes avec le même Id; chaque rangée a plusieurs composants différents. Voici un extrait de la hiérarchie (toutes avec visibilité = VISIBLE):Comment obtenir les détails d'un certain élément de liste?
->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}
--->...
Je veux faire une boucle sur tous les premiers éléments de niveau dans cette liste (tous les éléments de RelativeLayout avec res-name = bground) et vérifiez l'attribut name; Une fois que j'ai trouvé l'élément que je recherche (par exemple, name = Group), je veux vérifier ses autres attributs.
Mon codage actuel:
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()));
où getDataText est:
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];
}
Dans l'exécution de la boucle représentée ci-dessus, je reçois un AmbiguousViewMatcherException, où listview est marqué comme problème. Je suppose que cela signifie qu'Espresso a trouvé des enfants ambigus dans l'élément listview (ce qui est vrai), mais childAtPosition ne devrait prendre que l'élément spécifié par l'index de position.
Comment puis-je implémenter la boucle correctement?
Merci et meilleures salutations Gerhard
Merci pour votre réponse. Malheureusement, je n'ai pas réussi à le faire fonctionner. – Gerhard
En attendant, j'ai trouvé ceci: L'application montre trois onglets (le premier est visible sur l'écran), tous les trois ont l'attribut visible = VISIBLE dans la hiérarchie de la vue. Et vraiment le premier et aussi le troisième onglet contiennent un élément listview. Je m'y attendais ce qui devrait résoudre: '... allof (childAtPosition ( allof (childAtPosition ( childAtPosition ( withId (R.id.pager), 1), 0), isDisplayed()), 0)/* = listview * /, isDisplayed()), ... Pouvez-vous expliquer à nouveau votre solution? Merci et meilleures salutations Gerhard – Gerhard