Pergunta

Estou tentando ler um valor da minha visualização da IU.Este é o método que uso para encontrar a string que preciso.Isso só retorna o textView id, e não o conteúdo.

    public static String getSpeedIndex(){
    return onView(allOf(withId(R.id.slider_index),
            isDescendantOfA(withId(R.id.speed_number_column))))
            .toString();
    }

Como posso retornar a string que preciso?

Foi útil?

Solução

Conforme mencionado nos comentários, não tornamos esta ação um cidadão de primeira classe da API Espresso para encorajar os autores dos testes a serem explícitos com ações e asserções e desencorajar a lógica condicional nos testes.Com isso em mente, encorajo você a escrever uma falsificação para o seu servidor, para que possa controlar a entrada do teste (e evitar instabilidade) e evitar lógica condicional.

No entanto, se for absolutamente necessário obter o valor, você pode fazer algo assim:

final AtomicReference<String> textFromView = new AtomicReference<String>();

onView(<matcher for your view>).perform(new ViewAction() {
  @Override
  public Matcher<View> getConstraints() {
    // TODO - at the very least, check that this is an instance of TextView 
  }

  @Override
  public String getDescription() {
    return "get text from text view"
  }

  @Override
  public void perform(UiController uiController, View view) {
    textFromView.set(((TextView) view).getText());
  }
}

Claro, se você faz muito isso (o que não deveria), você pode torná-lo mais agradável colocando tudo isso em uma classe separada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top