UiAutomator лучше рассматривать не как замену привычному поиску, а как способ расширить возможности. Выражения UiSelector выстраиваются в цепочку,
все функции возвращают UiSelector.
Из интересных возможностей UiAutomator имеет встроенные методы для работы с scrollable элементами (позволяет выполнять действия похожие на SwipeIntoView из js)
var driver = instance.DroidInstance.AppiumDriver;
var rotateDate = 3;
var rotateMonth = 2;
var rotateYear = 3;
var res = driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).flingToBeginning(" + rotateDate + ");");
if (res == null)
throw new Exception();
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(1)).flingToBeginning(" + rotateMonth + ");");
driver.FindElementByUiAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(2)).flingToBeginning(" + rotateYear + ");");
Посмотреть вложение 109094
Да, конечно, поиск с учетом вложенности возможен. Для примера: ищем элемент содержащий текст
set
, поиск сужен наличием в пути класса
RecyclerView
:
var driver = instance.DroidInstance.AppiumDriver;
var element = driver.FindElementByUiAutomator("new UiSelector().className(\"android.support.v7.widget.RecyclerView\").childSelector(new UiSelector().textContains(\"set\"))");
if (element == null)
throw new Exception("Not found");
return element.GetAttribute("text");
Поиск вернет
Set screen lock
, а не
Settings
Посмотреть вложение 109093