我正在尝试在多个帧上运行测试。 执行时,它会挂起创建一个新机器人。
第一帧使用默认的Robot,第二帧的代码如下:
Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();
window2 = new FrameFixture(robot2, frame2);
我无法理解为什么它不能执行超过这一行,没有错误被抛出它只是暂停。
答案 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库可以添加一些状态或错误条件检查以强制执行Alex博客中详述的线程要求,那会不会有帮助。)