0

Я тестирую свое приложение, но имею проблему с DatePicker. Все, что мне нужно - это прокрутить вниз, пока не появится другой месяц (поиск конкретной даты).Android UIautomator swiping ViewAnimator

Screenshot

Структура немного сложнее, но я сделал его работу с помощью

new UiScrollable(new UiSelector().className(android.widget.ViewAnimator.class.getName())).scrollTextIntoView("November") 

Проблема, даже если вид прокрутки, это

1) скроллинг в заблуждении направление (вверх)

2) не останавливается, хотя ноябрь уже прошел (даже ноябрь 2017 года или ноябрь 2015 года)

Как создать это условие. После того, как все виды будут названы уникальным способом, чтобы проверить структуру, можно было бы найти «01 ноября 2016 года».

Structure

ответ

0

Хорошо, похоже, я нашел решение, которое работает более или менее нормально:

Сначала я пытался использовать условия суб, поскольку UiSelector может иметь определение ребенка. Но это оказалось трудным, поскольку внутри ViewAnimator есть (единственный) дочерний объект ListView, содержащий представление «календарный месяц». Так что найти детское видение там с описанием «15 декабря ...» было сложно.

Новое решение делает это.

  1. в то время как (пытается < MAX_TRIES)
  2. если элемент с описанием "15 декабря ..." существует -> нажать и петли выхода
  3. прокрутки вниз 1 элемент (в следующем месяце) -> пытается ++

Повторяю это до тех пор, пока элемент не будет найден (и не щелкнут) или не будут исчерпаны максимальные попытки прокрутки. После прокрутки я позволяю устройству ждать 1 секунду. Это полезно, так как swiping называется асинхронно и будет продолжать прокручивать на мгновение при обработке щелчка. Это не показало проблемы (поскольку клик уже щелкнул), но все же может быть запутанным.

Надеюсь, это поможет! Не стесняйтесь размещать лучшее решение, если найдете его.

int tries = 0; 
while (tries < MAX_TRIES) { 
    UiObject2 dateField = mDevice.findObject(
      By.descStartsWith(SEARCH_DATE)); 
     if (dateField != null) { 
      dateField.click(); 
      break; 
     } else { 
      tries ++; 
      new UiScrollable(new UiSelector(). 
        className(android.widget.ViewAnimator.class.getName())). 
        scrollToEnd(1); 
      mDevice.wait(Until.findObject(By.descStartsWith(SEARCH_DATE)), 1000); 
     } 
}