TestFx - 如何测试没有 ID 的验证对话框
TestFx - How to test validation dialogs with no ids
我有一个带有记录网格和按钮插入的应用程序。点击插入后,会出现一个表格,填写数据后点击确定,即可将新记录添加到网格中。单击“确定”后,如果任何文本字段与验证规则不匹配,则验证会触发带有错误信息的对话框。如果对话框没有 ID,是否有任何可能的方法来使用 textFx 测试对话框上的文本?
这是基于 Alert
的对话框的示例:
在你的测试中:
alert_dialog_has_header_and_content(
"Removing 'Almaty' location", "Are you sure to remove this record?");
在你帮手测试class:
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 文档中看到了 dialog.getDialogPane()
,这将有助于查找用于窗格内的特定控件。因此,在@plaidshirt 查询中,我们可以通过以下方式检索按钮和输入字段:
dialog.getDialogPane().lookupAll()
然后将范围缩小到按钮和输入字段等。
我有一个带有记录网格和按钮插入的应用程序。点击插入后,会出现一个表格,填写数据后点击确定,即可将新记录添加到网格中。单击“确定”后,如果任何文本字段与验证规则不匹配,则验证会触发带有错误信息的对话框。如果对话框没有 ID,是否有任何可能的方法来使用 textFx 测试对话框上的文本?
这是基于 Alert
的对话框的示例:
在你的测试中:
alert_dialog_has_header_and_content(
"Removing 'Almaty' location", "Are you sure to remove this record?");
在你帮手测试class:
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 文档中看到了 dialog.getDialogPane()
,这将有助于查找用于窗格内的特定控件。因此,在@plaidshirt 查询中,我们可以通过以下方式检索按钮和输入字段:
dialog.getDialogPane().lookupAll()
然后将范围缩小到按钮和输入字段等。