Как использовать XPath с сервисом специальных возможностей Android для взаимодействия с элементом?

#android #xpath #ui-automation #accessibilityservice #android-accessibility

Вопрос:

Есть несколько статей/учебных пособий по использованию службы специальных возможностей на Android для поиска элементов по идентификатору/тексту, но нет ни одной (которую я мог бы найти), которая использовала бы XPath.

Насколько я понимаю, служба специальных возможностей сделает снимок текущей иерархии пользовательского интерфейса с соответствующим атрибутом, а затем выполнит поиск по идентификатору/тексту.

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

Android поддерживает javax.XPath https://android-doc.github.io/reference/javax/xml/xpath/package-summary.html но я не смог найти ни одного образца, чтобы примерить его.

Любая ссылка/ресурс/руководство будут оценены по достоинству. Использование внешних библиотек также нормально, если предположить, что это не снижает производительность. Идея состоит в том, чтобы щелкнуть элемент (у меня есть XPath для него), как только он будет увеличен/отображен в приложениях, использующих какой-либо элемент webview.

Комментарии:

1. Насколько я понимаю, XPath предназначен для анализа XML-данных, и если вы используете службу специальных возможностей, вы имеете дело с представлением иерархии представлений Android (в виде дерева узлов). Также Java/Kotlin listview/recycleviews динамичны и сохраняют только 1 или 2 дополнительных элемента по соображениям производительности, поэтому они на самом деле не существуют за пределами экрана.

2. AFAIK почти столько же, сколько может занимать размер экрана, представления хранятся в кэше. Для recyclerview его можно настроить developer.android.com/reference/kotlin/androidx/recyclerview/… Тем не менее, приложение, для которого я его хочу, наверняка будет доступно за пределами экрана, но доступно. Я видел собственный код, который отлично работает. Я использовал некоторые другие приложения (Tasker), которые предлагают функцию доступности и поиска элементов по тексту или около того. Они также находят его, но при попытке щелкнуть координаты, это не удается, потому что возвращаемые координаты являются виртуальными/вне экрана.

3. Другие варианты, которые я нашел — Селен, Аппиум, UIAutomator — предназначены для тестирования варианта использования. Основываясь на моих исследованиях до сих пор, они не могут быть использованы в файле APK. Я был бы в порядке, запустив любой файл сценария (возможно, как скрипт python, как в файле ресурсов в самом apk, при условии, что есть способы их запуска).