android - 使用 Appium 进行强大的 React Native 元素查找

标签 android ios react-native appium

我正在使用 React Native 开发一个需要端到端测试的应用。

我有 Selenium WebDriver 背景,在我看来,与 WebDriver 相比,Appium 中的元素查找可能非常尴尬,因为 native 组件只有 ID 和一个非用户定义的类。

  1. 有没有办法向元素添加某种元数据,以便于查找?

假设我有一个表格,其中的单元格内包含复杂的元素,我需要先找到正确的行,然后是单元格,然后再找到要在单元格内操作的正确组件。

理想情况下,我希望能够通过搜索“myTargetRows”之类的内容来枚举行。那会给我一个行列表。

  1. 如果我理解正确的话,在 native 应用程序中没有两个组件可以有相同的 ID,所以我不能那样使用 ID,对吧? (即,对多个行组件使用相同的 ID“myTargetRows”)。
  2. 如果不是,我是否应该使用编号 ID,如“myTargetRow0”、“myTargetRow1”等,然后使用 XPath 部分匹配 ID?
  3. 没有更好的方法吗?
  4. 如果我可以做类似的事情,我是否可以将那些 findElement 调用链接起来以找到我想要的正确嵌套元素?

P.s.:我不想在我的定位器中对确切的组件层次结构进行硬编码,以避免在我移动 View 中的任何内容时使它们失效,因此那些点击式解决方案将无济于事。

附言2:解决方案必须同时适用于 Android 和 iOS,即使我需要自己为它实现某种抽象。

最佳答案

您应该使用 View 的 accessibilityLabel 属性。

accessibilityLabel PropTypes.node

Overrides 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/

相关文章:

iphone - 我怎样才能换行 OHAttributedLabel

ios - 在 OS X Yosemite 上安装 xcode 4

android - Firebase - 排除一些屏幕进行跟踪

ios - CloudKit CKError "Invalid Arguments"与 "Bad sync continuation data"

使用 singleTop 的 Android 向上导航

android - Android 中的主题?

android - 按下主页按钮时如何完成() Activity

android - 首次启动时卡在启动画面,但如果我们不终止应用程序并再次启动应用程序,则应用程序可以正常工作。 ( react 原生)Android

javascript - react native : Flash Message memory leak error

android ContextCompat.checkSelfPermission 总是返回 PERMISSION_GRANTED