android - 针对不同的 Android 操作系统版本显示不同的 xpath
问题描述
我正在开发原生 Android 应用程序。我需要自动化该过程,为此我使用 Appium 来获取元素信息,例如 xpaths 和 id 等。我的目标是在所有 android 版本的每个 android 设备上自动化该过程,但我面临一个问题。我正在使用两个 Android 版本,一个是 6.0.1,另一个是 9.0,我的问题是当我连接 Android 6.0.1 时,它会显示元素的 xpath,例如
xpath = "//android.widget.EditText[@text='username']"
对于同一领域,在 Android 9.0 版本中显示:
/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.RelativeLayout/android.widget.LinearLayout/android.webkit.WebView/android.webkit.WebView/android.view.View[5]/android.view.View[2]/android.view.View/android.view.View/android.view.View[2]/android.widget.EditText
这很难使用。
为什么两个 Android 版本上的 xpath 有如此大的差异。我还在 Appium 中发现了一些不寻常的行为,因为输入字段中的“提示”在 Android 6.0.1 中可用,但对于同一字段,“提示”在 android 9.0 中不可用。
解决方案
使用 ID、类、名称或其他特定属性标识您的元素。
XPath 应该只作为最后的手段,或者如果选择器非常复杂和/或包含动态数据。但即便如此,您通常也可以找出更强大的选择器。
推荐阅读
- python - 为什么我修复格式错误的 URL 的函数会返回格式错误的 URL?
- laravel - php 8.0.1 中不推荐使用 ReflectionParameter::getClass() 方法
- java - 如何在 Android Studio 中使用 TextInputLayout
- html - 如何给 td 一个行跨度
- bash - `bash` 正在泄漏内存,我在哪里报告它?
- reactjs - 在 useEffect 挂钩中使用对象属性而不是对象作为依赖项是不好的做法吗?
- bootstrap-5 - Bootstrap 5:如何添加 $font-family-serif 变量
- typescript - 带有 Expo 和 Typescript 的 NPM 工作区
- android - 代码已粘贴,但它在 Android SSH 客户端上执行了相反的行顺序
- vba - VBA 用户表单组合框是 Outlook 联系人姓名列表和命令按钮,用于在选择姓名时搜索匹配的联系人家庭电话号码