Тестирование ложки и эспрессо

Итак, у меня есть тест, который проходит через все мое приложение. Теперь хочу все сфотографировать. Поскольку в нем есть 2 действия и множество фрагментов, я не могу заставить его работать, поскольку он принимает только первый фрагмент каждого действия.

Как мне добиться, чтобы я фотографировал каждый фрагмент?

   @RunWith(AndroidJUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class HearthBeatUITest {

    private final int MILISECONDS_TIMEOUT = 700;

    @Rule
    public ActivityTestRule<IntroActivity> mActivityRule = new ActivityTestRule<>(IntroActivity.class);
    @Rule
    public ActivityTestRule<LoginActivity> mLoginActivityRule = new ActivityTestRule<>(LoginActivity.class);

    @Test
    /**
     * Testing all the screens on the application if they are actually there
     */
    public void startTest() {
        Session.clear();
        Spoon.screenshot(mActivityRule.getActivity(), "initial_state");
        threadSleep(MILISECONDS_TIMEOUT);
        onView(withId(R.id.button_register)).check(matches(isDisplayed())).perform(click());
        threadSleep(MILISECONDS_TIMEOUT);
        Spoon.screenshot(mLoginActivityRule.getActivity(), "register_intro");
        onView(withId(R.id.register_with_email)).check(matches(isDisplayed())).perform(click());
        threadSleep(MILISECONDS_TIMEOUT);
        Spoon.screenshot(mLoginActivityRule.getActivity(), "register_detailed");
        onView(withId(R.id.image_left_button)).check(matches(isDisplayed())).perform(click());
        threadSleep(MILISECONDS_TIMEOUT);
        Spoon.screenshot(mLoginActivityRule.getActivity(), "register_intro");
        onView(withId(R.id.image_left_button)).check(matches(isDisplayed())).perform(click());
        threadSleep(MILISECONDS_TIMEOUT);
        Spoon.screenshot(mActivityRule.getActivity(), "initial_state");
        onView(withId(R.id.button_signin)).check(matches(isDisplayed())).perform(click());
        threadSleep(MILISECONDS_TIMEOUT);
        Spoon.screenshot(mLoginActivityRule.getActivity(), "login_intro");
        onView(withId(R.id.sign_in_emal)).check(matches(isDisplayed())).perform(click());
        threadSleep(MILISECONDS_TIMEOUT);
        Spoon.screenshot(mLoginActivityRule.getActivity(), "login_detailed");
    }

}

person Miljan Vulovic    schedule 15.09.2016    source источник
comment
Есть ли у ваших фрагментов анимация? удалить анимацию и отключить анимацию в настройках разработчика.   -  person WenChao    schedule 16.09.2016


Ответы (1)


Во-первых, вам понадобится всего одно правило:

@RunWith(AndroidJUnit4.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class HearthBeatUITest {

    private final int MILISECONDS_TIMEOUT = 300;
    @Rule
    public IntentsTestRule<IntroActivity> mActivityRule = new IntentsTestRule<>(IntroActivity.class);
    private Activity currentActivity;
}

теперь, когда вам нужен контекст для создания скриншотов, вы будете вызывать этот метод:

   private Activity getActivityInstance() {
        getInstrumentation().runOnMainSync(new Runnable() {
            public void run() {
                Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(RESUMED);
                if (resumedActivities.iterator().hasNext()) {
                    currentActivity = (Activity) resumedActivities.iterator().next();
                }
            }
        });

        return currentActivity;
    }

Это даст вам текущую активность, и вы сможете делать скриншоты. К вашему сведению, вы не можете делать скриншоты диалогов.

person Vulovic Vukasin    schedule 22.09.2016