可以在Android上使用Espresso进行测试支持V7搜索视图



我在Android中的应用程序上进行了一些乐器测试,但撞到了墙壁。我有一个来自Android的V7支持库中的搜索视图,我想以某种方式对此进行测试。我想它不是直接单击的,因为我以常规方式尝试了:

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

有什么方法可以用浓缩咖啡来测试这种SearchView

解决方案取决于 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"));
    

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

我将这种表达式的扩展用于搜索视图,用kotlin编写:

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

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

用法:

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

for androidx

您可以使用资源#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))

最新更新