TestFx-如何测试javaFx菜单项

TestFx-如何测试javaFx菜单项,javafx,menuitem,testfx,Javafx,Menuitem,Testfx,因为MenuItem不是节点,所以我无法查找它。如果某些菜单项被禁用,如何进行测试? 我试图查找它,因为它是一个节点,它返回了一些东西,看起来像这样 (返回对象的toString表示形式): (ContextMenuContent$MenuItemContainer[id=mnEditHrom,styleClass=菜单项]) 但我不能对其强制转换MenuItem,它说“节点不能转换为MenuItem”,当我对返回的内容调用isDisabled()函数时,我得到了错误的信息 假设我有一个带有“m

因为MenuItem不是节点,所以我无法查找它。如果某些菜单项被禁用,如何进行测试? 我试图查找它,因为它是一个节点,它返回了一些东西,看起来像这样

(返回对象的toString表示形式):

(ContextMenuContent$MenuItemContainer[id=mnEditHrom,styleClass=菜单项])

但我不能对其强制转换MenuItem,它说“节点不能转换为MenuItem”,当我对返回的内容调用isDisabled()函数时,我得到了错误的信息

假设我有一个带有“mnEdit”id的MenuItem,它是禁用的。当我打电话时

find("#mnEdit").isDisabled();
它返回false。查找方法如下所示:

public <T extends Node> T find(String query) 
{
  return (T) lookup(query).queryAll().iterator().next();
} 
public无法找到(字符串查询)
{
return(T)lookup(query).queryAll().iterator().next();
} 

同样,我如何在testFx中测试某些菜单项是否被禁用?

我通过查找菜单栏来解决这个问题,通过它的Id识别我要测试的项,因为我现在手头有菜单项obejct,我可以调用它的isDisable()

菜单测试类

CommonTests common = new CommmonTests();  

@Test
public void disabledMenuItemTest() 
{
  common.disabledMenuItemTest("#mainMenu", "mnEditHrom", true);
}
普通类

TestUtils utils = new TestUtils();

public void disabledMenuItemTest(String menuBarSelector, String menuItemId, boolean expected)
{
  Boolean actual = utils.isMenuItemDisabled(menuBarSelector, menuItemId);
  if (actual != null)
    assertEquals("MenuItem "+menuItemId+" je enabled/disabled (expected = "+expected+").", expected, actual.booleanValue());
  else
    fail("MenuBar/MenuItem not found.");
}
TestUtils.class

public Boolean isMenuItemDisabled(String menuBarSelector, String menuItemId)
{
  ArrayList<MenuItem> list = getAllMenuItems(menuBarSelector);
  Boolean disabled = null;
  if(list != null)
  {
    for(MenuItem item : list)
    {
      if(item.getId() != null && item.getId().equals(menuItemId))
        return item.isDisable();
    }
  }
  return disabled;
}

private ArrayList<MenuItem> getAllMenuItems(String menuBarSelector)
{
  ArrayList<MenuItem> itemsList = new ArrayList<MenuItem>();
  MenuBar menuBar = (MenuBar) find(menuBarSelector);
  if(menuBar != null)
  {
    menuBar.getMenus().forEach(menu -> {
      menu.getItems().forEach(menuItem -> {
        itemsList.add(menuItem);
      });
    });
    return itemsList;
  }
  return null;
}
public Boolean isMenuItemDisabled(字符串菜单项选择器,字符串菜单项选择器)
{
ArrayList=getAllMenuItems(菜单选择器);
布尔禁用=空;
如果(列表!=null)
{
用于(菜单项:列表)
{
if(item.getId()!=null&&item.getId().equals(menuItemId))
返回项.isDisable();
}
}
返回残疾人;
}
专用ArrayList getAllMenuItems(字符串菜单选择器)
{
ArrayList itemsList=新的ArrayList();
菜单栏菜单栏=(菜单栏)查找(菜单栏选择器);
如果(菜单栏!=null)
{
menuBar.getMenus().forEach(菜单->{
menu.getItems().forEach(menuItem->{
itemsList.add(菜单项);
});
});
返回项目列表;
}
返回null;
}

您在原始帖子中几乎完成了。获取
MenuItemContainer
时,首先获取
MenuItem
,最后调用
isDisable()

ContextMenuContent.MenuItemContainer actualMenuItemContainer = find("#mnEdit");

boolean actualResult = actualMenuItemContainer.getItem().isDisable();