使用Java模拟JUnit Test中的键输入

时间:2013-05-07 22:02:23

标签: java keypress awtrobot

我想模拟按Enter键。我尝试使用机器人类,但它似乎不起作用:

robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
try{Thread.sleep(50);}catch(InterruptedException e){}
robot.keyRelease(KeyEvent.VK_ENTER);

在我的主要代码中,我有

 public void keyPressed(KeyEvent e) {
        if (e.getKeyChar() == KeyEvent.VK_ENTER) {
            System.out.println("ENTER KEY PRESSED");
            // DO SOMETHING;
        }
    }

因此,如果keyPress已注册,则控制台应打印出" ENTER KEY PRESSED",但它没有这样做。

感谢您的帮助!

此外,如果您知道在没有机器人课程的情况下模拟关键事件的方法,请在下面发布:)。

来源:How to simulate keyboard presses in java?

2 个答案:

答案 0 :(得分:2)

问题不仅在于您使用Robot的方式。

KeyListener只会在其附加的组件具有焦点并且具有焦点时才会响应。

首先,请勿使用KeyListener,而是使用key bindings,这将有助于解决焦点问题。

其次,确保您尝试与实际键盘焦点交互的窗口(并且焦点不在将使用 Enter 键的控件上)

答案 1 :(得分:0)

我假设您之前已将KeyListener添加到您的组件中。如果没有,请使用:

yourComponent.addKeyListener(yourKeyListener);

如果您已经这样做但仍然无效,可能您没有请求对您添加KeyListener的组件进行焦点

尝试在robot.keyPress

之前添加此内容
yourComponent.requestFocus();

yourComponent是应该生成KeyPressed事件的组件