test support ejemplos android testing junit android-actionbar

support - ¿Alguna forma de obtener una referencia para los elementos de la barra de acciones para las pruebas de Junit en Android?



ejemplos selenium webdriver (5)

¿Cómo escribo casos de prueba junit para artículos de la barra de acción en Android? ¿Alguna forma de obtener su referencia para realizar clics en ella?


Resolví al crear mi propia clase personalizada de MenuItem y al llamar onOptionsItemSelected (elemento MenuItem) para la actividad de forma manual. ¿Alguna otra forma adecuada de hacer esto para las pruebas de Junit?


Estoy usando una barra de acciones proporcionada por ActionBarSherlock y encontré este problema. La mejor manera que he encontrado para hacer esto es:

  1. En su actividad de prueba, conserve una instancia del objeto de menú que se pasa enCreateOptionsMenu y acceda a su caso de prueba.
  2. En tu caso de prueba, necesitarás una referencia a tu Instrumentación y al Menú que te permite seleccionar tu MenuItem por id:

    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); } });

    }


Puede simular haciendo clic en un elemento ActionBar como este:

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(); } }); }


En el siguiente ejemplo, puedo recuperar el botón de la pestaña de navegación de la barra de acciones (nativo o ActionBarSherlock). Luego hago clic en ellos con 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); } }


usar la biblioteca 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));