【发布时间】:2013-05-08 12:41:42
【问题描述】:
我正在尝试在多个帧上运行测试。 执行时,它会挂在新机器人的创建上。
第一帧使用默认机器人,第二个机器人的代码如下:
Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();
window2 = new FrameFixture(robot2, frame2);
我不明白为什么它不会执行超过这一行,没有抛出任何错误它只是暂停。
【问题讨论】:
我正在尝试在多个帧上运行测试。 执行时,它会挂在新机器人的创建上。
第一帧使用默认机器人,第二个机器人的代码如下:
Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();
window2 = new FrameFixture(robot2, frame2);
我不明白为什么它不会执行超过这一行,没有抛出任何错误它只是暂停。
【问题讨论】:
尝试仅使用一个机器人,或确保在启动新机器人之前,旧机器人已完成
robot.cleanUp()
要么
robot.cleanUpWithoutDisposingWindows()
否则
您的新机器人将等待锁定屏幕,
第一个机器人拥有,所以你的测试程序会挂起。
【讨论】:
在创建 Fest 的机器人或在机器人上调用方法时,请确保您 不 在 UI 线程上。 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 库可以添加一些状态或错误条件检查以强制执行 Alex 博客中详述的线程要求,那会不会很有帮助。)
【讨论】: