Intereting Posts
Вызов setCompoundDrawables () не отображает Compound Drawable Поддерживает ли Android виджет, такой как iPhone UIPickerView Отображение изображения, загруженного из Интернета как аннотация – использование Picasso Android Studio: «Предупреждение libpng: iCCP: не распознавание известного профиля sRGB, который был отредактирован» Шифрование и расшифровка строк RSA на Android Android Studio 2.2: я продолжаю видеть, что «инструменты GPU не установлены, установите сейчас» Это как планировать java-метод для запуска через 1 секунду? Масштабирование проблемы на Android – почему картина такая неуклюжая? Как использовать Dagger 2 с Buck, содержащим множество модулей buck? Почему обновление виджета моего приложения в API 3 или 4? Дублированная анимация после обновления на Android Jelly Beans Как я могу узнать, что моя система доступна Gradle buildToolsVersion Эмулятор android и локальный сайт Android получает общий текстовый файл, но не передает текстовое содержимое Скрытие ключа шифрования в приложении для Android

Пользовательский интерфейс 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);