我正在使用 React Native 开发一个需要端到端测试的应用。
我有 Selenium WebDriver 背景,在我看来,与 WebDriver 相比,Appium 中的元素查找可能非常尴尬,因为 native 组件只有 ID 和一个非用户定义的类。
- 有没有办法向元素添加某种元数据,以便于查找?
假设我有一个表格,其中的单元格内包含复杂的元素,我需要先找到正确的行,然后是单元格,然后再找到要在单元格内操作的正确组件。
理想情况下,我希望能够通过搜索“myTargetRows”之类的内容来枚举行。那会给我一个行列表。
- 如果我理解正确的话,在 native 应用程序中没有两个组件可以有相同的 ID,所以我不能那样使用 ID,对吧? (即,对多个行组件使用相同的 ID“myTargetRows”)。
- 如果不是,我是否应该使用编号 ID,如“myTargetRow0”、“myTargetRow1”等,然后使用 XPath 部分匹配 ID?
- 没有更好的方法吗?
- 如果我可以做类似的事情,我是否可以将那些
findElement
调用链接起来以找到我想要的正确嵌套元素?
P.s.:我不想在我的定位器中对确切的组件层次结构进行硬编码,以避免在我移动 View 中的任何内容时使它们失效,因此那些点击式解决方案将无济于事。
附言2:解决方案必须同时适用于 Android 和 iOS,即使我需要自己为它实现某种抽象。
最佳答案
您应该使用 View 的 accessibilityLabel
属性。
accessibilityLabel
PropTypes.nodeOverrides the text that's read by the screen reader when the user interacts with the element. By default, the label is constructed by traversing all the children and accumulating all the Text nodes separated by space.
可以找到更多信息 here
对于唯一 ID,假设您有一个 ListView 和 100 行。您可以为 accessibilityLabel
组合 rowId 和静态文本。
例如:0_MyCustomRow、1_MyCustomRow
关于android - 使用 Appium 进行强大的 React Native 元素查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529648/