我在这里试图让我的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。但是,我如何选择其中一项?优选地从项目可见文本。项目文本可能会干扰应用程序内的其他文本。所以我想确保点击其中一个选项框项目,而不是其他一些文本。
此致
答案 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后,您可以遍历菜单和每个菜单中的菜单项。