TestFx - Как протестировать javaFx MenuItems

Поскольку MenuItem не является узлом, я не могу его найти. Как проверить, отключен ли какой-либо элемент меню? Я попытался найти его, поскольку это был узел, и он вернул мне что-то вроде этого.

(toString представление возвращаемого объекта):

(ContextMenuContent$MenuItemContainer[id=mnEditHrom, styleClass=элемент меню])

Но я не могу использовать для этого MenuItem, он говорит: «Узел не может быть преобразован в MenuItem», и когда я вызываю функцию isDisabled() для того, что было возвращено, я получаю неверную информацию.

Допустим, у меня есть MenuItem с идентификатором «mnEdit», который отключен. когда я звоню

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

он возвращает ложь. Метод поиска выглядит так:

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

Итак, еще раз, как мне проверить, отключен ли какой-либо MenuItem в testFx?


person Mono    schedule 21.02.2018    source источник


Ответы (2)


Вы почти закончили в исходном посте. Когда вы получите MenuItemContainer, сначала получите MenuItem и, наконец, вызовите isDisable():

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

boolean actualResult = actualMenuItemContainer.getItem().isDisable();
person Dmytro Maslenko    schedule 03.03.2018

Я решил это, просматривая MenuBar, определяя элемент, который я хочу протестировать, по его идентификатору, и, поскольку теперь у меня есть объект MenuItem в руках, я могу вызвать для него isDisable().

MenuTest.класс

CommonTests common = new CommmonTests();  

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

CommonTests.класс

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.класс

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;
}
person Mono    schedule 22.02.2018