可以在Android上使用Espresso测试支持v7 SearchView

时间:2017-03-02 16:49:59

标签: android android-support-library searchview android-espresso

我正在Android上对我的应用进行一些检测测试,但是碰壁了。我有一个来自android的v7支持库的SearchView,我想以某种方式测试它。我想它不能直接点击,因为我用传统的方式尝试过它,如:

onView(withId(R.id.search_view)).perform(click())

有没有办法用Espresso测试这样的SearchView

3 个答案:

答案 0 :(得分:18)

解决方案取决于SearchView的初始状态。如果它已折叠,则必须先打开它:

onView(withId(R.id.your_search_menu_id)).perform(click());

然后你可以输入它。

有两种方法:

  1. 通过搜索自动填充ID,即公开

    onView(withId(android.support.design.R.id.search_src_text)).perform(typeText("something"));
    
  2. 通过使用这个事实,它是AutoCompleteTextView

    onView(isAssignableFrom(AutoCompleteTextView.class)).perform(typeText("something"));
    

答案 1 :(得分:0)

出于某种原因,click()对我不起作用。

我将这种表达式扩展用于用kotlin编写的searchViews:

 class SearchViewActionExtension {

    companion object {
        fun submitText(text: String): ViewAction {
            return object : ViewAction {
                override fun getConstraints(): Matcher<View> {
                    return allOf(isDisplayed(), isAssignableFrom(SearchView::class.java))
                }

                override fun getDescription(): String {
                    return "Set text and submit"
                }

                override fun perform(uiController: UiController, view: View) {
                    (view as SearchView).setQuery(text, true) //submit=true will fire search
                }
            }
        }
        fun typeText(text: String): ViewAction {
            return object : ViewAction {
                override fun getConstraints(): Matcher<View> {
                    return allOf(isDisplayed(), isAssignableFrom(SearchView::class.java))
                }

                override fun getDescription(): String {
                    return "Set text"
                }

                override fun perform(uiController: UiController, view: View) {
                    (view as SearchView).setQuery(text, false)
                }
            }
        }
    }
}

通过为提交参数调用setQuery为true会立即触发搜索。

用法:

onView(withId(R.id.search_box))
            .perform(SearchViewActionExtension.submitText("search text"))

答案 2 :(得分:0)

对于AndroidX

您可以使用Resource#getSystem获取视图

Resources.getSystem().getIdentifier("search_src_text",
    "id", "android")


onView(withId(Resources.getSystem().getIdentifier("search_src_text",
"id", "android"))).perform(clearText(),typeText("enter the text"))
.perform(pressKey(KeyEvent.KEYCODE_ENTER))