java - 在测试期间模拟鼠标点击。 JUnit,JavaFX

标签 java testing junit javafx awtrobot

在我的测试方法中,我尝试使用 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 本身调用完全相同的代码。在实际应用程序和测试框架中将有不同的方式来检测相同的代码:调用的命令将是相同的,这是您练习的目的。它还将摆脱你得到的奇怪的讨厌的异常,这是你可以预料的

关于java - 在测试期间模拟鼠标点击。 JUnit,JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609744/

相关文章:

java - 如何为特定任务创建 Ant 监听器

java - 如何使用 @Rule 获取 JUnit 中的测试时间?

java - 尝试创建 JUnit 构建配置会导致错误 "JUnit not found in module"(IntelliJ)

java - 获取字符串时出现 ConcurrentModificationException

testing - 比较大量 PDF 文件的工具?

java - 如何修复此代码中的 ArrayIndexOutOfBoundsException?

java - Java中的随机测试

angularjs - Protractor :异步超时,我认为是因为它找不到元素

java - 是否有一种 Java 方法可以将参数集合编码为 URL 查询组件?

java - 使用 JGraphX 删除图中的重复顶点