android - 在原生 Android 应用程序中,所有元素都应该具有唯一的类名吗?
问题描述
我使用 UI 自动化查看器来获取类和 Appium 驱动程序状态的 xpath 选择器(正确):*** Capybara::Ambiguous Exception: Ambiguous match, found 4 elements matching visible xpath "//android.widget.Button"
元素有不同的text
属性,所以我可以通过这个属性来识别,但是我想如果应用程序有多种语言可用,事情会变得复杂。
下面的文章似乎暗示,因为元素可以共享类名,不建议仅按类定位: https ://seleniumbycharan.com/2016/08/07/finding-elements-using-locators-in-appium/
一种解决方案是形成这些元素的数组并简单地引用索引。另一种是使用 text 属性。我不喜欢这两种解决方案。
我是否应该建议开发人员分配一些 ID 或只是不同的类名,或者是本机应用程序开发中常见的相同类名链,这绝不是一种反模式?
解决方案
当我在 Appium Inspector 中启动该应用程序时,它说:“不建议使用 XPath 定位器,这会导致脆弱的测试。请您的开发团队提供独特的可访问性定位器!” 理想情况下,它应该自动生成一个简短且唯一的选择器。
对于 Android,要么 要么resource-id
不content-desc
应该为空,如果可能的话应该包含唯一值。
对于 iOS,它是accessibility-id
或name
。
基于:http ://appium.io/docs/en/commands/element/find-elements/
推荐阅读
- sql - 领先/落后甲骨文
- google-cloud-platform - 一种利用Meanstack的GCP实现大容量数据处理的方法
- database - Laravel项目中两个ID相同的表
- json - 将json解组为结构时如何设置默认值
- android - 如何在没有工具中断的情况下打开应用程序的 sqlite 数据库?
- javascript - 在不使用表单 Angular 6 的情况下检查在 html 中修改的输入
- php - 什么会损坏我使用 base64 上传的所有文件?
- javascript - 当值为空/未定义时,排序函数会中断(React,javascript)
- spring - 如何自动连接接受两个字符串的类的构造函数
- docker - 'system' 不是 docker 命令。见“码头工人--帮助”