Эспрессо-тест длится вечно при повороте ImageView - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два похожих ImageView с. Я решил не создавать разные рисунки для второго ImageView и вращать его, используя те же рисунки.

<ImageView
    android:id="@+id/rightTurn_imageView"
    android:layout_width="@dimen/width_imageViews_feedback_area_info"
    android:layout_height="@dimen/height_imageViews_feedback_area_info"
    android:layout_marginLeft="@dimen/margin_before_imageViews_feedback_area_info"
    android:layout_marginStart="@dimen/margin_before_imageViews_feedback_area_info"
    android:layout_marginTop="@dimen/margin_above_imageViews_feedback_area_info"
    android:scaleType="fitCenter"
    app:layout_constraintStart_toEndOf="@+id/emergency_imageView"
    app:layout_constraintTop_toTopOf="@+id/feedback_area_info"
    android:rotation="180"/> <! -- The line where the problem occurs -->

Я пытаюсь проверить свой пользовательский интерфейс, используя Espresso. Я пытаюсь увидеть, появляется ли тост и функция Test работает вечно.

@Test
fun showToastOnClickRightDirectionLight() {
    onView(withId(R.id.rightTurn_imageView))
        .perform(click())
    onView(
        withText(
            containsString(
                activityRule.activity.resources.getString(
                    R.string.long_click_info
                )
            )
        )
    )
        .inRoot(RootMatchers.withDecorView(not(activityRule.activity.window.decorView)))
        .check(matches(isDisplayed()))
}

Всякий раз, когда я удаляю линию вращения из xml (android:rotation="180"), тест завершается успешно.
Когда я тестирую пользовательский интерфейс, пальцем (!) все работает как надо, даже если он повернут или нет.

Есть ли обходной путь для этой проблемы, или я должен создать другой чертеж?

Кроме того, кто-нибудь может объяснить, почему это происходит? Что не так, когда rotating?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Кажется, setRotation, возможно, повлияло на вычисление координат вида на экране. Таким образом, вместо этого вы можете попробовать выполнить пользовательское действие:

public static ViewAction forceClick() {
    return new ViewAction() {
        @Override public Matcher<View> getConstraints() {
            return allOf(isClickable(), isEnabled(), isDisplayed());
        }

        @Override public String getDescription() {
            return "force click";
        }

        @Override public void perform(UiController uiController, View view) {
            view.performClick();
            uiController.loopMainThreadUntilIdle();
        }
    };
}

Затем используйте его для кнопки или любого представления с прослушивателем щелчков:

onView(withId(R.id.move_up)).perform(forceClick());
0 голосов
/ 28 августа 2018

посмотрите на ссылку ниже раздела 2.3 -> Device settings:

Рекомендуется включить анимацию на устройстве Android, которое используется для тестирования. Анимации могут запутать проверку эспрессо для Идеальные ресурсы.

http://www.vogella.com/tutorials/AndroidTestingEspresso/article.html

...