Статьи

15+ полезных фрагментов кода Robotium для автоматизации тестирования Android

Robotium — это мощная платформа автоматизации тестирования Android. Он может быть использован для создания надежных приложений с использованием модульных, функциональных и автоматических тестов пользовательского интерфейса черного ящика.

Когда я впервые посмотрел на Robotium, он звучал почти как Selenium (для веб-приложений). Хотя имена похожи, они не связаны. Robotium разработан другой группой разработчиков.

Я перепробовал несколько библиотек для тестирования Android ( http://www.javacodegeeks.com/2011/06/android-dependency-injection-testing.html ) и не смог полностью выполнить требования тестирования моего приложения.

После нескольких месяцев программирования в Robotium я понял, что это хороший кандидат на участие в среде непрерывной интеграции android и jenkins — http://www.javacodegeeks.com/2012/09/android-and-jenkins-continuous.html

В последние несколько недель я начал изучать более глубокие возможности Robotium, и он мне понравился. Я был любителем селена (веб-драйвера) и собрал несколько фрагментов кода для веб-драйвера (оказался удобным для обмана кода :)). Поэтому я решил сделать то же самое для Robotium. Я использовал его для реального тестирования приложений и собрал несколько часто используемых фрагментов кода, которые могут оказаться полезными для других новичков, включая меня.

Ниже приведены некоторые часто используемые фрагменты кода для тестирования с использованием фреймворка robotium.

Сделать скриншот

Сделать снимок любого экрана Android легко с помощью метода takeScreenshot.

1
solo.takeScreenshot()

Метод takeScreenshot () сохраняет изображение в папке «/ sdcard / Robotium-Screenshots /» на устройстве.

Для этого потребуется разрешение на запись (android.permission.WRITE_EXTERNAL_STORAGE) в AndroidManifest.xml тестируемого приложения.

Проверьте, существует ли элемент кнопки

Часто требуется проверить, появляется ли кнопка на экране. Мы можем захотеть сделать дальнейшие действия, как только кнопка будет найдена. Это может быть достигнуто методом searchButton.

1
solo.searchButton("My Beautiful Button", true )

Обратите внимание, что текст кнопки предоставляется в качестве первого параметра, а второй параметр указывает, что метод вернет видимый объект кнопки. Возможно, вы захотите установить значение false, если хотите проверить также наличие невидимых кнопок.

1
Running Same Test cases on Two Different Devices

Тестирование приложений для Android на нескольких устройствах является обычной потребностью. Хотя со стороны robotium не требуется ничего особенного, вы можете использовать опцию команды adb, чтобы запустить его на определенном устройстве.

Флаг -s в команде adb может использоваться для указания на конкретное устройство. Если вы хотите запустить на двух устройствах, вы можете открыть два терминала и выполнить команду, указывающую на два разных устройства. Это запустит тестовые случаи на обоих устройствах параллельно.

Допустим, мы хотим запустить два разных теста на 2 подключенных устройствах Android. Команда ниже должна перечислить оба устройства

1
adb devices

Вывод команды

1
2
3
List of devices attached
SER1   device1
SER2   device2

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

1
2
3
adb -s SER1 shell am instrument -w -e class com.test.Test1 com.test/android.test.InstrumentationTestRunner
 
adb -s SERIALOFDEVICE2 shell am instrument -w -e class com.test.Test2 com.test/android.test.InstrumentationTestRunner

где

1
2
com.test.Test1
com.test.Test2

Тестовые классы, которые мы хотим запустить на каждом устройстве.

Как симулировать долгое нажатие на экран Robotium

Длительное нажатие можно выполнить с помощью метода clickLongOnScreen, который принимает два параметра для местоположения (x, y) на экране. пример

1
solo.clickLongOnScreen(10, 15);

андроид-координаты

Если вы не уверены, что координаты x, y на экране устройства ниже, изображение может быть полезным

Как поддерживать порядок испытаний Robotium

Если вы хотите выполнить тестовые наборы в определенном порядке, вы можете использовать тестовые наборы. Простой пример показан ниже.

1
2
3
4
5
6
7
public static final MyTest suite() {
    TestSuite testSt = new TestSuite();
    testSt.addTest(new SampleTestCase("one"));
   testSt.addTest(new SampleTestCase("two"));
 
return testSuite;
}

Дождитесь окончания активности

Ожидание завершения действия может потребоваться в нескольких тестовых случаях. Вы можете выполнить тестовые действия после завершения действия. Для этого можно использовать метод waitForActivity.

1
solo.waitForActivity(solo.getCurrentActivity().toString());

Ждите тост, чтобы появиться

