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

を追加しようとしましたが、それはしていませんとにかく仕事。

私には何が欠けていますか?前もって感謝します!

答えて

1

私はそれを解決しました。私はIdlingResourcesを使う必要がありました。

関連する問題