8

Dinamik olarak oluşturulmuş bir Spinner test etmeye çalışıyorum. Spinner'ı tıklayabiliyorum ama sonra verilen bir metinle listeden bir seçenek seçmem gerekiyor (Ben bir hiyerarşik görüntüleyiciden bir PopupWindow'un gösterildiğini öğrendim fakat ekran dışında gerekli olan metne ulaşamıyorum) . spinner bükücüsünde, (kod aşağıda) özel nesneler ArrayAdapter,espresso dinamik çevirici testi

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner); 
     List<MyValue> list = Arrays.asList(
       new MyValue("One", "1"), 
       new MyValue("Two", "2"), 
       new MyValue("Three", "3"), 
       new MyValue("Four", "4"), 
       new MyValue("Five", "5"), 
       new MyValue("Six", "6"), 
       new MyValue("Seven", "7"), 
       new MyValue("Eight", "8"), 
       new MyValue("Nine", "9"), 
       new MyValue("Ten", "10"), 
       new MyValue("Eleven", "11"), 
       new MyValue("Twelve", "12"), 
       new MyValue("Thirteen", "13"), 
       new MyValue("Fourteen", "14"), 
       new MyValue("Fifteen", "15"), 
       new MyValue("Sixteen", "16"), 
       new MyValue("Seventeen", "17"), 
       new MyValue("Eighteen", "18"), 
       new MyValue("Nineteen", "19"), 
       new MyValue("Twenty", "20"), 
       new MyValue("Twenty One", "21") 
     ); 

     final ArrayAdapter<MyValue> adapter = new ArrayAdapter<>(this, 
       R.layout.dropdown_selected_item, 
       list); 
     mySpinner.setAdapter(adapter); 
     mySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       Log.d("MySpinnerTest", "current = " + adapter.getItem(position)); 
      } 
      @Override 
      public void onNothingSelected(AdapterView<?> parent) {} 
     }); 
    } 

    public class MyValue { 
     String name; 
     String code; 

     public MyValue(String name, String code) { 
      this.name = name; 
      this.code = code; 
     } 

     @Override 
     public String toString() { 
      return name; 
     } 
    } 
} 

Ben onData(withSpinnerText("Twenty")).perform(click()) ile çalıştı ama bir PerformException almak ve belirli bir metne dayalı doğru bir görünümünü maç için başka nasıl olduğunu bulmaya çalıştılar kullanır popupwindow ama bunu nasıl yapacağını anlayamadım.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
+0

SpinnerText eşleştiricisi ile birlikte gördüğünüz bir özel durum istisnası eklemek mümkün mü? –

cevap

4

bunu yapmanın bir yolunu buldum ve böylece cevabını gönderme:

TIA

0

satırı ekleyin lütfen mySpinner.setAdapter(adapter);

önce, sizin Spinner hiçbir açılan görünümü vardır görünüyor kendi sorum

benim nesne için özel bir eşleyici oluşturmak zorunda kaldı ve daha sonra kullandıkları ile onData() sonra

onData(withMyValue(field.name)).perform(click()); (açılan görüntülemek için döndürücü üzerine tıkladıktan sonra) olarak kullanılabilir

public static Matcher<Object> withMyValue(final String expectedName) { 
    return new BoundedMatcher<Object, MyValue>(MyValue.class) { 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("with expectedName: " + expectedName); 
     } 

     @Override 
     protected boolean matchesSafely(MyValue myValue) { 
      return myValue.getName().equalsIgnoreCase(expectedName); 
     } 
    }; 
} 

İlgili konular