在 Appium 中找不到带有 Xpath 的元素

Cannot find an element with Xpath in Appium

我是 Appium 新手。对不起,如果问题重复,但我没有找到解决方案。

我有一个问题 - 我无法使用 Xpath 定位元素,但我可以使用 ID 定位器定位它。请参阅所附的屏幕截图。该问题不仅针对此元素重现,而且针对所有元素重现。看来Xpath根本不行

我正在使用 Appium 7.3.0(尝试过不同的版本),通过设置 UIAutomator2 能力 ("automationName", "UiAutomator2"), Android 8.1 在模拟器上。

我尝试了以下 Xpath 选项:

  1. 来自AndroidDriver级别:
driver.findElement (By.xpath ("//*[@id='read_indicator']"));
driver.findElement (By.xpath ("//android.widget.ImageView[@id='read_indicator']"));
  1. 来自消息元素本身:
MobileElement message = driver.findElement (By.id ("body_bubble"));
message.findElement (By.xpath (".//*[@id='read_indicator']"));
message.findElement (By.xpath (".//android.widget.ImageView[@id='read_indicator']"));
  1. 与上述方法相同,但从 ID 为 footer_delivery_status 且直接包含所需元素的框架布局开始。

但我可以使用 ID 定位器毫无困难地找到该元素:

driver.findElement (By.id ("read_indicator"));
message.findElement (By.id ("read_indicator"));

此外,contains()ends-with()等函数也不起作用。引发以下异常:

org.openqa.selenium.InvalidSelectorException: java.lang.IllegalArgumentException: Unable to compile '//*[contains(@id,'read_indicator')'

此外,我在需要的地方使用了 implicitWaitThread.sleep,因此元素应该存在。

请告诉我为什么我在使用 Xpath 时遇到这样的问题。

尝试以下方法xpath

//*[contains(@resource-id, 'read_indicator')]

或者:

//*[contains(@content-desc, 'Message read')]