Прямого метода ожидания тоста не существует, однако вы можете использовать обходной путь, ожидая появления текста (который находится внутри тоста)

1
solo.waitForText("Some text inside toast");

Подождите, пока вид исчезнет

Не существует прямого метода для ожидания исчезновения вида, однако вы можете использовать обходной путь, ожидая условие, чтобы поле стало невидимым. Допустим, у нас есть текстовое представление. Мы можем использовать приведенный ниже фрагмент кода, чтобы дождаться, пока textField станет невидимым.

1
2
3
4
5
6
7
TextView textField = solo.getText("My Text Value", true);
 solo.waitForCondition(new Condition() {
@Override
public boolean isSatisfied() {
return textField.getVisibility() == View.INVISIBLE;
}
}, 1000);

Обратите внимание, что здесь мы использовали реализацию анонимного класса. Вы всегда можете создать класс для одного и того же, если будете часто использовать этот фрагмент кода.

Условное ожидание — как и в предыдущем примере, мы можем указать пользовательские условия в методе ожидания, который оказывается действительно полезным для настраиваемой программируемой конфигурации ожидания. Ниже приведена подпись метода ожидания условия. Он также имеет поле тайм-аута, которое может быть вашим верхним пределом времени ожидания условия.

1
solo.waitForCondition(Condition condition, int timeout);

Ждать фрагмента

Ожидание фрагмента — поддерживаемый метод в robotium. Просто нужно вызвать метод waitForFragmentByTag

1
solo.waitForFragmentByTag("MyTag");

Вышеуказанный фрагмент кода ожидает фрагмент, соответствующий указанному тегу (MyTag).

1
solo.waitForFragmentByTag("MyTag", 100);

Вышеупомянутый фрагмент кода будет ожидать фрагмента до 100 мс и продолжит выполнение.

Как проверить текстовое значение в текстовом представлении

1
2
3
4
5
TextView textV = solo.getText("My Expected Value");
 
// if textV is not null than may be we do not need next line.
 
assertEquals("My Expected Value", textV.getText().toString());

Как скрыть программную клавиатуру

Скрытие программной клавиатуры является обычной потребностью, и у robotium есть метод для этого. Простой вызов метода hideSoftKeyboard скрывает программную клавиатуру.

1
solo.hideSoftKeyboard();

Как вернуться назад

Вернуться к предыдущему экрану легко с robotium. Просто используйте метод back ().

1
solo.goBack();

Как проверить, достаточно ли памяти доступно на устройстве

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

1
solo.assertMemoryNotLow();

Как очистить файл журнала с помощью робота API

Очистка файла журнала с использованием метода robotium clearLog действительно полезна, особенно если у вас есть длительные тестовые случаи и огромные файлы журнала, потребляющие память устройства.

1
solo.clearLog();

Как удалить текст из редактируемого текстового поля

Вы можете очистить текст из поля EditText, используя код ниже

1
solo.clearEditText(editText object);

Как переписать обновление / ввод текста в редактируемом текстовом поле

При вызове метода ниже будет перезаписано существующее содержимое EditField.

1
solo.enterText(editText, "new value on field");

Как добавить текст в редактируемое текстовое поле

Нет специального метода для добавления текста в поле EditText, поэтому вам может потребоваться сделать это путем извлечения старого значения и добавления нового значения к нему.

1
solo.enterText(editText, editText.getText() + "new value on field");

Как установить дату в объекте выбора даты

Мы можем использовать метод setDatePicker для установки конкретных дат в приложении, используя robotium

1
solo.setDatePicker(datePicker, 2014, 1, 5)

Устанавливает дату (1 апреля 2014 г.) в указанном DatePicker.

Резюме

Мои тестовые случаи были в основном сфокусированы на нативных приложениях для Android, поэтому эти фрагменты кода более полезны для нативных приложений. Я уверен, что гибридные приложения могут иметь аналогичную функцию. Не стесняйтесь предлагать больше фрагментов, и это может стать действительно удобным ресурсом.

Я надеюсь, что вы нашли этот пост полезным, не забудьте поделиться или добавить эту страницу в закладки.

Если вам понравилось, подпишитесь на нашу новостную рассылку, чтобы получать еженедельные обновления и бесплатные обзоры! Кроме того, проверьте JCG Academy для более углубленного обучения!

Рекомендации:

Официальный сайт: http://code.google.com/p/robotium/

Вопросы и ответы

Я рекомендую вам просмотреть страницы часто задаваемых вопросов, прежде чем отправлять вопрос на любом форуме:

Форумы

Официальный форум для обсуждения вопросов, связанных с robotium: