robotium vs espresso: get ready to rumble ! - droidcon paris 2014
DESCRIPTION
http://fr.droidcon.com/2014/agenda http://fr.droidcon.com/2014/agenda/detail?title=Robotium+vs+Espresso%3A+Get+ready+to+rumble+! Ladies and gentlemen, boys and girls. Dans le coin rouge, accusant un poids de 104KB, le plus populaire de tous les frameworks de test: Robotium. Dans le coin bleu, avec un poids de 262KB et le support des équipes Google, celui qu’on qualifie de “new comer” : Espresso. Que le match commence !! Au programme nous verrons avec du code le fonctionnement de ces bibliothèques, leurs avantages mais aussi leurs inconvénients. Nous y parlerons également de Calabash Android et de UI Automator. Speaker : Thomas Guerin, Xebia Thomas Guerin est consultant pour Xebia depuis 2011. Passionné de développement Android et adepte des bonnes pratiques de développement, il s'intéresse de près au déploiement continu sur mobile.TRANSCRIPT
![Page 1: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/1.jpg)
![Page 2: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/2.jpg)
![Page 3: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/3.jpg)
Robotium vs EspressoGet ready to rumble !
![Page 4: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/4.jpg)
![Page 5: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/5.jpg)
Thomas Guerin
![Page 6: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/6.jpg)
Thomas GuerinDéveloppeur Android
![Page 7: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/7.jpg)
Thomas GuerinDéveloppeur Android
Tests addict
![Page 8: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/8.jpg)
Thomas GuerinDéveloppeur Android
Tests addictNiveau 15 à Destiny
![Page 9: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/9.jpg)
Robotium vs Espresso : Get ready to rumble !
![Page 10: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/10.jpg)
Robotium vs Espresso : Get ready to rumble !
Pourquoi ne pas faire de tests ?
#Droidcon #Robotium #Espresso @Tom404_
![Page 11: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/11.jpg)
Robotium vs Espresso : Get ready to rumble !
Pourquoi ne pas faire de tests ?
“Mes tests durent des heures !”
#Droidcon #Robotium #Espresso @Tom404_
![Page 12: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/12.jpg)
Robotium vs Espresso : Get ready to rumble !
Pourquoi ne pas faire de tests ?
“Mes tests durent des heures !”
#Droidcon #Robotium #Espresso
“Tester ce n’est pas toujours simple !”
@Tom404_
![Page 13: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/13.jpg)
Robotium vs Espresso : Get ready to rumble !
Pourquoi ne pas faire de tests ?
“Mes tests durent des heures !”
#Droidcon #Robotium #Espresso
“Tester ce n’est pas toujours simple !”
“Mes tests échouent aléatoirement !”
@Tom404_
![Page 14: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/14.jpg)
Robotium vs Espresso : Get ready to rumble !
Pourquoi ne pas faire de tests ?
“Mes tests durent des heures !”
#Droidcon #Robotium #Espresso
“Tester ce n’est pas toujours simple !”
“Mes tests échouent aléatoirement !”
“Je vais devoir corriger les tests alors que je n’ai presque rien modifié”
@Tom404_
![Page 15: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/15.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 16: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/16.jpg)
Robotium vs Espresso : Get ready to rumble !
Un test doit être…
#Droidcon #Robotium #Espresso @Tom404_
![Page 17: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/17.jpg)
Robotium vs Espresso : Get ready to rumble !
Un test doit être…
#Droidcon #Robotium #Espresso
Simple
@Tom404_
![Page 18: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/18.jpg)
Robotium vs Espresso : Get ready to rumble !
Un test doit être…
#Droidcon #Robotium #Espresso
RapideSimple
@Tom404_
![Page 19: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/19.jpg)
Robotium vs Espresso : Get ready to rumble !
Un test doit être…
#Droidcon #Robotium #Espresso
RapideSimple Fiable
@Tom404_
![Page 20: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/20.jpg)
Robotium vs Espresso : Get ready to rumble !
Un test doit être…
#Droidcon #Robotium #Espresso
RapideSimple Fiable Durable
@Tom404_
![Page 21: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/21.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 22: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/22.jpg)
Robotium vs Espresso : Get ready to rumble !
Un mauvais exemple
#Droidcon #Robotium #Espresso @Tom404_
![Page 23: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/23.jpg)
Robotium vs Espresso : Get ready to rumble !
Un mauvais exemple
#Droidcon #Robotium #Espresso
// Start the main activity of the application under test mActivity = getActivity(); !// Get a handle to the Activity object's main UI widget, a Spinner mSpinner = (Spinner)mActivity.findViewById(com.android.example.spinner.R.id.Spinner01); !// Set the Spinner to a known position mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION); !// Stop the activity - The onDestroy() method should save the state of the Spinner mActivity.finish(); !// Re-start the Activity - the onResume() method should restore the state of the Spinner mActivity = getActivity(); !// Get the Spinner's current position int currentPosition = mActivity.getSpinnerPosition(); !// Assert that the current position is the same as the starting position assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);
@Tom404_
![Page 24: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/24.jpg)
Robotium vs Espresso : Get ready to rumble !
Un mauvais exemple
#Droidcon #Robotium #Espresso
// Start the main activity of the application under test mActivity = getActivity(); !// Get a handle to the Activity object's main UI widget, a Spinner mSpinner = (Spinner)mActivity.findViewById(com.android.example.spinner.R.id.Spinner01); !// Set the Spinner to a known position mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION); !// Stop the activity - The onDestroy() method should save the state of the Spinner mActivity.finish(); !// Re-start the Activity - the onResume() method should restore the state of the Spinner mActivity = getActivity(); !// Get the Spinner's current position int currentPosition = mActivity.getSpinnerPosition(); !// Assert that the current position is the same as the starting position assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);
@Tom404_
![Page 25: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/25.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 26: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/26.jpg)
Robotium vs Espresso : Get ready to rumble !
Les combattants
#Droidcon #Robotium #Espresso @Tom404_
![Page 27: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/27.jpg)
Robotium vs Espresso : Get ready to rumble !
Les combattants
#Droidcon #Robotium #Espresso
Robotium
@Tom404_
![Page 28: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/28.jpg)
Robotium vs Espresso : Get ready to rumble !
Les combattants
#Droidcon #Robotium #Espresso
VS
Robotium Espresso
@Tom404_
![Page 29: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/29.jpg)
![Page 30: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/30.jpg)
Préparation
![Page 31: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/31.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 32: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/32.jpg)
Robotium vs Espresso : Get ready to rumble !
Dépendances Gradle
#Droidcon #Robotium #Espresso @Tom404_
![Page 33: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/33.jpg)
Robotium vs Espresso : Get ready to rumble !
Dépendances Gradle
#Droidcon #Robotium #Espresso
dependencies { androidTestCompile ‘com.jayway.android.robotium:robotium-solo:5.2.1' androidTestCompile 'com.squareup.assertj:assertj-android:1.0.0' }
Robotium
@Tom404_
![Page 34: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/34.jpg)
Robotium vs Espresso : Get ready to rumble !
Dépendances Gradle
#Droidcon #Robotium #Espresso
android.packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'LICENSE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' }
dependencies { /* Jars récupérés depuis https://code.google.com/p/android-test-kit */ androidTestCompile files(‘libs/espresso-1.1.jar’, ‘libs/espresso-contrib-1.1.jar', ‘libs/testrunner-1.1.jar', 'libs/testrunner-runtime-1.1.jar') androidTestCompile 'com.google.guava:guava:14.0.1', 'com.squareup.dagger:dagger:1.1.0', 'org.hamcrest:hamcrest-core:1.1', 'org.hamcrest:hamcrest-integration:1.1', 'org.hamcrest:hamcrest-library:1.1' }
Espresso
@Tom404_
![Page 35: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/35.jpg)
Robotium vs Espresso : Get ready to rumble !
Dépendances Gradle
#Droidcon #Robotium #Espresso
android.packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'LICENSE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' }
dependencies { androidTestCompile ’com.jakewharton.espresso:espresso:1.1-r3’, ‘com.jakewharton.espresso:espresso-support-v4:1.1-r3' }
https://github.com/JakeWharton/double-espresso
Double Espresso
@Tom404_
![Page 36: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/36.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 37: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/37.jpg)
Robotium vs Espresso : Get ready to rumble !
Test Runner
#Droidcon #Robotium #Espresso @Tom404_
![Page 38: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/38.jpg)
Robotium vs Espresso : Get ready to rumble !
Test Runner
#Droidcon #Robotium #Espresso
Robotium utilise le test runner du sdk
@Tom404_
![Page 39: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/39.jpg)
Robotium vs Espresso : Get ready to rumble !
Test Runner
#Droidcon #Robotium #Espresso
Robotium utilise le test runner du sdk
Espresso nécessite un test runner spécifique
@Tom404_
![Page 40: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/40.jpg)
Robotium vs Espresso : Get ready to rumble !
Test Runner
#Droidcon #Robotium #Espresso
Robotium utilise le test runner du sdk
Espresso nécessite un test runner spécifique
defaultConfig { testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner" }
@Tom404_
![Page 41: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/41.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 42: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/42.jpg)
Robotium vs Espresso : Get ready to rumble !
GoogleInstrumentationTestRunner
#Droidcon #Robotium #Espresso @Tom404_
![Page 43: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/43.jpg)
Robotium vs Espresso : Get ready to rumble !
GoogleInstrumentationTestRunner
#Droidcon #Robotium #Espresso
onCreate de l'application finalisée avant le début des tests
@Tom404_
![Page 44: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/44.jpg)
Robotium vs Espresso : Get ready to rumble !
GoogleInstrumentationTestRunner
#Droidcon #Robotium #Espresso
onCreate de l'application finalisée avant le début des tests
Instrumentation terminée == activités finies
@Tom404_
![Page 45: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/45.jpg)
Robotium vs Espresso : Get ready to rumble !
GoogleInstrumentationTestRunner
#Droidcon #Robotium #Espresso
onCreate de l'application finalisée avant le début des tests
Instrumentation terminée == activités finies
Monitoring des activités plus fiable
@Tom404_
![Page 46: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/46.jpg)
Robotium vs Espresso : Get ready to rumble !
GoogleInstrumentationTestRunner
#Droidcon #Robotium #Espresso
onCreate de l'application finalisée avant le début des tests
Instrumentation terminée == activités finies
Monitoring des activités plus fiable
Peut être utilisé avec d'autres librairies
@Tom404_
![Page 47: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/47.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 48: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/48.jpg)
Robotium vs Espresso : Get ready to rumble !
Initialisation
#Droidcon #Robotium #Espresso @Tom404_
![Page 49: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/49.jpg)
Robotium vs Espresso : Get ready to rumble !
Initialisation
#Droidcon #Robotium #Espresso
Robotiumpublic class SimpleActionsTest extends ActivityInstrumentationTestCase2<MainActivity> { ! private Solo solo; ! public void setUp() throws Exception { super.setUp(); solo = new Solo(getInstrumentation(), getActivity()); } ! public void tearDown() throws Exception { solo.finishOpenedActivities(); super.tearDown(); } }
@Tom404_
![Page 50: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/50.jpg)
Robotium vs Espresso : Get ready to rumble !
Initialisation
#Droidcon #Robotium #Espresso
public class SimpleActionsTest extends ActivityInstrumentationTestCase2<MainActivity> { ! @Override protected void setUp() throws Exception { super.setUp(); // Espresso ne va pas lancer l'activité pour nous getActivity(); } }
Espresso
@Tom404_
![Page 51: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/51.jpg)
![Page 52: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/52.jpg)
Expressivité
![Page 53: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/53.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 54: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/54.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
Robotium
@Tom404_
![Page 55: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/55.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
Solo
Robotium
@Tom404_
![Page 56: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/56.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
Solo
getView(int viewId)
drag(…)
clickInList(int line, int index)
goBack()setNavigationDrawer(int status)pressSoftKeyboardNextButton()
clickOnActionBarItem(int id)
scrollToBottom() searchEditText(String text)
pressSoftKeyboardSearchButton()
getButton(int index)scrollDown()clearEditText(int index)
clickOnToggleButton(String text)
clickOnImageButton(int index)
clickOnButton(int index)
pressMenuItem(int index)
clickOnActionBarHome()
scrollDownList(int index)
searchText(String text)
@Tom404_
![Page 57: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/57.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 58: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/58.jpg)
Robotium vs Espresso : Get ready to rumble !
Exemple
#Droidcon #Robotium #Espresso @Tom404_
![Page 59: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/59.jpg)
Robotium vs Espresso : Get ready to rumble !
Exemple
#Droidcon #Robotium #Espresso
// Récupération de la vue Button myButton = (TextView) solo.getView(R.id.my_button); !// Assertions (AssertJ Android) assertThat(myButton).hasText(“My button”).isVisible(); !// Clic sur la vue solo.clickOnView(myButton)
@Tom404_
![Page 60: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/60.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 61: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/61.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest
#Droidcon #Robotium #Espresso @Tom404_
![Page 62: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/62.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest
#Droidcon #Robotium #Espresso
Librairie de matchers
@Tom404_
![Page 63: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/63.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest
#Droidcon #Robotium #Espresso
Librairie de matchersassertThat("Hello", equalTo("Hello"))
@Tom404_
![Page 64: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/64.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest
#Droidcon #Robotium #Espresso
Librairie de matchersassertThat("Hello", equalTo("Hello"))!// Sucre syntaxique assertThat(“Hello", is("Hello"))
@Tom404_
![Page 65: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/65.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest
#Droidcon #Robotium #Espresso
Librairie de matchersassertThat("Hello", equalTo("Hello"))!// Sucre syntaxique assertThat(“Hello", is("Hello"))!// De nombreux matchers disponibles allOf not instanceOf hasProperty equalToIgnoringCase
@Tom404_
![Page 66: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/66.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest
#Droidcon #Robotium #Espresso
Librairie de matchersassertThat("Hello", equalTo("Hello"))!// Sucre syntaxique assertThat(“Hello", is("Hello"))
Possibilité de composition
!// De nombreux matchers disponibles allOf not instanceOf hasProperty equalToIgnoringCase
@Tom404_
![Page 67: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/67.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 68: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/68.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest custom matcher
#Droidcon #Robotium #Espresso @Tom404_
![Page 69: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/69.jpg)
Robotium vs Espresso : Get ready to rumble !
Hamcrest custom matcher
#Droidcon #Robotium #Espresso
public class IsNotANumber extends TypeSafeMatcher<Double> { ! @Override public boolean matchesSafely(Double number) { return number.isNaN(); } ! public void describeTo(Description description) { description.appendText("not a number"); } ! public static Matcher<Double> notANumber() { return new IsNotANumber(); } !}
@Tom404_
![Page 70: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/70.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 71: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/71.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
Espresso
@Tom404_
![Page 72: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/72.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
onView(Matcher<View>)!onData(Matcher<Object>
Espresso
Espresso
@Tom404_
![Page 73: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/73.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
onView(Matcher<View>)!onData(Matcher<Object>
Espresso withId()!withText(text)!
hasSibling(Matcher<View>)
ViewMatchersEspresso
@Tom404_
![Page 74: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/74.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
onView(Matcher<View>)!onData(Matcher<Object>
Espresso
click()!typeText(text)
ViewActions
withId()!withText(text)!
hasSibling(Matcher<View>)
ViewMatchersEspresso
@Tom404_
![Page 75: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/75.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
onView(Matcher<View>)!onData(Matcher<Object>
Espresso
click()!typeText(text)
ViewActions
doesNotExist()!matches(Matcher<View>)
ViewAssertions
withId()!withText(text)!
hasSibling(Matcher<View>)
ViewMatchersEspresso
@Tom404_
![Page 76: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/76.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
onView(Matcher<View>)!onData(Matcher<Object>
Espresso
perform(ViewAction)!check(ViewAssertion)
ViewInteraction / DataInteraction
click()!typeText(text)
ViewActions
doesNotExist()!matches(Matcher<View>)
ViewAssertions
withId()!withText(text)!
hasSibling(Matcher<View>)
ViewMatchersEspresso
@Tom404_
![Page 77: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/77.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
onView(Matcher<View>)!onData(Matcher<Object>
Espresso
perform(ViewAction)!check(ViewAssertion)
ViewInteraction / DataInteraction
click()!typeText(text)
ViewActions
doesNotExist()!matches(Matcher<View>)
ViewAssertions
withId()!withText(text)!
hasSibling(Matcher<View>)
ViewMatchersEspresso
@Tom404_
![Page 78: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/78.jpg)
Robotium vs Espresso : Get ready to rumble !
API overview
#Droidcon #Robotium #Espresso
onView(Matcher<View>)!onData(Matcher<Object>
Espresso
perform(ViewAction)!check(ViewAssertion)
ViewInteraction / DataInteraction
click()!typeText(text)
ViewActions
doesNotExist()!matches(Matcher<View>)
ViewAssertions
withId()!withText(text)!
hasSibling(Matcher<View>)
ViewMatchersEspresso
@Tom404_
![Page 79: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/79.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 80: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/80.jpg)
Robotium vs Espresso : Get ready to rumble !
Exemple
#Droidcon #Robotium #Espresso @Tom404_
![Page 81: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/81.jpg)
Robotium vs Espresso : Get ready to rumble !
Exemple
#Droidcon #Robotium #Espresso
onView(allOf(withId(R.id.my_button), withText(“My Button”))) .check(matches(isDisplayed())) .perform(click());
@Tom404_
![Page 82: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/82.jpg)
Robotium vs Espresso : Get ready to rumble !
Exemple
#Droidcon #Robotium #Espresso
onView(allOf(withId(R.id.my_button), withText(“My Button”))) .check(matches(isDisplayed())) .perform(click());!// Une simple extraction de méthode permet de simplifier onView(withIdAndText(R.id.my_button, "My Button”)) .check(matches(isDisplayed())) .perform(click());
@Tom404_
![Page 83: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/83.jpg)
Robotium vs Espresso : Get ready to rumble !
Exemple
#Droidcon #Robotium #Espresso
onView(allOf(withId(R.id.my_button), withText(“My Button”))) .check(matches(isDisplayed())) .perform(click());!// Une simple extraction de méthode permet de simplifier onView(withIdAndText(R.id.my_button, "My Button”)) .check(matches(isDisplayed())) .perform(click());!// Si le bouton n'est pas affiché le perform(click()) échouera onView(withIdAndText(R.id.my_button, "My Button")).perform(click());
@Tom404_
![Page 84: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/84.jpg)
Robotium vs Espresso : Get ready to rumble !
Exemple
#Droidcon #Robotium #Espresso
onView(allOf(withId(R.id.my_button), withText(“My Button”))) .check(matches(isDisplayed())) .perform(click());
Manque de restrictions = AmbiguousViewMatcherException
!// Une simple extraction de méthode permet de simplifier onView(withIdAndText(R.id.my_button, "My Button”)) .check(matches(isDisplayed())) .perform(click());!// Si le bouton n'est pas affiché le perform(click()) échouera onView(withIdAndText(R.id.my_button, "My Button")).perform(click());
@Tom404_
![Page 85: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/85.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 86: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/86.jpg)
Robotium vs Espresso : Get ready to rumble !
Listview
#Droidcon #Robotium #Espresso @Tom404_
![Page 87: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/87.jpg)
Robotium vs Espresso : Get ready to rumble !
Listview
#Droidcon #Robotium #Espresso
// Clic sur item solo.clickOnText("textToFind"); !// Si jamais il y'en a plusieurs -> utilisation d'un index solo.clickOnText("textToFind", 3); !// Ou choisir directement la ligne solo.clickInList(2);
Robotium
@Tom404_
![Page 88: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/88.jpg)
Robotium vs Espresso : Get ready to rumble !
Listview
#Droidcon #Robotium #Espresso
onData(allOf(is(instanceOf(String.class)), is("textToFind"))).perform(click()); !// Ou directement à une position onData(is(instanceOf(String.class))).atPosition(0).perform(click()); !// Possibilité de préciser une listview, utile pour le view pager onData(allOf(is(instanceOf(String.class)), is("textToFind"))) .inAdapterView(withId(R.id.my_list)).perform(click()); !// Interaction avec une vue enfant de la ligne onData(allOf(is(instanceOf(String.class)), is("textToFind"))) .onChildView(withId(R.id.my_child)) .perform(click());
Espresso
@Tom404_
![Page 89: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/89.jpg)
Robotium vs Espresso : Get ready to rumble !
Listview
#Droidcon #Robotium #Espresso
// Type renvoyé par la méthode getItem de l'adapteur public class Item { public String name; public String itemContent; }
Espresso : cas plus complexe
!onData(allOf(is(instanceOf(Item.class)), hasProperty(“name", equalTo(“nameToFind")))) .perform(click());
@Tom404_
![Page 90: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/90.jpg)
Robotium vs Espresso : Get ready to rumble !
Listview
#Droidcon #Robotium #Espresso
public static Matcher<Object> withItemName(final Matcher<String> itemTextMatcher){ return new BoundedMatcher<Object, Item>(Item.class) { @Override public boolean matchesSafely(Item item) { return itemTextMatcher.matches(item.name); } ! @Override public void describeTo(Description description) { description.appendText("with item name: "); itemTextMatcher.describeTo(description); } }; }
Espresso : custom matcher
onData(withItemName(equalTo("nameToFind"))).perform(click());
@Tom404_
![Page 91: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/91.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 92: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/92.jpg)
Robotium vs Espresso : Get ready to rumble !
Webview
#Droidcon #Robotium #Espresso
Robotium
@Tom404_
![Page 93: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/93.jpg)
Robotium vs Espresso : Get ready to rumble !
Webview
#Droidcon #Robotium #Espresso
RobotiumPossibilité d’interagir avec les webviews
•solo.getWebElements(by)•solo.clickOnWebElement(by)
@Tom404_
![Page 94: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/94.jpg)
Robotium vs Espresso : Get ready to rumble !
Webview
#Droidcon #Robotium #Espresso
RobotiumPossibilité d’interagir avec les webviews
•solo.getWebElements(by)•solo.clickOnWebElement(by)
Plusieurs types de recherches disponibles•By.id(String id)•By.className(String className)•By.textContent(String textContent)•By.name(String name)
@Tom404_
![Page 95: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/95.jpg)
Robotium vs Espresso : Get ready to rumble !
Webview
#Droidcon #Robotium #Espresso
Espresso
@Tom404_
![Page 96: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/96.jpg)
Robotium vs Espresso : Get ready to rumble !
Webview
#Droidcon #Robotium #Espresso
Espresso
@Tom404_
![Page 97: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/97.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 98: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/98.jpg)
Robotium vs Espresso : Get ready to rumble !
Navigation Drawer
#Droidcon #Robotium #Espresso @Tom404_
![Page 99: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/99.jpg)
Robotium vs Espresso : Get ready to rumble !
Navigation Drawer
#Droidcon #Robotium #Espresso
Robotium// Attention l'id du frame layout du menu doit absolument être "left_drawer" solo.setNavigationDrawer(Solo.OPENED); !solo.setNavigationDrawer(Solo.CLOSED);
@Tom404_
![Page 100: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/100.jpg)
Robotium vs Espresso : Get ready to rumble !
Navigation Drawer
#Droidcon #Robotium #Espresso
Robotium// Attention l'id du frame layout du menu doit absolument être "left_drawer" solo.setNavigationDrawer(Solo.OPENED); !solo.setNavigationDrawer(Solo.CLOSED);
EspressoDrawerActions.openDrawer(R.id.drawer_layout); !DrawerActions.closeDrawer(R.id.drawer_layout);
@Tom404_
![Page 101: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/101.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 102: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/102.jpg)
Robotium vs Espresso : Get ready to rumble !
Action bar
#Droidcon #Robotium #Espresso @Tom404_
![Page 103: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/103.jpg)
Robotium vs Espresso : Get ready to rumble !
Action bar
#Droidcon #Robotium #Espresso
Robotiumsolo.clickOnActionBarItem(R.id.action_example); !// Cas de l'action bar overflow solo.sendKey(KeyEvent.KEYCODE_MENU); solo.clickOnText("action");
@Tom404_
![Page 104: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/104.jpg)
Robotium vs Espresso : Get ready to rumble !
Action bar
#Droidcon #Robotium #Espresso
Robotiumsolo.clickOnActionBarItem(R.id.action_example); !// Cas de l'action bar overflow solo.sendKey(KeyEvent.KEYCODE_MENU); solo.clickOnText("action");
EspressoonView(withId(R.id_action_example)).perform(click()); !// Cas de l'action bar overflow openActionBarOverflowOrOptionsMenu(getInstrumentation().getTargetContext()); onView(withText("action")).perform(click());
@Tom404_
![Page 105: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/105.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 106: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/106.jpg)
Robotium vs Espresso : Get ready to rumble !
Back button & Keyboard
#Droidcon #Robotium #Espresso @Tom404_
![Page 107: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/107.jpg)
Robotium vs Espresso : Get ready to rumble !
Back button & Keyboard
#Droidcon #Robotium #Espresso
Robotiumsolo.goBack(); // solo.goBack() est aussi utilisé pour fermer le clavier
@Tom404_
![Page 108: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/108.jpg)
Robotium vs Espresso : Get ready to rumble !
Back button & Keyboard
#Droidcon #Robotium #Espresso
Robotiumsolo.goBack(); // solo.goBack() est aussi utilisé pour fermer le clavier
EspressoEspresso.pressBack(); Espresso.closeSoftKeyboard();
@Tom404_
![Page 109: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/109.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 110: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/110.jpg)
Robotium vs Espresso : Get ready to rumble !
Les messages d’erreur
#Droidcon #Robotium #Espresso @Tom404_
![Page 111: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/111.jpg)
Robotium
!junit.framework.AssertionFailedError: View with id: '1234' is not found! at com.robotium.solo.Solo.getView(Solo.java:2008) at com.robotium.solo.Solo.getView(Solo.java:1988) at fr.droidcon.robotium.vs.espresso.samples.test.robotium.SimpleActionsTest.testClickButton(SimpleActionsTest.java:28)
!// Récupération d’une vue inexistante solo.getView(1234);
Robotium vs Espresso : Get ready to rumble !
Les messages d’erreur
#Droidcon #Robotium #Espresso @Tom404_
![Page 112: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/112.jpg)
com.google.android.apps.common.testing.ui.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: is <1234> If the target view is not part of the view hierarchy, you may need to use Espresso.onData to load it from one of the following AdapterViews:android.widget.ListView{426f6f18 VFED.VC. ......ID 0,0-720,1557} - android.widget.ListView{4269c598 V.ED.VC. ........ 48,393-1032,1509 #7f070042 app:id/my_list} !View Hierarchy: +>DecorView{id=-1, visibility=VISIBLE, width=1080, height=1776, has-focus=true, has-focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=1} | +->ActionBarOverlayLayout{id=16909075, res-name=action_bar_overlay_layout, visibility=VISIBLE, width=1080, height=1776, has-focus=true, has-focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true, is-focused=false, is-focusable=false, is-layout-requested=false, is-selected=false, root-is-layout-requested=false, has-input-connection=false, x=0.0, y=0.0, child-count=3} | +-->FrameLayout{id=16908290, res-name=content, visibility=VISIBLE, width=1080, height=1557, has-focus=true, has-focusable=true, has-window-focus=true, is-clickable=false, is-enabled=true, is-
Espresso!// Récupération d’une vue inexistante onView(withId(1234));
Robotium vs Espresso : Get ready to rumble !
Les messages d’erreur
#Droidcon #Robotium #Espresso @Tom404_
![Page 113: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/113.jpg)
![Page 114: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/114.jpg)
Enchaînements
![Page 115: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/115.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 116: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/116.jpg)
Robotium vs Espresso : Get ready to rumble !
Wait and See
#Droidcon #Robotium #Espresso @Tom404_
![Page 117: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/117.jpg)
Robotium vs Espresso : Get ready to rumble !
Wait and See
#Droidcon #Robotium #Espresso
Robotium repose sur le principe de wait & see•solo.waitForActivity(Class class, int timeout)• solo.waitForCondition(Condition condition, int timeout)• solo.waitForDialogToOpen()
@Tom404_
![Page 118: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/118.jpg)
Robotium vs Espresso : Get ready to rumble !
Wait and See
#Droidcon #Robotium #Espresso
solo.clickOnView(R.id.start_activity_button); !// On attend que la vue apparaisse avant d'agir solo.waitForView(R.id.view_in_new_activity); !solo.clickOnView(R.id.view_in_new_activity);
Robotium repose sur le principe de wait & see•solo.waitForActivity(Class class, int timeout)• solo.waitForCondition(Condition condition, int timeout)• solo.waitForDialogToOpen()
@Tom404_
![Page 119: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/119.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 120: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/120.jpg)
Robotium vs Espresso : Get ready to rumble !
Finis de dormir !
#Droidcon #Robotium #Espresso @Tom404_
![Page 121: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/121.jpg)
Robotium vs Espresso : Get ready to rumble !
Finis de dormir !
#Droidcon #Robotium #Espresso
Entrée en jeu du GoogleInstrumentationTestRunner
@Tom404_
![Page 122: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/122.jpg)
Robotium vs Espresso : Get ready to rumble !
Finis de dormir !
#Droidcon #Robotium #Espresso
Entrée en jeu du GoogleInstrumentationTestRunner
Monitoring plus fin des activités et des ressources
@Tom404_
![Page 123: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/123.jpg)
Robotium vs Espresso : Get ready to rumble !
Finis de dormir !
#Droidcon #Robotium #Espresso
Entrée en jeu du GoogleInstrumentationTestRunner
Monitoring plus fin des activités et des ressources
Analyse du ThreadUI pour savoir quand agir
@Tom404_
![Page 124: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/124.jpg)
Robotium vs Espresso : Get ready to rumble !
Finis de dormir !
#Droidcon #Robotium #Espresso
Entrée en jeu du GoogleInstrumentationTestRunner
Monitoring plus fin des activités et des ressources
Analyse du ThreadUI pour savoir quand agir
Pas de wait
@Tom404_
![Page 125: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/125.jpg)
Robotium vs Espresso : Get ready to rumble !
Finis de dormir !
#Droidcon #Robotium #Espresso
onView(withId(R.id.start_activity_button)).perform(click()); !onView(withId(R.id.view_in_new_activity)).perform(click());
Entrée en jeu du GoogleInstrumentationTestRunner
Monitoring plus fin des activités et des ressources
Analyse du ThreadUI pour savoir quand agir
Pas de wait
@Tom404_
![Page 126: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/126.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso @Tom404_
![Page 127: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/127.jpg)
Robotium vs Espresso : Get ready to rumble !
Idle mais actif !
#Droidcon #Robotium #Espresso @Tom404_
![Page 128: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/128.jpg)
Robotium vs Espresso : Get ready to rumble !
Idle mais actif !
#Droidcon #Robotium #Espresso
Possibilité d'enregistrer des idlingResources
@Tom404_
![Page 129: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/129.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso
class EspressoThreadPool extends ThreadPoolExecutor implements IdlingResource { private int threadCount = 0; private ResourceCallback resourceCallback; ... @Override public synchronized void execute(Runnable r) { threadCount++; super.execute(r); } @Override public synchronized boolean isIdleNow() { return threadCount == 0; } @Override public void registerIdleTransitionCallback(ResourceCallback resourceCallback) { this.resourceCallback = resourceCallback; } @Override protected synchronized void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); threadCount--; if (resourceCallback != null && isIdleNow()) { resourceCallback.onTransitionToIdle(); } } }
@Tom404_
![Page 130: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/130.jpg)
Robotium vs Espresso : Get ready to rumble !
#Droidcon #Robotium #Espresso
class EspressoThreadPool extends ThreadPoolExecutor implements IdlingResource { private int threadCount = 0; private ResourceCallback resourceCallback; ... @Override public synchronized void execute(Runnable r) { threadCount++; super.execute(r); } @Override public synchronized boolean isIdleNow() { return threadCount == 0; } @Override public void registerIdleTransitionCallback(ResourceCallback resourceCallback) { this.resourceCallback = resourceCallback; } @Override protected synchronized void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); threadCount--; if (resourceCallback != null && isIdleNow()) { resourceCallback.onTransitionToIdle(); } } }
Espresso.registerIdlingResources(espressoThreadPool);
@Tom404_
![Page 131: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/131.jpg)
![Page 132: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/132.jpg)
Conclusion
![Page 133: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/133.jpg)
![Page 134: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/134.jpg)
Questions ?
![Page 135: Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014](https://reader033.vdocuments.net/reader033/viewer/2022052904/557b8e65d8b42a32618b4e72/html5/thumbnails/135.jpg)