Frage

Ich versuche, einen Wert aus meiner UI-Ansicht zu lesen.Dies ist die Methode, die ich verwende, um die Zeichenfolge zu finden, die ich benötige.Dies gibt nur die zurück textView id, und nicht der Inhalt.

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

Wie kann ich die benötigte Zeichenfolge zurückgeben?

War es hilfreich?

Lösung

Wie in den Kommentaren erwähnt, haben wir diese Aktion nicht zu einem First-Class-Bürger der Espresso-API gemacht, um Testautoren zu ermutigen, explizit mit Aktionen und Behauptungen umzugehen und bedingte Logik in Tests zu unterbinden.Vor diesem Hintergrund empfehle ich Ihnen, darüber nachzudenken, eine Fälschung für Ihren Server zu schreiben, damit Sie die Testeingabe kontrollieren (und Unzulänglichkeiten vermeiden) und bedingte Logik vermeiden können.

Wenn Sie den Wert jedoch unbedingt ermitteln müssen, können Sie Folgendes tun:

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

Wenn Sie dies häufig tun (was Sie nicht tun sollten), können Sie es natürlich schöner machen, indem Sie alles in eine separate Klasse packen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top