【问题标题】:TestFX 4 Selecting a value from ChoiceBox / MenuTestFX 4 从选择框/菜单中选择一个值
【发布时间】:2016-12-26 08:02:48
【问题描述】:

我在这里摸不着头脑,试图让我的 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 fx:id="myChoices" />

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

@FXML private ChoiceBox myChoices;

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

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

问候

【问题讨论】:

  • 在这里添加代码。我会告诉你怎么做
  • @Prabhakargaali 我添加了一些示例代码

标签: java javafx testfx


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢 Fiona,但是,当我通过 id 获得我的 MenuBar 并循环通过它的 MenuItems 时,我将如何点击我想要的那个?就像我在最初的问题中提到的那样,FXRobot 只能点击源自Node 的项目,而MenuItem 不被视为Node。我可以只使用TextMatcher 来单击它,但我想将匹配器范围限制为活动的Menu(而不是搜索任何可见文本)
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多