2

我正在尝试从我的 UI 视图中读取一个值。这是我用来查找所需字符串的方法。这只会返回textViewid,而不是内容。

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

如何返回我需要的字符串?

4

1 回答 1

3

正如评论中提到的,我们没有将此操作作为 Espresso API 的一等公民,以鼓励测试作者明确地使用操作和断言并阻止测试中的条件逻辑。考虑到这一点,我鼓励你考虑为你的服务器编写一个假的,这样你就可以控制测试输入(并避免不稳定)并避免条件逻辑。

但是,如果您绝对必须获得该值,则可以执行以下操作:

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

当然,如果你经常这样做(你不应该这样做),你可以通过将所有这些放在一个单独的类中来使它变得更好。

于 2014-01-10T21:45:13.987 回答