android - 需要使用 appium 识别 android 元素的 xpath

标签 android xpath appium android-uiautomator

我正在使用 Appium 框架测试我的 Android 应用程序。 我有一个 Android 屏幕,它的 View 没有 ID(而且我不想添加...),所以我想使用 Xpath。

这是 UI Automator Viewer 中的屏幕样子: enter image description here

我想得到所有的相关布局(红色标记 - 十六项)

我尝试了以下方法:

 List<WebElement> webElementslist =
 mAppDriver.findElementsByXPath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ViewAnimator[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[2]");

但是我没有得到任何元素。

我在网上搜索并找到了下一个 xpath 教程,尝试了更多选项,但还是没有成功。

http://www.zvon.org/comp/r/tut-XPath_1.html#intro

http://www.w3.org/TR/xpath/

非常感谢任何帮助。

最佳答案

现在,Android 上的 XPath 存在一些令人讨厌的错误,这些错误可以解释您所看到的行为。它们计划在 1.3.1 release 中修复

  1. 您不能按根节点搜索.. link
    • 不幸的是,这意味着冗长的 xpath 可能是成功的 xpath(双关语)
  2. 当你只有 16 个元素时,有时你会得到 240 个元素 link

理想情况下,您可以查找所有 16 个 RelativeLayoutandroid.widget.LinearLayout 父级的资源 ID,然后执行如下操作:

//android.widget.LinearLayout[@resource-id="foo"]/android.widget.RelativeLayout

您的详细解决方案不起作用,因为您将其中一种布局的位置设置为 [2]

这里是固定的:

//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ViewAnimator[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.RelativeLayout

....拜托,请使用第一个解决方案。

我正在使用 UiAutomator 定位器策略为您的问题寻找解决方案,但还没有答案(因为 .fromChild().fromParent() 好像坏了)

关于android - 需要使用 appium 识别 android 元素的 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159603/

相关文章:

安卓数据库索引

java - OpenCV用于在android中处理位图图像

c# - 尝试在 Appium 中获取 EditText 实例时,此 session 异常不支持定位器策略 'css selector' - C#

java - 使用 testng 检测 @afterMethod 中跳过的测试

android - 为什么我不能从 AsyncTask 访问全局变量?

Android API 31 - WorkManager - PendingIntent - 标记 IMMUTABLE 错误

java - 避免在 Java 中使用 XPath 重复实例化 InputSource

javascript - 嵌套 <img> 标签时查找元素包含文本

xml - 在PowerShell中按属性对XML元素进行分组的简单方法

java - 如何从坐标中获取文本属性?