繁体   English   中英

在测试过程中模拟鼠标单击。 JUnit,JavaFX

[英]Simulate a mouse click during test. JUnit, JavaFX

在我的测试方法中,我尝试使用Robot类模拟鼠标单击:

@Test
public void testMouseEvents(){
    clickMouse();
}

private void clickMouse() {
    final boolean[] flag = {true};
    Platform.runLater(() -> {
        try {
            Robot robot = new Robot();
            robot.mouseMove(900, 500);
            robot.delay(2000);
            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
            robot.delay(2000);
            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
            robot.delay(2000);
        } catch (Exception ignored) {

        }
        flag[0] = false;
    });

    try {
        while (flag[0]) {
            Thread.sleep(3);
        }
        Thread.sleep(20);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

但是最后一个方法抛出了不同的例子:有时是NullPointerm,但更常见的是:

java.util.concurrent.RejectedExecutionException: Task     com.sun.javafx.tk.quantum.PaintRenderJob@24f7eafc rejected from  com.sun.javafx.tk.quantum.QuantumRenderer@14a5ef25[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 4]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)

奇怪的是,但是当我模拟KeyEvent时,它可以完美地工作。 此外,如果我删除了应该按鼠标键的行,则机器人将移动光标,并且不会引发异常。 我怀疑该问题可能与JavaFX应用程序所在的线程有关。 但是我仍然不知道为什么它不起作用。

(我认为)模仿鼠标在Button上的实际单击是不可以的(是的,我已经看到“开发人员”以这种方式解决非JUnit问题中的问题)

最好的办法是取消按钮推入式按钮及其动作的耦合:重写按钮单击,以便它将调用某个类,该类允许您从JUnit本身调用完全相同的代码。 在实际应用程序和测试harnass中使用相同的代码进行编码的方式将有所不同:所调用的命令将是相同的,这是您练习的目的。 它也将摆脱您得到的奇怪的令人讨厌的异常,这是您可以期待的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM