Domanda

Sto cercando di leggere un valore dalla mia vista UI.Questo è il metodo che uso per trovare la stringa di cui ho bisogno.Questo restituisce solo l'ID textView e non il contenuto.

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

Come posso restituire la stringa di cui ho bisogno?

È stato utile?

Soluzione

Come accennato nei commenti, non abbiamo effettuato questa azione un cittadino di prima classe dell'API dell'espresso per incoraggiare gli autori di test di essere espliciti con azioni e asserzioni e scoraggiare la logica condizionale nei test.Con questo in mente, ti incoraggio a cercare di scrivere un falso per il tuo server, in modo da poter controllare l'ingresso del test (ed evitare la flabbiabilità) ed evitare la logica condizionale.

Tuttavia, se devi assolutamente ottenere il valore, puoi fare qualcosa del genere:

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());
  }
}
.

Certo, se lo fai molto (che non dovresti), puoi renderlo più bello mettendo tutto questo in una classe separata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top