首页 > 解决方案 > React Native + Appium iOS elementByAccesibilityId.text()

问题描述

我正在为 Android 和 iOS 使用 Appium + Jest 为 React Native 编写测试。

这是我的 React Native 元素:

<Text accessibilityLabel={'emailError'}>Invalid email</Text>

这是我为提取 React NativeText元素的值而创建的 Promise 链:

driver.elementByAccessibilityId('emailError')
      .then(error => error.text())
      .then(errorText => expect(errorText).toBe('Invalid email'))

在 Android 上,此测试通过。在 iOS 上,此测试失败,并且errorText === 'emailError'.

为什么会这样,是否有跨平台提取文本的解决方案?

标签: reactjsreact-nativeappiumjestjse2e-testing

解决方案


我遇到过同样的问题。在 iOS 上使用testID而不是为我工作。accessibilityLabel对于Android,accessible: true应该accessibilityLabel可以解决问题。但是:你不能只设置它们。如果accessibilityLabeltestID都设置了,它将不再适用于 iOS。

iOS 示例:

<Text testID={'emailError'}>Invalid email</Text>

安卓示例:

<Text accessible={true} accessibilityLabel={'emailError'}>Invalid email</Text>

https://github.com/tipsi/react-native-testid这样的库(或只是创建您自己的函数)可以帮助您根据平台设置正确的属性。


推荐阅读