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") ) )