Как заставить UI Automator ждать, пока текстовое значение TextView не изменится - PullRequest
1 голос
/ 11 февраля 2020

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

Существует 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 ]

2 голосов
/ 11 февраля 2020

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

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

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

1 голос
/ 13 февраля 2020

Невозможно дождаться текста, используя 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
    }
} 
...