2014-01-23 3 views
2

Для тестирования программного обеспечения с Google Эспрессо тест-рамки я следующий вопрос:задержки эспрессо не может справиться с

При запуске программы, заставка начинает экрана и инициализирует все приложение. После этого я запускаю операцию, которая запрашивает ввод.

В Espresso приложение запускается, и тест начинается со следующего кода: onView (withId (R.id.chooseBookTitle)). Выполнить (щелкните());

Это приводит к сбоям, поскольку на дисплее по-прежнему отображается заставка, а selectBookTitle видна только после этого. Как предотвратить, чтобы Google-Espresso щелкнул ключ до его появления?

(я не хочу, чтобы вставить петлю ожидания, но держать его событийный В худшем случае, я возвращаюсь к Robotium.)

+0

Является ли selectBookTitle видом активности, запущенной заставкой? Если это так, Espresso должен позаботиться о времени и подождать, пока нить пользовательского интерфейса не будет использоваться. Не могли бы вы опубликовать некоторый код, чтобы уточнить? – Bolhoso

+0

Используйте эту ниже одну строку кода для разбора тестового чехла Test Espresso: SystemClock.sleep (1000); // 1 секунда – user5800586

ответ

1

Пожалуйста, проверьте интерфейс IdlingResource:

Как отметил Стефано Dacchille (см образец ниже), вы должны создать холостой ход реализации Ressource, который ждет, чтобы стать вхолостую:

public class WaitForSomethingResource implements IdlingResource { 

ResourceCallback mResourceCallback; 

private boolean isIdle; 

@Override 
public String getName() { 
    return WaitForSomethingResource.class.getName(); 
} 

@Override 
public void registerIdleTransitionCallback(
     ResourceCallback resourceCallback) { 
    mResourceCallback = resourceCallback; 
} 

@Override 
public boolean isIdleNow() { 
    return isIdle; 
} 

/** 
* Register an listener, use an event bus or something 
* else to get notified about any change you want to track. 
*/ 
public void onProgressChanged() { 
    isIdle = true; 

    if (isIdle && mResourceCallback != null) { 
     mResourceCallback.onTransitionToIdle(); 
    } 
} 

}

После этого, у вас есть т о регистрации осуществления IdlingResource в пределах нАлАдкА испытаний() или метод @Before написав:

Espresso.registerIdlingResource(waitForSomethingResource) 

Пример: http://dev.jimdo.com/2014/05/09/wait-for-it-a-deep-dive-into-espresso-s-idling-resources/

API Doc: http://developer.android.com/reference/android/support/test/espresso/IdlingResource.html#isIdleNow()

+0

Используйте эту ниже одну строку кода для разбора тестового чехла Test Espresso: SystemClock.sleep (1000); // 1 Second – user5800586

0

Из того, что я вижу, вы должны открыть непосредственно деятельность, которая содержит R.id.chooseBookTitle, иначе ваше представление никогда не будет на экране, поэтому ваш тест всегда будет терпеть неудачу, потому что Espresso не может найти указанное представление.

В противном случае, я использую Thread.sleep (...), прежде чем делать некоторые тесты, чтобы тесты прошли. Попробуйте, прежде чем вызывать onView (withId (R.id.chooseBookTitle)). Выполнить (нажмите()); и посмотреть, работает ли он.

Удачи вам!

+0

Используйте эту ниже одну строку кода для обработки любого тестового примера Test Espresso: SystemClock.sleep (1000); // 1 секунда – user5800586

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