Reputation: 4011
I'm writing tests for React Native using Appium + Jest for both Android and iOS.
Here's my React Native element:
<Text accessibilityLabel={'emailError'}>Invalid email</Text>
Here's the Promise chain I created to extract the value of a React Native Text
element:
driver.elementByAccessibilityId('emailError')
.then(error => error.text())
.then(errorText => expect(errorText).toBe('Invalid email'))
On Android, this test passes. On iOS, this test fails, and errorText === 'emailError'
.
Why is this, and is there a solution that works cross-platform for extracting text?
Upvotes: 3
Views: 2586
Reputation: 51
I had the same issue. Using testID
instead of accessibilityLabel
worked for me on iOS. For Android, accessible: true
and accessibilityLabel
should do the trick. But: You can't just set them all. If accessibilityLabel
and testID
are both set, it won't work on iOS anymore.
Example for iOS:
<Text testID={'emailError'}>Invalid email</Text>
Example for Android:
<Text accessible={true} accessibilityLabel={'emailError'}>Invalid email</Text>
A library (or just create your own function) like https://github.com/tipsi/react-native-testid can help you with setting the correct attributes based on the platform.
Upvotes: 5