ActivityInstrumentationTestCase2を継承したクラスのテストメソッドで確認しました。
invokeMenuActionSyncのパラメータは、
XMLではなく動的に追加したメニューの場合は、MenuItemをgetDeclaredFieldなり何らかの形で取得して、getItemIdで第二引数のIDを取得できます。以下、
コンパイル通してないですけど、こんな感じですかね。MenuItemはactivityからたどれそうな気もしますけど。
ちなみに、メニューとは関係なく、Viewとして取得できれば、view.performClick();として実行できます。ただし、JUnitからのViewの操作は、
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_MENU); getInstrumentation().invokeMenuActionSync(activity, net.takaiwa.R.id.menu_setting, 0);
invokeMenuActionSyncのパラメータは、
第一引数 | 対象Activity |
第二引数 | メニューアイテムのID xmlに定義したもの? |
第三引数 | なんかフラグ |
XMLではなく動的に追加したメニューの場合は、MenuItemをgetDeclaredFieldなり何らかの形で取得して、getItemIdで第二引数のIDを取得できます。以下、
Class c = mActivity.getClass(); Field field = c.getDeclaredField("mMenuItemHoge"); MenuItem menu_item = field.get(mActivity); getInstrumentation().invokeMenuActionSync(mActivity, menu_item.getItemId(), 0);
コンパイル通してないですけど、こんな感じですかね。MenuItemはactivityからたどれそうな気もしますけど。
ちなみに、メニューとは関係なく、Viewとして取得できれば、view.performClick();として実行できます。ただし、JUnitからのViewの操作は、
mActivity.runOnUiThread( new Runnable() { @Override public void run() { view.performClick(); } }); // 待機する getInstrumentation().waitForIdleSync();のように書いた方がいいかもしれません。
コメント
コメントを投稿