Intereting Posts
Pojo анализирует gson с недопустимыми именами java Как создать глобальную переменную в android? Конфигурация с именем «по умолчанию» не найдена при построении проекта андроида на градле Android: активность использует старое намерение при запуске приложения из недавней задачи Как легко удалить ненужные ресурсы локализации из добавленных библиотек в релизе APK Открытие URL-адреса с использованием собственного браузера PlayBook из приложения на базе Android Курсор Android SQLite загружает сразу все записи в память? Тесты для Android: стабилизация с помощью Mockito Как запустить мой код Go в Android? Стиль кнопки в AlertDialogs Как избежать DEX 64K LIMIT путем импорта правильной библиотеки Android SDK скачать с Eclipse, получение сообщения об ошибке: Не удалось создать каталог C: / Как я могу получить доступ к значению BuildConfig в моем файле AndroidManifest.xml? Как вставить в sqlite в android Каково максимальное количество эмуляторов Android, работающих с Intel HAXM на одном ПК?

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

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

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

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

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

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

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

Я столкнулся с той же проблемой с нашими испытаниями 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);