Frage

A Hello ,,, I'm using robotium framework for testing android apps and I used Robotium-actionbarsherlock extension to perform clicks on contextual actionbar menu item ...

Here's the function I'm using ,,,

public void clickOnActionModeOverflowMenuItem(String text) {
    Activity activity = solo.getCurrentActivity();
    Log.d("aaaa", activity.toString());
    if (!(activity instanceof SherlockFragmentActivity)) {
            throw new IllegalStateException("This method should be called only in SherlockFragmentActivity.");
    }

    ActionBarContextView actionBarContextView = null;

    try {
            ActionBarSherlock actionBarSherlock = (ActionBarSherlock) invokePrivateMethodWithoutParameters(
                SherlockFragmentActivity.class, "getSherlock", activity);
            Log.d("eeee", actionBarSherlock.toString());
            actionBarContextView = (ActionBarContextView) getPrivateField("mActionModeView", actionBarSherlock);
            Log.d("dddd", actionBarContextView.toString());

    } catch (Exception ex) {
            Log.d(LOG_TAG, "Can not find methods to invoke action mode overflow button.");
    }

    if (actionBarContextView == null) {
            Assert.fail("Contextual actionbar is not shown.");
    }

    actionBarContextView.showOverflowMenu();
    sleeper.sleep();
    clicker.clickOnText(text, false, 1, true, 0);
}

So, I'm asking about this line ..

actionBarContextView = (ActionBarContextView) getPrivateField("mActionModeView", actionBarSherlock);

How can I know the private field name ? As the function fails and throws the assertion fail of null actionBarContextView ...

War es hilfreich?

Lösung

You can download the source code for ActionBarSherlock, which should show you what you are looking for.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top