繁体   English   中英

如何使用Robotium检查操作栏菜单项是否存在

[英]How to use robotium to check if an action bar menu item is present

我在ActionBar中有一些菜单项是动态修改的(例如,如果用户登录,则删除“登录”菜单项,并用“注销”项替换,等等)。

因此,基本上,我试图使用robotium来测试此功能,并且我想尝试加载视图并检查其是否存在,例如:

assertNull(solo.getView(R.id.action_login)); // action_login is an action bar menu item

但是,由于出现以下错误,该方法无法正常工作:

View with id: 'XXX' is not found!

知道如何测试这种功能吗? 谢谢

最简单的方法是按照以下方式创建一个辅助方法:

public boolean viewExist(int id){
    try{
        solo.getView(id);
        return true;
    }catch(AssertionError e){
        return false;
    }
}

您可以调用菜单项并验证调用是否成功;

assertTrue(getInstrumentation().invokeMenuActionSync(activity, R.id.action_login, 0));

我在几分钟前想通的方法如下:

  1. 单击溢出按钮本身(三个点)。 为此,找到一个类型为ActionMenuView的视图。 可以按照以下步骤完成:

     assertTrue("Couldn't fetch overflow button", solo.waitForView(ActionMenuView.class, 1, 500)); ArrayList<ActionMenuView> actionMenuView = solo.getCurrentViews(ActionMenuView.class); assertFalse("Couldn't fetch overflow button", actionMenuView.isEmpty()); solo.clickOnView(actionMenuView.get(0)); 
  2. 等待ID等于正确项目ID的视图使我失败了。 所以我要做的是等待项目的字符串出现。

     assertTrue("Action item not present", solo.waitForText( solo.getCurrentActivity().getString(R.string.my_action_string), 1, 500 ) ); 

可能已经注意到,此方法具有严重的缺陷-不仅要求操作栏项目字符串具有唯一性,而且如果看到其他操作栏按钮,则单击溢出可能会失败。 除此之外,它在我的情况下仍然有效-通过上述测试即可通过。 但是,如果有关单击溢出按钮的行被注释掉,则它将失败(按预期)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM