Подтвердить что ты не робот

Тест Robotium UI для приложения с навигационным ящиком

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

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

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

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

Возможно, кто-то уже исправил эту проблему?

4b9b3361

Ответ 1

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

Ответ 2

Я тоже использую 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

Ответ 3

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

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

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