【发布时间】:2015-08-15 04:22:48
【问题描述】:
为了使用 TestFX 测试应用程序,我需要获取正在运行的应用程序的实际主要阶段。这意味着我没有代码,我可以通过一个 jar 来运行应用程序。
有什么可能的解决方案吗? Scenic View 已经这样做了,但我无法重现此功能,尤其是因为它们似乎使用了已弃用的功能
Windows.impl_getWindows
这在我的情况下不起作用。
【问题讨论】:
为了使用 TestFX 测试应用程序,我需要获取正在运行的应用程序的实际主要阶段。这意味着我没有代码,我可以通过一个 jar 来运行应用程序。
有什么可能的解决方案吗? Scenic View 已经这样做了,但我无法重现此功能,尤其是因为它们似乎使用了已弃用的功能
Windows.impl_getWindows
这在我的情况下不起作用。
【问题讨论】:
试试这个:
import com.sun.javafx.robot.impl.FXRobotHelper;
static Collection<Stage> getAllJavaFXStages() {
try {
return FXRobotHelper.getStages();
} catch ( NullPointerException npe ) {
// nasty NPE if no stages exist
return Collections.emptyList();
}
}
```
基于我自己的测试框架代码:Automaton.
编辑:
如果您想从与运行代码的位置不同的 JVM 实例获取 Stage,那么没有简单的方法。
你说得对,ScenicView 做到了,但它使用 tools.jar 做到了。这不是您在运行时获得的标准 jar,因此您必须手动添加它(将其放在 jre/lib/ext 中应该可以做到,您通常只能在 lib 中找到它)。
我在他们的BitBucket repo. 中找到了 ScenicView 似乎正在执行此操作的代码
例如检查函数getRunningJavaFXApplications。
在你的测试中使用它很有趣!
【讨论】:
com.sun 类不是很好,但是对于这种你需要的不受支持的功能(能够测试东西),这是 AFAIK 的唯一方法。
com.sun here 的背景讨论(并不是说我有更好的解决方案)。