Эспрессо: как проверить возможность рисования фона ImageButton - PullRequest
0 голосов
/ 26 мая 2020

Мне казалось, что я достиг дна, пытаясь найти решение, как я могу проверить, что мой ImageButton имеет определенный фон, который можно рисовать в моем тесте Espresso. Но я продолжаю получать сообщение об ошибке, которое я вставил ниже. Я предоставил как можно больше кода, который я считал подходящим.

ImageButton

            <ImageButton
            android:id="@+id/image_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/ic_background_selector"
            android:clickable="true"
            android:src="@drawable/background" />

Selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_background_error" android:state_activated="true" />
<item android:drawable="@drawable/ic_background_okay" android:state_activated="false" />
</selector>

Custom Matcher:

fun matchColor(expectedId: Int): Matcher<View> {
return object : BoundedMatcher<View, ImageButton>(ImageButton::class.java) {
    override fun describeTo(description: Description?) {
        description?.appendText("with text color: ")
        description?.appendValue(expectedId)
    }

    override fun matchesSafely(item: ImageButton?): Boolean {
        return item?.context?.resources?.getDrawable(expectedId)?.constantState == item?.drawable?.constantState
    }

}

}

Тест:

        onView(withId(R.id.image_button)).check(matches(matchColor(R.drawable.ic_background_okay)))

Я получаю следующую ошибку:

androidx.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'with text 
color: <2131165331>' doesn't match the selected view. Expected: with text color: 
<2131165331>Got: "AppCompatImageButton{id=2131296363, ...}

1 Ответ

0 голосов
/ 26 мая 2020

Я бы посоветовал вам устанавливать теги всякий раз, когда вы меняете изображение, и сравнивать теги вместо самих изображений. Если вы не устанавливаете теги и не можете понять, как написать собственный сопоставитель, вы можете найти свою кнопку изображения через Activity и использовать тот же logi c, который вы используете в своем приложении, чтобы сравнить, какое изображение присутствует прямо сейчас.

 @Test
    fun test_image_button_compare_success() {
        val activity = getActivityInstance();
        val imageButton= activity?.findViewById((R.id.image_button)) as ImageButton
        assertTrue(1==1) //Replace here with your control using image button
    }

Получение экземпляра действия: взято отсюда

private Activity getActivityInstance () {final Activity [] currentActivity = {null};

getInstrumentation().runOnMainSync(new Runnable(){
  public void run(){
    Collection<Activity> resumedActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
    Iterator<Activity> it = resumedActivity.iterator();
    currentActivity[0] = it.next();
  }
});

return currentActivity[0];

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...