Как заставить UI Automator ждать, пока текстовое значение TextView не изменится

В настоящее время я занимаюсь тестированием пользовательского интерфейса между приложениями.

Существует TextView, который существует, и я должен проверить его текстовое значение. Таким образом, я должен найти способ дождаться изменения текстового значения TextView.

Вот мой случай использования:

final UiSelector contextualInformation = new UiSelector().resourceId(resourceId);
final UiObject contextualInformationUiObject = mDevice.findObject(contextualInformation);

// I would like to find something to fulfill this statement
Boolean conditionWasMet = contextualInformationUiObject.wait(Until./*a search condition for text to contain given substring*/, timeout);

assertThat(conditionWasMet, is(notNullValue()));
assertThat(conditionWasMet, is(true));
assertThat(contextualInformationUiObject.exists(), is(true));
assertThat(contextualInformationUiObject.getText(), containsString(/*given substring*/));

Мне хорошо известно о существовании Until.textContains(/*substring*/) но я не знаю, как применить его к / с contextualInformation или contextualInformationUiObject здесь.

Всего 2 ответа


Насколько я знаю, если ваш процесс не обладает onFinished вызовом onFinished , нет другого способа, кроме как использовать Thread.sleep() . Вот что я сделал в своем последнем проекте:

final long waitingTime = 5000L;
Thread.sleep(averageWaitingTime);

Вы можете просто настроить время waitingTime . Идея состоит в том, чтобы выиграть достаточно времени для завершения процесса.


С помощью UiObject невозможно ждать текст, только UiObject2 . Чтобы ждать текст, вы можете использовать:

fun waitElement(expectedText: String): UiObject2 {
    val view = device.wait(Until.hasObject(By.text(expectedText)), TIMEOUT)

    if (view == null) {
        throw Exception(
                "After waiting for ${TimeUnit.MILLISECONDS.toSeconds(TIMEOUT)} seconds, " +
                "the text $expectedText was not found"
        )
    }
    else {
        return view
    }
} 

Есть идеи?

10000