Понимание мобильных жестов
Мобильные жесты — основной способ взаимодействия пользователей с сенсорными устройствами. В отличие от кликов на десктопе, жесты включают непрерывное движение, переменное давление, несколько пальцев и пространственный контекст.
Типы жестов и аспекты тестирования
Жесты касания (Tap)
| Жест | Описание | Фокус тестирования |
|---|---|---|
| Single tap | Быстрое касание и отпускание | Отзывчивость, точность попадания |
| Double tap | Два быстрых касания | Чувствительность таймингов |
| Long press | Касание и удержание | Порог длительности, контекстное меню |
Жесты свайпа
| Жест | Применение | Фокус тестирования |
|---|---|---|
| Горизонтальный свайп | Навигация по страницам, удаление | Определение направления, порог расстояния |
| Вертикальный свайп | Прокрутка, pull-to-refresh | Производительность прокрутки |
| Edge swipe | Системная навигация (назад) | Конфликт с жестами приложения |
Мультитач-жесты
| Жест | Применение | Фокус тестирования |
|---|---|---|
| Pinch | Увеличение/уменьшение | Пределы масштаба, производительность |
| Rotate | Поворот изображения | Точность определения угла |
| Свайп двумя пальцами | Навигация по картам | Взаимодействие с жестами одного пальца |
Тестирование свайп-действий
Свайп-действия (swipe-to-delete, swipe-to-archive) распространены, но часто содержат баги.
Сценарии для swipe-to-delete
- Частичный свайп: Свайп наполовину и отпустить — элемент возвращается?
- Полный свайп: Свайп до конца — действие подтверждается?
- Быстрый свайп: Быстрый flick — регистрируется как свайп или скролл?
- Медленный свайп: Намеренно медленный — визуальная обратная связь следует за пальцем?
- Диагональный свайп: Свайп под углом 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) должны работать для жестовых функций