1
こんにちは、私はこのRecipeActivityの中にrecyclerviewを持つこのアプリを持っています。
リストアイテムをクリックすると、別のアクティビティが開き、インテントに余分なものが渡されます。Androidデバイスのエスプレッソテストが物理デバイスで失敗しました(PerformException)
私はエスプレッソでその単純な機能をテストしたいだけです(私はそれから始まります)。 これは私のコードです:今@RunWith(AndroidJUnit4.class)
public class ShowIngredientsTest {
@Rule
public IntentsTestRule<RecipeActivity> testRule =
new IntentsTestRule<>(RecipeActivity.class);
@Test
public void checkIfIntentWorks() {
onView(withId(R.id.recipes_recyclerview))
.perform(RecyclerViewActions.actionOnItemAtPosition(0, click()));
intended(hasExtraWithKey(RECIPE_PARCEL));
}
}
、奇妙なことは、私はネクサス5.0(アンドロイド7.0)エミュレータ(私は確かに二回試した)上でそれを実行すると、それはを渡すということです。
Oneplus 3(Android 7.1.1)(またはNexus 5.0と同じapiレベルの別のエミュレータでも)を試しても、それはありません。
android.support.test.espresso.PerformException: Error performing 'android.support.test.espresso.[email protected]8130' on view 'with id: com.onval.bakingapp:id/recipes_recyclerview'.
at android.support.test.espresso.PerformException$Builder.build(PerformException.java:83)
at android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.java:80)
at android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.java:56)
at android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.java:184)
at android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.java:115)
at android.support.test.espresso.ViewInteraction.perform(ViewInteraction.java:87)
at com.onval.bakingapp.ShowIngredientsTest.checkIfIngredientsAreShows(ShowIngredientsTest.java:34)
at java.lang.reflect.Method.invoke(Native Method)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55)
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:270)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:59)
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2110)
Caused by: java.lang.IllegalStateException: No view holder at position: 0
at android.support.test.espresso.contrib.RecyclerViewActions$ActionOnItemAtPositionViewAction.perform(RecyclerViewActions.java:290)
at android.support.test.espresso.ViewInteraction$1.run(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6321)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Tests ran to completion.
それが何をすることができます これはエラーメッセージですか?エミュレータができるときに、位置0でアクションを実行できないのはなぜですか?なぜそれがはっきりしているときにビューホールダーがそのポジションに存在しないと言うのでしょうか?エミュレータにはその問題はありません!
私の唯一のアイデアは、物理デバイスが高速であるということでしょう、そして、それはチェックviewholderが作成される前に...私はonViewとactionOnItemAtPositionの間に.perform(RecyclerViewActions.scrollToPosition(0))
を追加しようとしましたが、それはしていませんとにかく仕事。
私には何が欠けていますか?前もって感謝します!