Detox: After Update Assertions on Screens with SafeAreaView are Failing
Description
Many of our screens have a SafeAreaView at the top level to ensure content is rendered in the safe area bounds. After updating from 16.9.2 to 17.x.x many tests are failing with a RCTSafeAreaView is visible at window point
error.
- I have tested this issue on the latest Detox release and it still reproduces
Reproduction
Provide the steps necessary to reproduce the issue. If you are seeing a regression, try to provide the last known version where the issue did not reproduce.
- Navigate to a screen using a SafeAreaView.
- Assert a component nested inside the SafeAreaView with a testID is visible using
toBeVisible()
. - Notice failure. In 16.9.2 this passed.
Expected behavior
The component is visible on the screen with a valid identifier, in this instance the test should pass.
Screenshots
Here is a snapshot of the bottom half of the screen. You can see Add to Cart
is visible.
But test fails with the error
Error: Test Failed: Failed expectation: TOBEVISIBLE WITH MATCHER(identifier: == “buttonText” && (text == “Add to Cart” && (class ⊇ “UITextView” || class ⊇ “UITextField” || class ⊇ “UILabel” || class ⊇ “RCTTextView”))) AT INDEX(0), Another view “<RCTSafeAreaView: 0x7fa585f44270>” is visible at window point “{"x":259,"y":323.25}”
TIP: To print view hierarchy on failed actions/matches, use loglevel verbose and above.
Environment (please complete the following information):
- Detox: 17.3.1
- React Native: 0.61.5
- Node: 10.16.3
- Device: iOS Simulator
- Xcode: 11.5
- iOS: 13.5
- macOS: Catalina 10.15.6
Logs
If you are experiencing a timeout in your test
- I have followed the instructions under Lower-level Idling Resources Debug and am providing the log below:
If you are seeing a build problem (e.g. during npm install
)
- I am providing the
npm install
log below:
Device and verbose Detox logs
- I have run my tests using the
--loglevel trace
argument and am providing the verbose log below:
detox[46124] INFO: [DetoxServer.js] server listening on localhost:8099...
detox[46124] DEBUG: [DetoxServer.js/LOGIN] role=tester, sessionId=Testing
detox[46124] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=tester, sessionId=Testing
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=isReady (sessionId=Testing)
detox[46124] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=Testing)
detox[46124] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=Testing
detox[46124] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=Testing
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=waitForActive (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=waitForActiveDone (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=reactNativeReload (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=reactNativeReload (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=ready (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=invokeResult (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=testFailed (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=testFailed (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=tester action=cleanup (sessionId=Testing)
detox[46124] TRACE: [DetoxServer.js/MESSAGE] role=testee action=cleanupDone (sessionId=Testing)
detox[46124] DEBUG: [DetoxServer.js/DISCONNECT] role=tester, sessionId=Testing
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Reactions: 1
- Comments: 23 (10 by maintainers)
Please try the latest Detox version. I’m working on further improvements which will land soon.
We have the same issue. It works on 16.9.*, but not on 17.4.4.
Example
After logging in, we check for the whole screen before checking other stuff.
rooms-list-view
and the simulator on the viewI tried removing SafeAreaView from that screen, but the error happens anyway. Btw we’re using: https://github.com/th3rdwave/react-native-safe-area-context
This is the hierarchy:
Let me know if I can help sorting this. Thanks! 😃
I need the hierarchy at the failure of the test, so I can see the pointer it complains about. You should find a way to pass the trace log level to Detox.