Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试在微调器中选择项目时,Espresso始终失败_Android_Automated Tests_Android Espresso_Ui Testing - Fatal编程技术网

Android 尝试在微调器中选择项目时,Espresso始终失败

Android 尝试在微调器中选择项目时,Espresso始终失败,android,automated-tests,android-espresso,ui-testing,Android,Automated Tests,Android Espresso,Ui Testing,我试图从一个简单的微调器中选择一个项目,但总是失败。我可以单击微调器,它会显示列表。但是当我尝试选择第一个选项时,它总是抛出索引outofboundsexception: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.get(ArrayList.java:437) at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:385)

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

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.
我尝试了一些方法(,)得到了同样的结果。以下是我当前的实现:

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

使用咖啡师的方法
单击喷丝器项目(R.id.spinner,indexToSelect)
。它可以处理各种数据,不管是哪种数据。此外,您的测试将更具可读性。找咖啡师


顺便考虑一下,使用Bista的睡眠方法,或者,如果可能的话,实现你自己的IDLIN资源,使你的测试更快,更可靠。

< P>我最终使用了ID和文本视图中的文本:

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

}

这可能不是最好的方法,但这个方法很有效。

我想你的适配器会返回其他类型的对象而不是字符串,你能粘贴你的适配器代码吗?@Aaron我也想到了这一点。但现在我用了不同的方法,效果很好。我会把答案贴出来,如果有更好的方法,请看一看。我用了不同的方法,现在可以用了。在去另一家图书馆之前,我会先试着舒服地喝浓咖啡。这是个不错的选择!咖啡师只是一个浓缩咖啡包装,不是一个完全的替代品,但没有问题!只要确保你读了它的自述,就可以避免在纯意式浓缩咖啡出现问题时完全发疯!干杯