Любой способ получить ссылку на элементы панели действий для тестирования Junit в Android? - PullRequest
6 голосов
/ 11 января 2012

Как мне написать тестовые случаи junit для элементов панели действий в Android? Есть ли способ получить ссылку для выполнения событий клика на нем?

Ответы [ 5 ]

3 голосов
/ 06 июля 2012

Вы можете смоделировать щелчок элемента ActionBar следующим образом:

public void testButton(){
    final View view = activity.findViewById(com.example.R.id.button1);
    activity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            view.requestFocus();
            view.callOnClick();
        }
    });
}
1 голос
/ 16 января 2013

использовать библиотеку robotium.jar

import com.jayway.android.robotium.solo.Solo;

private Solo solo;
this.solo = new Solo(getInstrumentation(),getActivity());
//R.id.menu_action_signup Menu Iten id.
this.solo.clickOnView(this.solo.getView(R.id.menu_action_signup));
1 голос
/ 15 ноября 2012

В этом следующем примере я могу получить кнопку вкладки навигации на панели действий (нативная или ActionBarSherlock). Затем я нажимаю на них с помощью TouchUtils.clickView ():

try {

// Trying to get the ActionBar view '@id/android:action_bar_container' dynamically
int resId =
a.getResources().getIdentifier("action_bar_container", "id", "android");
View actionBarContainer = a.findViewById(resId);

// The class 'com.android.internal.widget.ActionBarContainer' must be in
// the classpath of this test project to be able to call
// the method 'getTabContainer' at runtime
Method getTabContainer =
com.android.internal.widget.ActionBarContainer.class.getMethod("getTabContainer",
(Class<?>[]) null);

HorizontalScrollView tabContainer =
(HorizontalScrollView) getTabContainer.invoke(actionBarContainer, (Object[]) null);
return ((ViewGroup) tabContainer.getChildAt(0)).getChildAt(tabIndex);

} catch (Exception e) {

// Trying with SherlockActionBar
com.actionbarsherlock.internal.widget.ActionBarContainer actionBarContainer =
(com.actionbarsherlock...) a.findViewById(R.id.abs__action_bar_container);

HorizontalScrollView tabContainer =
(HorizontalScrollView) actionBarContainer.getTabContainer();
return ((ViewGroup) tabContainer.getChildAt(0)).getChildAt(tabIndex);

}
}
0 голосов
/ 07 июня 2012

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

  1. В вашем тестовом задании сохраните экземпляр объекта Menu, переданный в onCreateOptionsMenu, и сделайте его доступным для вашего тестового примера.
  2. В вашем тестовом примере вам понадобится ссылка на ваш инструментарий и меню, позволяющее вам выбрать пункт меню с идентификатором:

    private void clickOnMenuItem(int menuItemId, Instrumentation instruments, Menu menuInstance) {
    final Integer itemId = menuItemId;
    final Menu menu = menuInstance;
    instruments.runOnMainSync(new Runnable() {
        @Override
        public void run() {
            menu.performIdentifierAction(itemId, 0);
        }
    });
    

    }

0 голосов
/ 13 января 2012

Я решил, создав свой собственный класс MenuItem и вызвав onOptionsItemSelected (элемент MenuItem) для Activity вручную. Есть ли другой способ сделать это для тестирования Junit?

...