验证comboBox的文本

时间:2016-03-07 07:21:51

标签: javafx testfx

我正在使用https://github.com/TestFX/TestFX进行javafx客户端的gui测试。使用testfx查询,我得到了comboBox,但我无法获取其文本进行验证。 comboBox显示枚举值,其文本由转换器和给定资源包解析。 comboBox的场景图如下所示:

javafx.scene.control.ComboBox
    javafx.scene.layout.StackPane:arrow-button
        javafx.scene.layout.Region:arrow
    com.sun.javafx.scene.control.skin.ComboBoxListViewSkin$4$1:null
        com.sun.javafx.scene.control.skin.LabeledText:null

comboBox.getValue()只给我枚举值而不是文本(我可以验证枚举值,但因为它是gui测试,所以应该验证显示的文本)。通过尝试,我发现comboBox.getChildrenUnmodifiable().toString()打印

[StackPane[id=arrow-button, styleClass=arrow-button], ComboBoxListViewSkin$5[id=list-view, styleClass=list-view], ComboBoxListViewSkin$4$1@4f65f1d7[styleClass=cell indexed-cell list-cell]'StringOfInterest']

最后的字符串'StringOfInterest'正是我所需要的,但目前还不清楚它来自哪里。通过查看javafx的源代码,似乎正在使用Node#toString。但是,目前还不清楚最后一部分('StringOfInterest')的来源。我试图获取ComboBox的所有子项的文本,但有问题的字符串不是它的一部分。

如何提取字符串?

1 个答案:

答案 0 :(得分:1)

我找到了一种使用TestFX 4和JavaFX 12在组合框上获取文本的方法。不确定以下内容是否也可以在其他版本上使用。诚然,它感觉有些脆弱和脆弱,但是却给了我想要的结果。

ComboBox<String> comboBox = robot.lookup("#comboBox").queryComboBox();
ListCell<String> listCell = robot
    .from(comboBox)
    .lookup((Node node) -> node.getStyleClass().contains("list-cell") 
        && node.getParent() instanceof ComboBox)
    .<ListCell<String>>query();

我首先尝试仅使用lookup(".list-cell"),但这实际上给了我两个结果,一个结果为null,另一个为所需的文本。具有null的一个嵌套在场景图中的某个位置,但是我们感兴趣的一个具有组合框作为父级。这就是查找检查的内容。

您现在可以验证组合框的文本:

assertThat(listCell.getText()).isEqualTo("expected text");