2013-12-18 2 views
1

Я новичок в robotium, и я пытаюсь написать быстрый и грязный сценарий для запуска всех экранов в приложении.Robotium - Попытка нажать кнопку «Дом» в приложении

Проблема У меня в основном есть кнопка «домой» в приложении. Я пробовал много вариантов, но я не могу заставить его щелкнуть там, кроме как с индексом, чего я не хочу.

Когда я проверить кнопку с hierarchyviewer это выглядит следующим образом:

Link

Однако, когда я пытаюсь, например:

assertTrue(
"Wait for text (id: myapp.R.id.home) failed.", 
solo.waitForImageById("myapp.R.id.home", 20000)); 
solo.clickOnImage((ImageView) solo.findViewById("myapp.R.id.home"));    
solo.waitForActivity("MenuActivity"); 

Он терпит неудачу в waitForImageByID линии. Ive попробовал несколько опций, таких как waitForImageButton и т. Д., Но я просто не могу заставить его щелкнуть. Что мне здесь не хватает?

junit.framework.AssertionFailedError: View with id: '0' is not found! 
at com.jayway.android.robotium.solo.Solo.getView(Solo.java:1990) 
at com.jayway.android.robotium.solo.Solo.getView(Solo.java:1970) 
at com.bitbar.recorder.extensions.OtherUtils.a(OtherUtils.java:246) 
at com.bitbar.recorder.extensions.OtherUtils.b(OtherUtils.java:241) 
at com.bitbar.recorder.extensions.v.a(Waiter.java:71) 
at com.bitbar.recorder.extensions.ExtSolo.waitForImageButtonById(ExtSolo.java:4176) 
at com.example.android.apis.test.Test.testRecorded(Test.java:137) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) 
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1740) 
+0

У меня такая же проблема. У вас есть андроид: contentDescription для этого изображения? –

+0

Я не разработал это приложение самостоятельно, поэтому единственная информация, которую я имею, - это то, что я могу извлечь из иерархического просмотра. – Demoric

+0

Хорошо!Когда вы используете hierarchyviewer, вы видите восклицательный знак в треугольнике, который указывает, что на вашем экране есть узлы NAF? Посмотрите на это для получения дополнительной информации: http://stackoverflow.com/questions/20358149/naf-nodes-automation-with-robotium –

ответ

4

Используйте следующую строку, чтобы нажать на кнопку домой в панели действий

solo.clickOnActionBarHomeButton(); 
+0

Это не просто имитирует нажатие на кнопку дома на устройстве? Я пытаюсь щелкнуть представление в приложении, которое содержит изображение с идентификатором: home. В любом случае я попробовал ваше решение, но это меня больше не получало – Demoric

+0

Ive загрузил другое изображение uiautomator здесь: http://postimg.org/image/jq6a518vp/ В основном ими пытаюсь выбрать красную контурную часть. Справа вы можете увидеть иерархию элементов. – Demoric

+0

Мой первый ответ не работает во всех версиях ОС. Я обновил его с помощью этого лучшего и простого. –

0

Что об этом коде:

ArrayList<LinearLayout> ll = solo.getCurrentViews(LinearLayout.class); 
//You can change 1 with the ordinal number of LinearLayout you want to click. 
solo.clickOnView(ll.get(1)); 

или же

ArrayList<ImageView> iv = solo.getCurrentViews(ImageView.class); 
//You can change 0 with the ordinal number of Image you want to click. 
solo.clickOnView(iv.get(0)); 

Я думаю, если вы определите правильный идентификатор для v iew или линейного макета или изображения, он должен работать.

1

Проблема в том, что идентификатор, который он ссылается, не входит в ваше приложение, он находится в файле андроида по умолчанию R, попробуйте android.R.id.home, и он должен работать нормально. Стоит отметить, что если ваше приложение использует шпионский блок действий для поддержки панели действий до 4.0, это будет иметь другой идентификатор, и вам придется обрабатывать это в своем тесте.

Вы можете увидеть это сами смотрите: http://developer.android.com/reference/android/R.id.html

+0

Спасибо большое за этот комментарий, я полностью забыл об этом ... Хорошо работает сейчас! Приветствия! – Demoric

+0

Могли бы вы поддержать или принять мой ответ, чтобы люди знали, что это правильный ответ, если они страдают той же проблемой! –

+0

Я принял ваш ответ. Я только заметил, что теперь мой тест работает на моем S4 с 4.4 android. Но все же не работает в более старых версиях, это из-за действия bar sherlock? Как я могу это увидеть? – Demoric

1

При использовании ActionBarSherlock есть два различных Идентификаторы вы должны проверить, android.R.id.home для API-уровня> 11 и abs__home для нижнего (предоставлено ActionBarSherlock):

View homeButton = activity.findViewById(android.R.id.home); 
    if (homeButton == null) { 
     homeButton = activity.findViewById(R.id.abs__home); 
    } 
0

Ответ Дэйва C работал только частично для меня. Кнопка была нажата, но до того, как предыдущий экран был загружен, начались утверждения, и поэтому они всегда были ложными. Решение запустить «домашний» нажмите на главном потоке (Robotium 5.2.1):

getInstrumentation().runOnMainSync(new Runnable() { 
     @Override 
     public void run() { 
      solo.clickOnActionBarHomeButton(); 
     } 
}); 
0

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

View view = solo.getView("View_name_from_hierachy_viewer"); 
solo.clickOnView(view); 

View_name_from_hierachy_viewer в вашем случае будет «домашним». Сообщите мне, если это не сработает.

Смежные вопросы