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()
Затем сузьте это, например, до кнопок и полей ввода.