TestFx - Как проверить диалоги проверки без идентификаторов

У меня есть приложение с сеткой записей и кнопка вставки. После нажатия кнопки "Вставить" появляется форма, в которой вы заполняете данные и нажимаете "ОК" для добавления новой записи в таблицу. После нажатия кнопки "ОК" открывается окно проверки с информацией об ошибках, если любое из текстовых полей не соответствует правилам проверки. Есть ли возможный способ проверить текст в диалоге с textFx, если диалог не имеет идентификатора?

1 ответ

Решение

Это пример для Alert основанный диалог:

В вашем тесте:

alert_dialog_has_header_and_content(
    "Removing 'Almaty' location", "Are you sure to remove this record?");

У тебя вспомогательный тестовый класс:

public void alert_dialog_has_header_and_content(final String expectedHeader, final String expectedContent) {
    final javafx.stage.Stage actualAlertDialog = getTopModalStage();
    assertNotNull(actualAlertDialog);

    final DialogPane dialogPane = (DialogPane) actualAlertDialog.getScene().getRoot();
    assertEquals(expectedHeader, dialogPane.getHeaderText());
    assertEquals(expectedContent, dialogPane.getContentText());
}

private javafx.stage.Stage getTopModalStage() {
    // Get a list of windows but ordered from top[0] to bottom[n] ones.
    // It is needed to get the first found modal window.
    final List<Window> allWindows = new ArrayList<>(robot.robotContext().getWindowFinder().listWindows());
    Collections.reverse(allWindows);

    return (javafx.stage.Stage) allWindows
            .stream()
            .filter(window -> window instanceof javafx.stage.Stage)
            .filter(window -> ((javafx.stage.Stage) window).getModality() == Modality.APPLICATION_MODAL)
            .findFirst()
            .orElse(null);
}

Я знаю, что эта проблема немного устарела и, вероятно, была исправлена, но для целей документации, если кто-то другой ищет исправление для такой же проблемы, я вижу dialog.getDialogPane()в документации по диалогу, которая поможет найти конкретные элементы управления внутри панели. Итак, дальше по запросу @plaidshirt мы могли получать кнопки и поля ввода с помощью:

dialog.getDialogPane().lookupAll()

Затем сузьте это, например, до кнопок и полей ввода.

Другие вопросы по тегам