如何使用Android中的Espresso为textview设置值

时间:2017-11-10 06:23:55

标签: android unit-testing textview android-espresso

我正在为Fragment编写测试用例。我可以将文本设置为Edittext,但无法通过测试将文本视图设置为文本视图。请有人帮我解决这个问题.Bellow是我编辑文本的代码。

   onView(withId(R.id.editText))
        .perform(typeText("my text"), closeSoftKeyboard());

请帮我知道如何将文字设置为文字视图。

1 个答案:

答案 0 :(得分:5)

由于typeText的前提条件而发生了这种情况,即

  

查看前提条件:

     必须在屏幕上显示

     

必须支持输入法

TextView不支持

Input method(用户无法通过键盘或其他内容输入值)因此问题

解决方案:您可以实施自己的观看ViewAction

From how to create View action to set text on TextView

public static ViewAction setTextInTextView(final String value){
            return new ViewAction() {
                @SuppressWarnings("unchecked")
                @Override
                public Matcher<View> getConstraints() {
                    return allOf(isDisplayed(), isAssignableFrom(TextView.class));
//                                            ^^^^^^^^^^^^^^^^^^^ 
// To check that the found view is TextView or it's subclass like EditText
// so it will work for TextView and it's descendants  
                }

                @Override
                public void perform(UiController uiController, View view) {
                    ((TextView) view).setText(value);
                }

                @Override
                public String getDescription() {
                    return "replace text";
                }
            };
    }

然后你可以做

onView(withId(R.id.editText))
        .perform(setTextInTextView("my text"));