Добавить в корзинуПозвонить
Найти в Дзене

Автотесты. UI Automator и Espresso.

Начнём с того, что я не тестировщик. Но по работе пришлось заняться автотестами и познакомиться с этими фреймворками. Данная статья предназначена только для начинающих, которые не знают с чего начать. Чем они отличаются? UI Automator — это обычный кликер. Он работает с настоящим девайсом и просто нажимает, куда мы говорим. Тут самым сложным для меня было — заставить его нажимать на вью, используя id из ресурсов. Espresso — это специальная библиотека для тестов с тестовым контекстом. Я так и не смогла понять, можно ли её использовать с контекстом самого устройства, чтобы ничего не мокать. Автотесты у меня самые простые, поэтому espresso я использовала просто для сравнения и проверок. Сторонние библиотеки я не использовала, потому что сегодня они есть, а завтра нет. Небольшой итог и советы беднягам, которые тоже захотят написать автотесты:

Начнём с того, что я не тестировщик. Но по работе пришлось заняться автотестами и познакомиться с этими фреймворками. Данная статья предназначена только для начинающих, которые не знают с чего начать.

Чем они отличаются? UI Automator — это обычный кликер. Он работает с настоящим девайсом и просто нажимает, куда мы говорим. Тут самым сложным для меня было — заставить его нажимать на вью, используя id из ресурсов.

Espresso — это специальная библиотека для тестов с тестовым контекстом. Я так и не смогла понять, можно ли её использовать с контекстом самого устройства, чтобы ничего не мокать. Автотесты у меня самые простые, поэтому espresso я использовала просто для сравнения и проверок. Сторонние библиотеки я не использовала, потому что сегодня они есть, а завтра нет.

Небольшой итог и советы беднягам, которые тоже захотят написать автотесты:

  • Если у вас многомодульное приложение с красивой чистой архитектурой и Koin, то забудьте про Espresso. Серьезно. Я потратила почти 3 дня, но так и не смогла понять, как правильно сделать, чтобы всё работало с тестовым контекстом и с тестовым коином, не подтягивая реальную ViewModel. В какой-то момент хотелось просто сесть и плакать, потому что делаешь всё по инструкции, а в ответ ошибки. И интернет выдаёт священное ничего. Если вы когда-нибудь так делали, то расскажите об этом опыте, пожалуйста. Но интересует именно тот опыт, когда есть отдельный модуль app, к которому у нас нет доступа из нашего модуля, который тестируем.
  • UI Automator обычно ищёт вьюшки по тексту, но можно задать поиск по id. Но хотя сам метод выглядит максимально просто, намучилась я с ним достаточно. Итоговый вариант: device.findObject(UiSelector().resourceId("ru.package.anna:id/mybtn")). Что интересно, тут нет зависимости от модулей и всегда одинаковый пакет. Для меня это было не очевидно. ru.package.anna — основной пакет. Название модуля нигде писать не нужно.
  • Если у вас RecyclerView, то всё немного сложнее, но не безнадёжно. UI Automator видит только то, что открыто на самом экране. Если надо посчитать размер листа (т.е. количество элементов в списке), то я придумала только вариант создать список и прокручивать вниз, добавляя по одному элементу. Если есть лучше варианты, то тоже пишите. :)
  • Espresso очень удобно использовать для сравнения: assertEquals, assertNotNull, assertTrue и т.п.
  • Как свернуть клавиатуру? device.pressBack(). Тут тоже много гуглила. Надеюсь, кому-нибудь поможет.
  • Проверка, открыта ли клавиатура: https://stackoverflow.com/a/37708078/8665118
  • Печатать с помощью клавиатуры https://stackoverflow.com/a/44758432/8665118