1

我在这里挠头,试图让我的 TestFX 机器人点击 a 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 fx:id="myChoices" />

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

@FXML private ChoiceBox myChoices;

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

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

问候

4

2 回答 2

3

我必须在我的测试用例中填写一个 PopUp 表单,该表单有一些 ChoiceBox 输入字段。ChoiceBox 的项目在弹出窗口下方的场景中可见,因此无法通过其文本找到项目(机器人通常单击文本的另一个出现位置)。我使用 FxRobotInterface 实现了这一点,如下所示。

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

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

于 2017-08-20T18:24:12.730 回答
0

如果你有场景,你可以在 MenuBar 上使用查找,它是场景中的一个节点。

MenuBar menuBar = scene.lookup("#menuBar");

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

于 2016-11-04T14:32:34.497 回答