2016-05-12 1 views
2

j'ai une application, ont ListView, je veux trouver LinearLayout, id = order_untake_jijia_listview_jiaEspresso onData Erreur d'effectuer 'des données de l'adaptateur de charge' sur la vue

enter image description here

code est:

onData(withClassName(endsWith("ListView"))) 
      .inAdapterView(allOf(withId(R.id.order_untake_jijia_listview_ll), hasSibling(withText("9.0")))) 
      .atPosition(0).onChildView(withId(R.id.order_untake_jijia_listview_jia)); 
      dataInteraction.perform(ViewActions.click()); 

Mais j'ai l'erreur:

Error performing 'load adapter data' on view '(with id: com.edaixi:id/order_untake_jijia_listview_ll and has sibling: with text: is "9.0")'. 
Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: 
(is assignable from class: class android.widget.AdapterView and is displayed on the screen to the user) 
Target view: "LinearLayout{id=2131493753, res-name=order_untake_jijia_listview_ll, visibility=VISIBLE, width=170, height=50, has-focus=false, has-focusable=false, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=572.0, y=25.0, child-count=3}" 
+0

Je veux trouver "order_untake_jijia_listview_ll" enfant "order_untake_jijia_listview_jia" mais trouve son père .... –

+0

s'il vous plaît reformater. –

+0

Je pense que dans les nouvelles versions d'Espresso ce n'est plus un problème. – 476rick

Répondre

0

Vous utilisez onData incorrectement. onData prend un objet matcher - il est destiné à correspondre à l'objet de modèle personnalisé utilisé pour remplir la liste. Donc, si vous aviez une liste de chaînes simples, vous diriez onData(instanceOf(String.class)).atPosition(0) ou onData(is("This exact String at position 0")).

inAdapterView est utilisé pour faire correspondre l'instance de vue d'adaptateur spécifique qui contient vos données. Vous en avez besoin lorsque vous avez plusieurs listes sur l'écran que vous devez distinguer. Par exemple, si vous aviez un ListView nommé R.id.list1 et un second R.id.list2 contenant tous les deux String s, vous diriez onData(is("The String")).inAdapterView(withId(R.id.list1)) pour correspondre à l'objet dans la première liste.

Vous n'avez généralement pas besoin de spécifier une vue enfant dans ces cas si vous avez juste besoin de cliquer sur un seul élément de l'adaptateur. Vous utilisez généralement onChildView pour faire une assertion sur un élément de vue enfant ou si vous avez un écouteur de clic dédié distinct sur cette sous-vue.

Ainsi, il semble que si vous avez trop compliqué la situation et vous devriez être en mesure de mettre à jour votre code à quelque chose comme ceci:

onData(instanceOf(MyCustomClassOfObjectsInAdapter.java)) 
    .atPosition(0) 
    .perform(click()); 

Si cela ne résout pas votre problème, s'il vous plaît fournir une mise en page code de ce à quoi ressemblent vos éléments de liste ainsi que la disposition de l'écran principal qui a la liste, et une capture d'écran avec un exemple de l'affichage et clarifiez ce que vous essayez de faire correspondre/agir/affirmer et je peux essayer de vous guider à l'ensemble correct de méthodes dont vous avez besoin pour accomplir ce dont vous avez besoin.

Espérons que ça aide!