1

由于 MenuItem 不是节点,因此我无法查找它。如果某些 MenuItem 被禁用,我该如何测试?我试图查找它,因为它是一个节点,它返回给我一些东西,看起来像这样..

(返回对象的 toString 表示):

(ContextMenuContent$MenuItemContainer[id=mnEditHrom, styleClass=menu-item])

但是我不能在上面投射 MenuItem,它说“节点不能转换为 MenuItem”,当我对返回的内容调用 isDisabled() 函数时,我得到的信息不正确。

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

find("#mnEdit").isDisabled();

它返回假。查找方法如下所示:

public <T extends Node> T find(String query) 
{
  return (T) lookup(query).queryAll().iterator().next();
} 

再说一遍,我如何测试某些 MenuItem 在 testFx 中是否被禁用?

4

2 回答 2

2

你几乎在原帖中完成了。当你得到第MenuItemContainer一个MenuItem和最后一个电话时isDisable()

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

boolean actualResult = actualMenuItemContainer.getItem().isDisable();
于 2018-03-03T06:36:43.153 回答
0

我通过查找 MenuBar 来解决它,通过它的 Id 识别我想要测试的项目,因为我现在手头有 MenuItem 对象,所以我可以在它上面调用 isDisable()。

MenuTest.class

CommonTests common = new CommmonTests();  

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

CommonTests.class

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;
}
于 2018-02-22T10:03:20.377 回答