Тест эспрессо жестом не проходит на эмуляторе Android, но проходит на реальном устройстве - PullRequest
0 голосов
/ 04 декабря 2018

Я давно использую свой телефон для запуска инструментированных тестов Android.Сегодня я думал, что переключусь на эмулятор, но обнаружил, что некоторые тесты, которые проходят на моем телефоне, не проходят на эмуляторе - потому что жест смахивания не делает то же самое на эмуляторе, что и на моем телефоне (XperiaZ5 Compact, Android 7.1.1).Я также использую ту же версию Android в эмуляторе.

При запуске на эмуляторе метод ViewActions.swipeLeft (), кажется, запускает свайп слишком далеко вправо и вызывает ту маленькую волнистую анимацию, которая возникает, когдаВы перетаскиваете от самого края экрана в конце ViewPager.Смахивание работает полностью нормально на телефоне и эмуляторе, когда сделано вручную.Следовательно, я думаю, что это должно быть как-то связано с эспрессо.Я могу представить, как, возможно, проблема может заключаться в прослушивателе смахивания в RecyclerView внутри просматриваемого с возможностью считывания просмотра.Но он отлично работает на эмуляторе и телефоне, и тесты проходят на моем телефоне.

Это мой код обработки, который добавляется в RecyclerView на вкладке ViewPager (на последней вкладке).

fun attachSingleSwipeActionToRecyclerView(
    direction: Int = ItemTouchHelper.LEFT,
    recyclerView: RecyclerView,
    swipeAction: RecyclerView.ViewHolder.() -> Unit
): ItemTouchHelper {
    val simpleCallback = object : ItemTouchHelper.SimpleCallback(0, direction) {
        override fun onMove(
            recyclerView: RecyclerView,
            viewHolder: RecyclerView.ViewHolder,
            target: RecyclerView.ViewHolder
        ): Boolean {
            return false
        }

        override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
            swipeAction(viewHolder)
        }
    }

    val itemTouchHelper = ItemTouchHelper(simpleCallback)
    itemTouchHelper.attachToRecyclerView(recyclerView)
    return itemTouchHelper
}

В моем тесте я просто вызываю ViewActions.swipeLeft () для первого элемента RecyclerView на экране.

Я пытался создать свою собственную начальную точку для смазывания эспрессо, даже когда я его сделалначало в самом центре, а не в дальнем правом углу, ничего не изменилось, включая конец волновой анимации ViewPager

GeneralSwipeAction(
    Swipe.FAST,
    GeneralLocation.CENTER,
    GeneralLocation.CENTER_LEFT,
    Press.FINGER
)

Что может отличаться в эмуляторе, который приводит к тому, что смахивание эспрессо действует иначе, чем на реальномустройство

1 Ответ

0 голосов
/ 04 декабря 2018

Иногда GeneralSwipeAction может становиться ненадежным, поскольку его расчет зависит от размера экрана или плотности, поэтому он может не подходить для ViewPager в вашем случае.Вместо этого вы можете попробовать прокрутить с помощью ViewPagerActions :

// Moves ViewPager to the right be one page.
onView(your_view_pager).perform(ViewPagerActions.scrollRight());

// Moves ViewPager to a specific page.
onView(your_view_pager).perform(ViewPagerActions.scrollToPage(page_number));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...