2

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

第一帧使用默认机器人,第二个机器人的代码如下:

Robot robot2 = BasicRobot.robotWithCurrentAwtHierarchy();

window2 = new FrameFixture(robot2, frame2); 

我不明白为什么它不会执行超过这一行,没有抛出任何错误它只是暂停。

4

2 回答 2

3

尝试只使用一个机器人,或者确保在启动新机器人之前,旧机器人会执行一个操作 robot.cleanUp()robot.cleanUpWithoutDisposingWindows() 否则您的新机器人将等待锁定第一个机器人拥有的屏幕,因此您的测试程序将挂了。

于 2013-06-20T08:17:58.883 回答
1

创建 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 的博客中详述的线程要求,这不是很有帮助。)

于 2014-07-07T17:45:35.717 回答