繁体   English   中英

尝试在微调器中选择项目时,Espresso总是失败

[英]Espresso always fails when trying to select item in spinner

我试图从一个简单的微调器中选择一个项目,但始终失败。 我可以单击微调器,它会显示列表。 但是当我尝试选择第一个选项时,它总是会抛出indexOutOfBoundsException

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:385)
at android.widget.Spinner$DropDownAdapter.getItem(Spinner.java:1010)
at android.widget.AdapterView.getItemAtPosition(AdapterView.java:801)
at androidx.test.espresso.action.AdapterViewProtocols$StandardAdapterViewProtocol.getDataInAdapterView(AdapterViewProtocols.java:90)
at androidx.test.espresso.action.AdapterDataLoaderAction.perform(AdapterDataLoaderAction.java:79)
at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform(ViewInteraction.java:360)
at androidx.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:251)
at androidx.test.espresso.ViewInteraction.access$100(ViewInteraction.java:64)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:157)
at androidx.test.espresso.ViewInteraction$1.call(ViewInteraction.java:154)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.Handler.handleCallback(Handler.java:808)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)

Tests ran to completion.

我尝试了一些方法( thisthis ),结果相同。 这是我当前的实现:

        onView(withId(R.id.spinner)).perform(click())
        Thread.sleep(7000)

        onData(allOf(`is`(instanceOf(String::class.java)))).atPosition(0).perform(click())
        Thread.sleep(7000)
        onView(withId(R.id.selected)).check(matches(withText(instanceForTest)))

使用Barista的方法clickSpinnerItem(R.id.spinner, indexToSelect) 无论使用哪一种数据,它都能处理各种数据。 此外,您的测试将更具可读性。 https://github.com/SchibstedSpain/Barista获取Barista

顺便说一句,请考虑使用Barista的sleep方法,或者如果可能的话,实现自己的IdlingResource以使测试更快,更可靠。

我最终使用了id和textView中的文本:

try {

    Thread.sleep(3000)

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

    onView(allOf(withId(R.id.text_name), withText(instanceForTest)))
            .perform(scrollTo(), click())

    onView(withId(R.id.text_name))
            .check(matches(withText(instanceForTest)))

    Thread.sleep(3000)

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

} catch (e: NoMatchingViewException) {

}

这可能不是最好的方法,但是这种方法可行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM