我使用React Native开发需要端到端测试的应用。
来自Selenium WebDriver背景,在我看来,与WebDriver相比,Appium中的元素查找非常尴尬,因为本机组件只有ID和一个非用户定义的类。
如果我在一个单元格中有一个包含复杂元素的表,我需要首先找到正确的行,然后是单元格,然后找到正确的组件来操作单元格。
理想情况下,我希望能够通过搜索" myTargetRows"之类的内容来枚举行。那会给我一个行列表。
findElement
调用链接起来找到我想要的正确嵌套元素吗?Ps:我不想在我的定位器中对确切的组件层次结构进行硬编码,以避免在我的视图中移动任何内容时使其无效,因此这些点击式解决方案无法提供帮助。 / p>
P.S。 2:解决方案必须适用于Android和iOS,即使我需要自己实现某种抽象。
答案 0 :(得分:0)
您应该使用View的accessibilityLabel
道具。
accessibilityLabel
PropTypes.node覆盖用户在屏幕阅读器时读取的文本 与元素交互。默认情况下,标签由。构造 遍历所有子节点并累积所有Text节点 以空格分隔。
可以找到更多信息here
对于唯一ID,我们假设您有一个listview和100行。您可以将accessibilityLabel
的rowId和静态文本组合在一起。
例如:0_MyCustomRow,1_MyCustomRow
答案 1 :(得分:0)
在Sauce Labs博客中查看article,这是处理RN应用程序的一个很好的例子。
答案 2 :(得分:0)
由于appium支持不同的搜索策略,每个平台的搜索策略也略有不同,因此我在一个项目中使用以下方法:
我有一个可以轻松地导入每个类的帮助程序,该类返回跨平台(iOS和Android)测试ID道具
export function getTestIdProps (id) {
return { accessible: true, accessibilityLabel: id, testID: id }
}
在开发过程中,我们确保每个要测试的组件都收到与以下类似的测试ID:
return (
<ComponentToBeTested>
<View {...getTestIdProps('unique-test-id-goes-here')} moreProps>
</View>
</ComponentToBeTested>
)
谨慎请确保检查react本机文档以查看哪个基本元素支持这些道具。并非所有反应本机元素都支持testID
或accessibilityLabel
。如果没有,这些道具将被忽略。
最后,在您的Appium测试(Java示例)中,您可以通过其可访问性ID轻松识别元素,类似于:
public static By byAccessibilityId(final String id) {
return MobileBy.AccessibilityId(id);
}
有关更多信息,请参见http://appium.io/docs/en/commands/element/find-elements/