Итак, быстрый ответ на этот вопрос: нет, нового пути нет.Это, насколько я понимаю, потому что UIAutomator2 не позволяет элементам, которых нет на экране, найти драйвером Appium.Я считаю, что UIAutomator2 необходим для автоматизации устройств на Android версии 7 и выше.
Это означает, что невозможно определить, в каком направлении находится элемент, когда он находится за пределами экрана.Поэтому, если у кого-то есть решение этого вопроса, я буду рад его услышать.
Теперь, в зависимости от того, какое приложение вы автоматизируете, можно подделать считывание элемента, если вы знаете, в каком направлении оно находится.Например, если ваше приложение прокручивает только вверх и вниз (как и многие приложения), то, если вы знаете, находится ли элемент ниже или выше вашей текущей позиции, вы можете провести по нему пальцем.Это можно сделать с помощью цикла while:
while(elementNotFound) {
if(findElement(byLocator)) {
elementNotFound = !elementNotFound;
}
else {
// This is where you would swipe in the direction of where the element is
}
}
Новый способ сканирования - использование класса TouchAction
.Например, вы можете сделать:
(new TouchAction<>(driver)).press(PointOption.point(startX, position.startY)
.waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
.moveTo(PointOption.point(endX, endY))
.release()
.perform();
В качестве альтернативы вы можете использовать устаревший метод swipeTo с типом привода UIAutomator (не UIAutomator2).Опять же, насколько я понимаю, это будет работать только для устройств на более низких версиях Android SDK.
Извините, если это не даст вам ответа, который вы ищете, но, надеюсь, по крайней мере, даст вам способ найти свой элемент.