я не могу понять синтаксис, как определить xpath на языке машинописного текста - PullRequest
0 голосов
/ 25 сентября 2019
console.log(client.findElement(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'));

1 Ответ

0 голосов
/ 25 сентября 2019

Похоже, что вы используете здесь 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 и понять обозначения здесь.

...