Robotium UI testing for app with Navigation Drawer
android, navigation-drawer, robotium
Solution
I encountered the same problem with our Robotium tests and the solution I ended up going with was to simulate a drag gesture (how a real user would swipe open the drawer) instead of trying to click the drawer toggle or using the `solo` methods. I seemed to notice the intermittent failues more often on devices running Android older than SDK 18.
I placed this method in our own subclass of `Solo` and we haven't had a failing test since (over hundreds of runs).
/**
* Open the navigation drawer with a drag gesture. Click based triggering is
* flaky on SDK < 18
*/
public void openNavigationDrawer() {
Point deviceSize = new Point();
getCurrentActivity().getWindowManager().getDefaultDisplay().getSize(deviceSize);
int screenWidth = deviceSize.x;
int screenHeight = deviceSize.y;
int fromX = 0;
int toX = screenWidth / 2;
int fromY = screenHeight / 2;
int toY = fromY;
this.drag(fromX, toX, fromY, toY, 1);
}
Problem
We got the app with `Navigation Drawer` from `support.v4` library. We automating UI testing with `Robotium` and everything is ok, but `Navigation Drawer` can freeze randomly so some tests can fail randomly. This is definitely not a `Robotium` problem, because I saw how `Navigation Drawer` gets freezed in some other apps on my device, also in my own apps. I already tried fix for `Navigation Drawer` from this question's anwer: Why does DrawerLayout sometimes glitch upon opening? It helped and random freezes decreased from 90% to about 10%, but 10% of test runs can fail and this is very bad, especially for Continuous Integration... May be someone already fixed this problem?