【问题标题】:How to set a value to the textview using Espresso in Android如何在 Android 中使用 Espresso 为 textview 设置值
【发布时间】:2017-11-10 06:23:55
【问题描述】:

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

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

请帮助我如何在文本视图中设置文本。

【问题讨论】:

    标签: android unit-testing textview android-espresso


    【解决方案1】:

    这是由于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"));
    

    【讨论】:

    • 在那个视图中这是什么 Action allOf,isAssignableFrom
    • 用于类型安全。即找到的视图应该是 textview 的子类型,它有点像 instanceof check
    • 两种方法都可以导入
    • 我无法导入该方法
    • 尝试添加import static android.support.test.espresso.matcher.ViewMatchers.isAssignableFrom;
    猜你喜欢
    • 2018-05-05
    • 1970-01-01
    • 2013-11-09
    • 2014-09-13
    • 2011-09-10
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多