在窗格上测试setOnKeyPressed时,TestFX不起作用

时间:2020-05-23 10:10:16

标签: javafx testfx

在用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);
    }
}

这里缺少什么吗?在实际应用中,当我按下一个键时,事件被正确捕获。

1 个答案:

答案 0 :(得分:2)

我想出了如何测试它,需要明确要求窗格的请求焦点。 只需添加此行const proxy = require("http-proxy-middleware"); module.exports = app => { app.use(proxy.createProxyMiddleware("/api", { target: "http://localhost:3001/" })); };

此测试通过:

toTest.requestFocus();