我正在尝试在多个帧上运行测试。当执行时,它挂起创建一个新的Robot。
第一帧使用默认的Robot,第二个Robot的代码如下:
Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();
window2 = new FrameFixture(robot2, frame2);
我不明白为什么它不会执行过这一行,没有抛出错误,只是暂停。
尽量只使用一个机器人,或者确保在启动一个新机器人之前,旧机器人执行arobot.cleanUp()
或robot.cleanUpWithoutDisposingWindows()
否则你的新机器人就等着被锁在屏幕上,这第一个机器人拥有,所以你的测试程序将只是挂起。
当创建Fest's Robot或调用Robot上的方法时,请确保不在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博客中详细介绍的线程要求,这不是很有帮助吗?)