Похоже, что вы используете здесь Absolute XPath
, который по своей сути труднее читать и уступает хрупким тестам, поскольку этот путь можно легко изменить в DOM.
Если вы хотите написатьXPath, который легче читать и менее подвержен взлому, вы можете попробовать использовать относительную нотацию с индикатором //
.Вот пример:
Ваш начальный (абсолютный) XPath:
'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.widget.TextView'
Ваш новый относительный XPath:
//android.widget.ScrollView//android.widget.TextView
Вы также можете смешивать абсолютный и относительный XPath, например:
//android.widget.ScrollView/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup/android.view.ViewGroup[1]/android.view.ViewGroup[1]/android.widget.TextView'
Без полного источника страницы я не могу гарантировать, что этот XPath будет работать.Обозначение //
означает, что следующий элемент будет расположен где угодно на странице.Это означает, что если на странице имеется более одного элемента android.widget.ScrollView
, //android.widget.ScrollView
вернет несколько веб-элементов.
Это также означает, что под android.widget.ScrollView
имеется более одного элемента android.widget.TextView
, //android.widget.ScrollView//android.widget.TextView
найдет несколько элементов TextView
.
Вы можете добавить условия в скобках, например android.widget.ScrollView[@class='someClass']//android.widget.TextView
, чтобы сделать ваши пути более точными.
Если вы разместите более полный источник страницы, яможет помочь вам лучше написать XPath и понять обозначения здесь.