2016-07-26 13 views
2

Können wir Assertion auf Edittext Value ausführen und unseren Testfall entsprechend seiner Ausgabe aufschreiben. Wie, wenn wir EditText Wert für unsere Wert gleich ist, dass wir Bedingung A sonst B.EditText-Wert in Espresso bestätigen

onView(withId(viewId)).check(matches(isEditTextValueEqualTo(viewId, value))); 

Matcher<View> isEditTextValueEqualTo(final int viewId, final String content) { 

    return new TypeSafeMatcher<View>() { 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("Match Edit Text Value with View ID Value : : " + content); 
     } 

     @Override 
     public boolean matchesSafely(View view) { 
      if (view != null) { 
       String editTextValue = ((EditText) view.findViewById(viewId)).getText().toString(); 

       if (editTextValue.equalsIgnoreCase(content)) { 
        return true; 
       } 
      } 
      return false; 
     } 
    }; 
} 

Dies funktioniert nicht versuchen, mit .. catch (Exception e)

Antwort

0

Wenn ich überprüfen, den Wert und die Behauptung scheiterte es AssertionFailedError wirft, die nicht in der Hierarchie der Ausnahme ist. Es wird behoben mit try ... catch (AssertionFailedError e)

4

Ich glaube nicht, Sie shoud ausführen möchten FindViewById innerhalb der Matcher, sehe ich keinen Grund, dies zu tun.

Ich habe Ihre Matcher aktualisiert:

Matcher<View> isEditTextValueEqualTo(final String content) { 

    return new TypeSafeMatcher<View>() { 

     @Override 
     public void describeTo(Description description) { 
      description.appendText("Match Edit Text Value with View ID Value : : " + content); 
     } 

     @Override 
     public boolean matchesSafely(View view) { 
      if (!(view instanceof TextView) && !(view instanceof EditText)) { 
        return false; 
      } 
      if (view != null) { 
       String text; 
       if (view instanceof TextView) { 
        text =((TextView) view).getText().toString(); 
       } else { 
        text =((EditText) view).getText().toString(); 
       } 

       return (text.equalsIgnoreCase(content)); 
      } 
      return false; 
     } 
    }; 
} 

Und es so nennen:

onView(withId(viewId)).check(matches(isEditTextValueEqualTo(value))); 
+0

Vielen Dank für Ihren Kommentar, aber es ist mit AssertionFailedError catch Block behoben. Auch FYI wir können Einblick in Matcher bekommen. – Krishnakant

+1

Ich sage nicht, dass es nicht getan werden kann, ich sage nur, dass es nicht effizient ist. Wenn Sie eine Ansicht haben, sollten Sie keine langsamen Operationen ausführen, um die gleiche Ansicht zu erhalten. FindViewById ist keine billige Operation wie jeder Zugriff auf die View-Hierarchie. – jeprubio

+0

ohk Großer Dank :-) – Krishnakant