Intereting Posts
Как получить отдельную информацию о ценах и валюте для покупки в приложении? Android-приложение для биллинга, как обрабатывать приложения Как запустить AccessibilityService? Создание пользовательского наложения на карте CoordinatorLayout пользовательское поведение с AppBarLayout ImageПросмотреть одно измерение, чтобы соответствовать свободному пространству, а затем оценить, чтобы сохранить пропорции Как обменивать элементы ListView с анимацией? Просмотр пейджера и списка Что такое не встроенная активность и почему в ней не работает андроид: fitsSystemWindows? Сглаженная очень медленная текстовая анимация на холсте Android, SUBPIXEL_TEXT_FLAG не работает Использование макета ScrollViews в HorizontalScrollView Ури вернулся после того, как ACTION_GET_CONTENT из галереи не работает в setImageURI () ImageView Внешняя ссылка и ссылка на оборудование с помощью jQuery Mobile Как установить белый цвет в google + войти в систему? Как вы можете справиться с увольнением DialogFragment (совместимость lib) после завершения AsyncTask

Пользовательский интерфейс Robotium для приложения с навигационным ящиком

Мы получили приложение с Navigation Drawer из библиотеки support.v4 . Мы автоматизируем тестирование пользовательского интерфейса с помощью Robotium и все в порядке, но Navigation Drawer может зависнуть случайным образом, чтобы некоторые тесты могли быть случайными.

Это определенно не проблема Robotium , потому что я видел, как Navigation Drawer замерзает в некоторых других приложениях на моем устройстве, а также в моих собственных приложениях.

Я уже испробовал исправление для Navigation Drawer из этого вопроса: почему DrawerLayout иногда сбой при открытии?

Это помогло, и случайные зависания уменьшились с 90% до 10%, но 10% тестовых прогонов могут потерпеть неудачу, и это очень плохо, особенно для непрерывной интеграции …

Может быть, кто-то уже исправил эту проблему?

Я столкнулся с той же проблемой с нашими испытаниями Robotium, и решение, с которым я столкнулся, состояло в том, чтобы имитировать жест перетаскивания (как реальный пользователь пропустил бы ящик ящика) вместо того, чтобы пытаться щелкнуть переключатель ящика или использовать solo методы. Кажется, я часто заметил прерывистые сбои на устройствах под управлением Android старше SDK 18.

Я поместил этот метод в наш собственный подкласс Solo и у нас не было теста с ошибкой (более сотни прогонов).

 /** * 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); } 

Я использую android.support.v4.widget.DrawerLayout тоже и не нашел способ сделать это просто .

Наконец, мне удалось открыть ящик, используя приведенный ниже код

 /** * As we use app compat it seems Solo#setNavigationDrawer is not doing well * (drawer does not open, but the button is clicked) * * Same result for clickOnView(getView(android.R.id.home)) * * This code opens the navigation drawer on the main thread * Be aware : you need to provide your DrawerLayout id (you can do it in params) */ public void openCompatNavigationDrawer() { getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { ((DrawerLayout) mSolo.getView(R.id.drawer_layout)) .openDrawer(Gravity.LEFT); } }); } 

Gist доступен здесь https://gist.github.com/quentin7b/9b51a3827c842417636b

Открытая навигация на ящике: solo.clickOnScreen(50, 50);

Выберите элемент списка в навигации ящика:

ListView listView = (ListView) solo.getView(R.id.left_drawer); View SwitchOrganizations = listView.getChildAt(0); solo.clickOnView(SwitchOrganizations);