Appium - Xpath, чтобы заставить прямых детей не работать на Android - PullRequest
0 голосов
/ 04 марта 2019

Почему-то я не могу получить всех прямых потомков элемента на Android.По-видимому, XPath не работает правильно при поиске подэлементов в элементе или область XPath неправильно реализована в Appium.

parentElement.findElements(By.xpath(...))

Что я пробовал:

*
./*
.//*
.//child::*
./child::*
//*
//child::*

Мои результатылибо ноль, либо все узлы (даже вне родительского элемента), либо все потомки.

Единственное, что сработало для меня, это:

.//*[@resource-id='RESOURCE-ID-OF-PARENT']/child::*

Но это очень плохой обходной путь, потому чтоможет быть несколько элементов с одинаковым идентификатором ресурсов (к вашему сведению, я кодирую оболочку на основе Appium)

Я попытался найти все ответы здесь, но не смог найти какое-либо рабочее решение.

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

Я нашел какой-то обходной путь:

1) Напишите функцию, которая сравнивает два элемента.Поскольку предоставленный метод equals не работает для нативных элементов (Android, iOS), должна быть написана собственная реализация.Я сравниваю наиболее важные атрибуты, такие как класс, идентификатор ресурса и описание контента, а также размер, местоположение и границы.Это должно работать в 99% случаев, если только не присутствуют два одинаковых перекрывающихся элемента.

2) Запрос xpath родительского элемента (findElementsByXpath) с наиболее точными атрибутами - tagName, class, ID ресурса и contentDescription,В большинстве случаев будет только один элемент, но если их больше, просмотрите список и используйте сравнение на основе функции равенства.

3) Отметьте индексы элементов в списке и всякий раз, когда совпадениенайдено, выполните другой запрос в следующем формате:

(//tagName[@class=... and @resource-id= ...etc...])[index]/child::*

Помните, что индексирование в Xpath начинается с 1. В списке результатов указаны фактические дочерние элементы родительского элемента.

Временное решение несамый быстрый, но все же лучше, чем ничего.

...