【Espresso】withText

/**
   * Returns a matcher that matches {@link TextView}s based on text property value.
   *
   * 

Note: A View text property is never {@code null}. If you call {@link * TextView#setText(CharSequence)} with a {@code null} value it will still be "" (empty string). * Do not use a null matcher. * * @param stringMatcher Matcher * of {@link String} with text to match */ public static Matcher withText(final Matcher stringMatcher) { return new WithTextMatcher(checkNotNull(stringMatcher)); }

由上述注释可知,该方法适用于TextView,所以使用onData时不能使用这条属性,即不能像下面那样调用

onData(withText("item1"));

它可以与onView配合使用,withText返回的是一个WithTextMatcher类型,WithTextMatcher继承自BoundedMatcher,重写了BoundedMatcher的一些方法,其中matchesSafely方法如下:

@Override
    protected boolean matchesSafely(TextView textView) {
      String text = textView.getText().toString();
      // The reason we try to match both original text and the transformated one is because some UI
      // elements may inherit a default theme which behave differently for SDK below 19 and above.
      // So it is implemented in a backwards compatible way.
      if (stringMatcher.matches(text)) {
        return true;
      } else if (textView.getTransformationMethod() != null) {
        CharSequence transformedText =
            textView.getTransformationMethod().getTransformation(text, textView);
        if (transformedText != null) {
          return stringMatcher.matches(transformedText.toString());
        }
      }
      return false;
    }

由此可见,withText最终找到的对象必须是TextView类型的。

你可能感兴趣的:(【Espresso】withText)