FEST测试依赖于创建新的Robot

时间:2013-05-08 12:41:43

标签: java fest

我正在尝试在多个帧上运行测试。 执行时,它会挂起创建一个新机器人。

第一帧使用默认的Robot,第二帧的代码如下:

Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();

window2 = new FrameFixture(robot2, frame2); 

我无法理解为什么它不能执行超过这一行,没有错误被抛出它只是暂停。

2 个答案:

答案 0 :(得分:2)

尝试仅使用一个机器人或确保在启动新机器人之前,旧机器人执行此操作 robot.cleanUp() 要么 robot.cleanUpWithoutDisposingWindows() 除此以外 你的新机器人只是等着锁定屏幕,这就是 第一个机器人拥有,所以你的测试程序就会挂起。

答案 1 :(得分:0)

在创建Fest的机器人或在机器人上调用方法时,请确保您在UI线程上 NOT Alex Ruiz explains this caution of Swing-Fest threading in his blog

我发现如果我在JavaFX线程上调用Robot上的方法,它一直只挂在OS X 10.8.5 Java 7(60)上。在Windows 8 Java 7(60)上,这个微妙的,隐藏的问题没有显露出来。

也许使用实用程序方法添加Precondition调用,如下所示:

public static boolean isUIThread()
{
    return SwingUtilities.isEventDispatchThread() || Platform.isFxApplicationThread();
}

,例如

Preconditions.checkState(!Utilities.get().isUIThread());
Robot robot = new FrameFixture(frame).robot;

确保您安全地调用Robot方法。

(如果Fest库可以添加一些状态或错误条件检查以强制执行A​​lex博客中详述的线程要求,那会不会有帮助。)