UIAutomator нажмите на просмотр списка на основе индекса

Я пытаюсь реализовать тестовый набор UIAutomator с помощью общего метода для выполнения щелчка по элементу ListView (независимо от типа группы просмотра, содержащей элемент списка).

В настоящее время у меня есть следующий код, но он продолжает нажимать на первый элемент.

public void clickListViewItem(int index) throws UiObjectNotFoundException {
   UiObject listview = new UiObject(new UiSelector().className("android.widget.ListView"));
   if(index <= listview.getChildCount()){
      listview.getChild(new UiSelector().index(index)).click();
   }else{
       throw new UIObjectNotFoundException("Index is greater than listSize");
   }
}

1 ответ

Решение

Я получил его для работы со следующим кодом, он основан на кликабельном атрибуте UISelector:

listview.getChild(new UiSelector().clickable(true).index(index)).click();

На странице разработчика реализован аналогичный сценарий, который можно найти здесь, хотя здесь предполагается, что в дочернем элементе существует некоторая идентифицирующая функция, с помощью которой можно выбрать (как в примере ниже, строка "Приложения"):

Если найдено более одного совпадающего элемента, первый соответствующий элемент в иерархии макета возвращается как целевой UiObject. При создании UiSelector вы можете объединить несколько свойств в цепочку для уточнения поиска. Если соответствующий элемент пользовательского интерфейса не найден, выдается исключение UiAutomatorObjectNotFoundException.

Вы можете использовать метод childSelector() для вложения нескольких экземпляров UiSelector. Например, в следующем примере кода показано, как ваш тест может указывать поиск, чтобы найти первый ListView в текущем отображаемом пользовательском интерфейсе, а затем выполнять поиск в этом ListView, чтобы найти элемент пользовательского интерфейса с текстовым свойством Apps.

val appItem: UiObject = device.findObject(
        UiSelector().className("android.widget.ListView")
                .instance(0)
                .childSelector(
                        UiSelector().text("Apps")
                )
)
Другие вопросы по тегам