2016-07-26 2 views
2

Можем ли мы выполнить утверждение на значение Edittext и записать наш тестовый пример в соответствии с его результатом. Как если бы мы EditText значения равно наша ценность, которую мы хотим выполнить условие А еще В.Assert EditText Значение в Espresso

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; 
     } 
    }; 
} 

Это не работает, используя попробовать .. Поймать (Exception е)

ответ

0

Когда я проверяю значение и утверждение не удалось это бросает AssertionFailedError, который не находится в иерархии исключений. Он исправляется с помощью try ... catch (AssertionFailedError e)

4

Я не думаю, что вы Шоуд сделайте findViewById внутри соединителя, я не вижу причин для этого.

Я обновил свой Искателя:

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; 
     } 
    }; 
} 

И назвать это таким образом:

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

Спасибо за ваш комментарий, но он исправлен с блокировкой захвата AssertionFailedError. Кроме того, FYI мы можем получить представление внутри матчи. – Krishnakant

+1

Я не говорю, что это невозможно, я просто сказал, что это не эффективно. Если у вас есть представление, вы не должны выполнять медленные операции, чтобы получить один и тот же вид. FindViewById не является дешевой операцией, поскольку каждый доступ к иерархии представлений. – jeprubio

+0

ohk Большое спасибо :-) – Krishnakant

Смежные вопросы