Je viens de commencer à travailler avec Espresso recorder
. J'ai fait mon premier test, et à partir de ce que je peux voir la fonction onView
, cela suppose que l'attente de l'objet pour continuer ne fait pas le travail. Il retourne toujours:Espresso onView n'attend pas l'élément
android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching
.
Y at-il une fonction qui fonctionnerait comme wait for
que je pourrais utiliser à la place?
package com.mytest;
import android.support.test.espresso.ViewInteraction;
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.IdlingResource;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Before;
import org.junit.runner.RunWith;
import com.mytest.R;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withParent;
import static org.hamcrest.Matchers.allOf;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class Test1 {
@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class);
private IdlingResource mIdlingResource;
@Before
public void registerIdlingResource() {
mIdlingResource = mActivityRule.getActivity().getIdlingResource();
Espresso.registerIdlingResources(mIdlingResource);
}
@Test
public void test1() {
ViewInteraction recyclerView = onView(
allOf(withId(R.id.recycler_view), isDisplayed()));
recyclerView.perform(actionOnItemAtPosition(0, click()));
ViewInteraction relativeLayout = onView(
allOf(withId(R.id.capture_layout), isDisplayed()));
relativeLayout.perform(click());
ViewInteraction relativeLayout2 = onView(
allOf(withId(R.id.like_layout),
withParent(allOf(withId(R.id.cameraLayout),
withParent(withId(android.R.id.content)))),
isDisplayed()));
relativeLayout2.perform(click());
ViewInteraction relativeLayout3 = onView(
allOf(withId(R.id.exit_layout), isDisplayed()));
relativeLayout3.perform(click());
}
}
Essayez d'utiliser les ressources de ralenti, le thread de l'interface utilisateur peut être occupé à mettre à jour les vues. Voici un exemple. https://github.com/googlesamples/android-testing/blob/master/ui/espresso/IdlingResourceSample/app/src/androidTest/java/com/example/android/testing/espresso/IdlingResourceSample/ChangeTextBehaviorTest.java –
@vk .4884 Donc, si je comprends, je suppose d'attraper un événement qui va commencer à tester. Je peux le faire dans '@Before'. Et im en utilisant '@Before' dans '@Rule'. Je peux attraper cet événement avec MainActivity comme c'est IdlingResource. J'ai vérifié, et dans mon application, la première fonction dans le test devrait commencer quand onResume est appelé. Le problème est que je ne sais pas exactement comment l'enregistrer. 'mIdlingResource = mActivityRule.getActivity(). OnResume(); Espresso.registerIdlingResources (mIdlingResource); ' J'ai essayé cela, mais ça ne marche pas. Je reçois une erreur de type Incompatible. – Megami
Utilisez 'mIdlingResource = mActivityRule.getActivity(). GetIdlingResource();' au lieu de 'onResume()' –