2017-01-18 2 views
1

Я использую espresso 2.2.1 для тестирования Android. Я запускаю несколько тестовых примеров, а некоторые не работают, потому что эспрессо работает слишком быстро. Элементы даже не загружены для отображения, и именно поэтому тестовые примеры не работают. Есть ли способ замедлить эти прогоны?Мне нужно замедлить работу тестового теста эспрессо

ответ

1

Вы можете создать конкретный Искателя, который будет ждать для просмотра с идентификатором или просмотреть с текстом или что-то:

public static ViewAction waitViewWithMatcher(Func1<View, Boolean> predicate, final long millis) { 
    return new ViewAction() { 
     @Override 
     public Matcher<View> getConstraints() { 
      return isRoot(); 
     } 

     @Override 
     public String getDescription() { 
      return "wait for a specific during " + millis + " millis."; 
     } 

     @Override 
     public void perform(final UiController uiController, final View view) { 
      uiController.loopMainThreadUntilIdle(); 
      final long startTime = System.currentTimeMillis(); 
      final long endTime = startTime + millis; 

      do { 
       for (View child : TreeIterables.breadthFirstViewTraversal(view)) { 
        if (predicate.call(child)) { 
         return; 
        } 
       } 

       uiController.loopMainThreadForAtLeast(50); 
      } 
      while (System.currentTimeMillis() < endTime); 

      throw new PerformException.Builder() 
        .withActionDescription(this.getDescription()) 
        .withViewDescription(HumanReadables.describe(view)) 
        .withCause(new TimeoutException()) 
        .build(); 
     } 
    }; 
} 

Затем вы можете использовать его как:

onView(isRoot()).perform(EspressoTestUtil.waitViewWithMatcher(v -> withId(R.id.view_id).matches(v), 30000)); 

Он ожидает представления с идентификатором view_id, 30000 мс.

+0

predicate.call (child) и префикс Func1 дают ошибки. есть ли какая-либо зависимость, которую нужно добавить или есть какое-либо конкретное определение этих 2? – sanketprabhune

+0

ах да извините. Это от rxjava. Вы можете просто скопировать-вставить его - http://grepcode.com/file/repo1.maven.org/maven2/io.reactivex/rxjava/1.0.13/rx/functions/Func1.java#Func1 в свой проект. – Divers

+0

uiController.loopMainThreadForAtLeast (50) этот метод будет зацикливать основную нить за 50 миллисекунд вправо? – sanketprabhune