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:
- En su actividad de prueba, conserve una instancia del objeto de menú que se pasa enCreateOptionsMenu y acceda a su caso de prueba.
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));