我正在尝试在多个帧上运行测试。执行时,它会挂在新机器人的创建上。
第一帧使用默认机器人,第二个机器人的代码如下:
Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();
window2 = new FrameFixture(robot2, frame2);
我不明白为什么它不会执行超过这一行,没有抛出任何错误它只是暂停。
尝试只使用一个机器人,或者确保在启动新机器人之前,旧机器人会执行一个操作
robot.cleanUp()
,
robot.cleanUpWithoutDisposingWindows()
否则您的新机器人将等待锁定第一个机器人拥有的屏幕,因此您的测试程序将挂了。
创建 Fest 的机器人或在机器人上调用方法时,请确保您不在UI 线程上。Alex Ruiz 在他的博客中解释了 Swing-Fest 线程的这种谨慎。
我发现如果我在 JavaFX 线程上调用 Robot 上的方法,它始终只挂在 OS X 10.8.5 Java 7 (60) 上。在 Windows 8 Java 7 (60) 上,这个微妙的、隐藏的问题并没有显露出来。
也许使用这样的实用方法添加前置条件调用:
public static boolean isUIThread()
{
return SwingUtilities.isEventDispatchThread() || Platform.isFxApplicationThread();
}
如
Preconditions.checkState(!Utilities.get().isUIThread());
Robot robot = new FrameFixture(frame).robot;
确保您安全地调用 Robot 方法。
(如果 Fest 库可以添加一些状态或错误条件检查以强制执行 Alex 的博客中详述的线程要求,这不是很有帮助。)