首页 > 解决方案 > 在 Appium 中找不到带有 Xpath 的元素

问题描述

我是 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. 与上述方法相同,但从 IDfooter_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')'

另外,我正在使用它implicitWait并且Thread.sleep在需要它的地方,所以元素应该存在。

请告知为什么我对 Xpath 有这样的问题。

在此处输入图像描述

标签: javaandroidxpathappiumandroid-uiautomator

解决方案


尝试以下操作xpath

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

或者:

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

推荐阅读