android / android/android-test
ActivityScenario changes behavior of Navigation Component and breaks backstack
- Lingua principale
- Java
- Stelle
- 1.2k
- Fork
- 342
- Merge medio
- 11h 29m
- PR unite (30g)
- 2
Descrizione
### Description
When using `ActivityScenario`, backstack doesn't work as expected when launching deeplinks.
### Steps to Reproduce
Please see the repro project at https://github.com/lwasyl/activity-scenario-navigation-issue.
1. Navigation library is set up with navigation graph that defines deeplinks
2. Press the button to display a notification. The notification opens the app on FragmentB, with fragmentA in the backstack.
3. Press back button
### Expected Results
Fragment A is visible, as it's the previous one on the backstack.
### Actual Results
When starting main activity normally (via launcher), backstack works as expected: after clicking the notification, fragment B is visible. Then, after pressing back button, fragment A is visible.
When starting main activity via `ActivityScenario`, backstack doesn't work as expected: after clicking the notification, fragment B is visible, however after pressing back button, _app exits_.
Please note that the behavior was correct (that is, consistent with how the app behaves outside the tests) with `ActivityTestRule`, which is now deprecated. There's no clear migration path to test the now-failing case with `ActivityScenario`.
### AndroidX Test and Android OS Versions
`androidx.test.ext:junit-ktx:1.1.2`
Checked on various emulators and it doesn't seem to be related to OS version. Reproduced on API 26, 29, 30 (https://github.com/lwasyl/activity-scenario-navigation-issue/actions/runs/295793564)
### Link to a public git repo demonstrating the problem:
https://github.com/lwasyl/activity-scenario-navigation-issue
Here's how the app behaves normally:

When pressing back, app properly cycles through the backstack.
Here's UI tests that uses `ActivityScenario` and performs exactly the same steps as I did manually in the gif above (run the main activity, press button, press on notification, press back button):

fragmentA is never shown again
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia con il progetto di riproduzione collegato e il relativo test UI che usa ActivityScenario, quindi confronta il comportamento di Lifecycle e backstack con il normale flusso del launcher e con l'obsoleto ActivityTestRule. Riproduci il deeplink della notifica sui livelli API elencati e traccia il motivo per cui premere Indietro fa uscire dall'app invece di mostrare FragmentA; il lavoro è concluso quando il flusso del test corrisponde al normale comportamento dell'app.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- android, java
- Ambito
- mobile-dev, testing
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100