【发布时间】:2020-09-10 04:53:31
【问题描述】:
我在使用 TestFx 测试 JavaFX 应用程序时遇到问题。 我放了一个示例,仅使用 VBox 而不是我在实际应用程序中使用的 BorderPane。我只是用画布填充窗格,不要让它为空,但有或没有任何变化。
public class MainPanelTest extends ApplicationTest {
Pane toTest;
boolean pressed = false;
@Override
public void start(Stage stage) {
toTest= new VBox(new Canvas(800,800));
toTest.setOnKeyPressed(e -> {
System.out.println("Pressed");
pressed = true;
});
stage.setScene(new Scene(toTest));
stage.show();
stage.toFront();
}
@Test
public void test_keyPressed_D() {
clickOn(toTest);
press(KeyCode.D);
WaitForAsyncUtils.waitForFxEvents();
assertTrue(pressed);
}
}
例如,如果我使用 TextField 而不是窗格,则一切正常:
public class MainPanelTest extends ApplicationTest {
TextField toTest;
boolean pressed = false;
@Override
public void start(Stage stage) {
toTest= new TextField();
toTest.setOnKeyPressed(e -> {
System.out.println("Pressed");
pressed = true;
});
stage.setScene(new Scene(toTest));
stage.show();
stage.toFront();
}
@Test
public void test_keyPressed_D() {
clickOn(toTest);
press(KeyCode.D);
WaitForAsyncUtils.waitForFxEvents();
assertTrue(pressed);
}
}
这里有什么我遗漏的吗?在实际应用中,当我按下一个键时,事件被正确捕获。
【问题讨论】:
-
密钥只传递给focusOwner
-
谢谢,但我该如何测试呢?在按键之前我已经模拟了面板上的点击,不应该关注它吗?而在实际应用中,如果我按下一个键,事件就会被处理,那么如何在 testfx 中模拟呢?
-
我想补充一点,如果 Pane 有 setOnKeyPressed 方法,这意味着它可以管理按键的按下,并且实际上在实际应用程序中它可以工作。问题只是在 TestFx 中,或者我的设置有问题。你能告诉我一个测试它的方法吗?