Понимание мобильных жестов

Мобильные жесты — основной способ взаимодействия пользователей с сенсорными устройствами. В отличие от кликов на десктопе, жесты включают непрерывное движение, переменное давление, несколько пальцев и пространственный контекст.

Типы жестов и аспекты тестирования

Жесты касания (Tap)

ЖестОписаниеФокус тестирования
Single tapБыстрое касание и отпусканиеОтзывчивость, точность попадания
Double tapДва быстрых касанияЧувствительность таймингов
Long pressКасание и удержаниеПорог длительности, контекстное меню

Жесты свайпа

ЖестПрименениеФокус тестирования
Горизонтальный свайпНавигация по страницам, удалениеОпределение направления, порог расстояния
Вертикальный свайпПрокрутка, pull-to-refreshПроизводительность прокрутки
Edge swipeСистемная навигация (назад)Конфликт с жестами приложения

Мультитач-жесты

ЖестПрименениеФокус тестирования
PinchУвеличение/уменьшениеПределы масштаба, производительность
RotateПоворот изображенияТочность определения угла
Свайп двумя пальцамиНавигация по картамВзаимодействие с жестами одного пальца

Тестирование свайп-действий

Свайп-действия (swipe-to-delete, swipe-to-archive) распространены, но часто содержат баги.

Сценарии для swipe-to-delete

  1. Частичный свайп: Свайп наполовину и отпустить — элемент возвращается?
  2. Полный свайп: Свайп до конца — действие подтверждается?
  3. Быстрый свайп: Быстрый flick — регистрируется как свайп или скролл?
  4. Медленный свайп: Намеренно медленный — визуальная обратная связь следует за пальцем?
  5. Диагональный свайп: Свайп под углом 30 градусов — регистрируется как горизонтальный или вертикальный?

Конфликты Edge Swipe

Жестовая навигация Android использует edge swipes для системных действий:

  • Edge swipe слева = Навигация назад
  • Edge swipe снизу = Home / переключатель приложений

Тестирование Pull-to-Refresh

СценарийОжидаемое поведениеТипичный баг
Pull вниз в началеАнимация обновления + перезагрузкаКонфликт со скроллом
Pull во время загрузкиПоставить в очередь или игнорироватьДвойной запрос
Pull без сетиПоказать ошибку офлайнПустой экран

Продвинутое тестирование жестов

Конфликты gesture recognizer-ов

Когда несколько gesture recognizer-ов слушают одну и ту же view, возникают конфликты. Определение tap vs double-tap вводит задержку 300мс.

Упражнение: Набор тестов для жестов

Сценарий: Разработайте набор тестов для фотогалереи с поддержкой: свайп влево/вправо для навигации, pinch to zoom, double-tap для 2x, long press для шаринга, свайп вниз для закрытия.

Назовите 3 тест-кейса для каждого жеста.

Решение

Свайп-навигация: 1) Свайп влево с последнего фото; 2) Быстрый свайп через несколько фото; 3) Свайп при зуме

Pinch to zoom: 1) Зум до максимума; 2) Zoom out за пределы исходного размера; 3) Pinch с панорамированием

Double tap: 1) Double tap в углу; 2) Double tap уже при 2x; 3) Быстрый double tap после single tap

Long press: 1) Long press ровно на пороговое время; 2) Long press и сдвиг пальца; 3) Long press при зуме

Свайп вниз: 1) Свайп вниз при зуме; 2) Частичный свайп и отпускание; 3) Свайп вниз во время перехода

Советы из продакшен-опыта

Совет 1: Записывайте сбои жестов на видео. Жестовые баги очень сложно воспроизвести по текстовым шагам.

Совет 2: Тестируйте с защитными плёнками. Многие пользователи используют защитные стёкла, снижающие чувствительность экрана.

Совет 3: Тестируйте жесты после смены ориентации. Gesture recognizer-ы могут сломаться после поворота.

Ключевые выводы

  • Мобильные жесты включают тапы, свайпы, pinch, rotate и мультитач
  • Конфликты edge swipe с системной навигацией Android — частый источник багов
  • Свайп-действия нуждаются в тестировании частичных свайпов и диагонального движения
  • Альтернативы доступности (VoiceOver, TalkBack) должны работать для жестовых функций