Драйвер appium выдает исключение при использовании регулярных выражений? - PullRequest
0 голосов
/ 24 марта 2020

Я использую appium для автоматизации пользовательского интерфейса. У меня проблемы с регулярным выражением;
WebDriverException с кодом, и элемент полностью существует:
phonedriver.findElement(By.xpath("//android.view.View[matches(@text,'sometext\\d+')]"))

Вот сообщение об исключении:

An unknown server-side error occurred while processing the command. Original error: java.lang.IllegalStateException: Unable to evaluate expression. See cause

Вот моя информация о возможностях:

Capabilities {appActivity: com.tencent.mm.ui.LauncherUI, appPackage: com.tencent.mm, deviceName: 127.0.0.1:62001, fastReset: false, fullReset: false, newCommandTimeout: 999999, noReset: true, platformName: Android, platformVersion: 5.1.1, resetKeyboard: true, udid: 127.0.0.1:62001}

Вот мой pom:

<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>7.3.0</version>

<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>

1 Ответ

1 голос
/ 24 марта 2020

У вас есть две проблемы:

  1. matches() доступно только в XPath 2.0, но не 1.0, см .: http://www.w3.org/TR/xquery-operators/#func - совпадения

Selenium, а также браузеры Chrome и Firefox используют Xpath 1.0. Вы можете попробовать любые функции Xpath 2.0 в JS -контроллере браузера, и он покажет вам ошибку. например: $x("lower-case('ABC')")

для получения текста используйте . или text() например $x("//*[contains(text(),'bob')]")

В качестве решения вашей проблемы вы можете получить все элементы, содержащие ваш текст "//android.view.View[contans(text(),'sometext')]"), а затем l oop через них в JAVA, чтобы найти правильный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...