TestFX 4从ChoiceBox / Menu中选择一个值

时间:2016-08-19 08:20:31

标签: java javafx testfx

我在这里试图让我的TestFX机器人点击Menu然后点击MenuItem

以上所有类别均来自Node,因此我无法使用fxRobot.clickOn(Node node)

有没有其他人知道如何做到这一点?除了简单地使用TextMatcher,它搜索整个范围。

带菜单的MenuBar示例:

<MenuBar fx:id="mainMenuBar">
        <menus>
            <Menu mnemonicParsing="false" style="-fx-font-weight: bold;" text="MainMenu">
                <items>
                    <MenuItem mnemonicParsing="false" style="-fx-font-weight: normal;" text="About" />
                    <MenuItem mnemonicParsing="false" style="-fx-font-weight: normal;" text="Exit" />
                </items>
            </Menu>

如何实现机器人点击顶部Menu(最好是菜单的可见文本)和里面的menuItem(最好通过视觉文本选择)

ChoiceBox示例:

<ChoiceBox fx:id="myChoices" />

它的项目是从我的控制器动态填充的:

@FXML private ChoiceBox myChoices;

@FXML
public void initialize() {
    List<String> items = ItemsRepo.getItems();
    myChoices.setItems(FXCollections.observableArrayList(items))
}

我可以先通过它fx:id点击choiceBox。但是,我如何选择其中一项?优选地从项目可见文本。项目文本可能会干扰应用程序内的其他文本。所以我想确保点击其中一个选项框项目,而不是其他一些文本。

此致

2 个答案:

答案 0 :(得分:2)

我必须在我的测试用例中填写一个PopUp表单,其中包含一些ChoiceBox输入字段。 ChoiceBox的项目在PopUp下方的场景中可见,因此无法通过文本找到项目(机器人通常单击另一个文本)。我用下面的FxRobotInterface实现了这个目的。

clickOn("#choiceBox");
type(KeyCode.DOWN);
type(KeyCode.ENTER);

像这样选择了ChoiceBox的第一项。您无法完全控制使用此解决方案选择的项目,因为项目可能会更改,但它适用于我的情况。

答案 1 :(得分:0)

如果您有场景,可以在MenuBar上使用查找,这是场景中的节点。

@(await Component.InvokeAsync<MyViewComponent>(new { config = new MyConfiguration () { color: "red" }}))

您需要在标识符前面加上“#”。拥有MenuBar后,您可以遍历菜单和每个菜单中的菜单项。