我正在尝试使用UISpec4J启动一个外部应用程序进行测试。
以下是我迄今为止提到的问题及其答案:
如何自动化swing java web启动应用程序,该应用程序通过点击链接运行到web应用程序中,并通过Selenium WebDriver实现自动化?
使用UISpec4J 获取所有窗口
UISpec4J捕获模式对话框,在触发完成之前
下面提到的my.exe是一个使用某种工具封装在exe中的Java应用程序。在内部,它使用jar,并且是Java GUI应用程序。
此可执行文件首先启动一个启动屏幕,然后显示一个对话框,选择要连接到的位置,然后显示主窗口。除非我能自动连接到哪里,否则我不会得到主窗口。
基于这些问题,我提出了以下代码片段:
this.setAdapter(new UISpecAdapter() {
@Override
public Window getMainWindow() {
return WindowInterceptor.run(new Trigger() {
@Override
public void run() throws Exception {
// running jnlp by netx launcher
Runtime.getRuntime().exec("C:\my.exe");
Thread.sleep(10000);
}
});
}
});
在上面的方法中,我简单地得到了"没有显示窗口"的错误。
this.setAdapter(new UISpecAdapter() {
@Override
public Window getMainWindow() {
final Window[] result = new Window[1];
WindowInterceptor
.init(new Trigger() {
@Override
public void run() throws Exception {
Runtime.getRuntime().exec("C:\my.exe");
//Thread.sleep(10000);
}
})
//.processTransientWindow()
.process(new WindowHandler() {
public Trigger process(Window window) throws Exception {
result[0] = window;
return Trigger.DO_NOTHING;
}
})
.run();
return result[0];
}
});
在上面的第二种方法中,我仍然得到"没有显示窗口"的错误AND控制从未到达覆盖"过程"方法。
我提到http://www.uispec4j.org/reports/apidocs/org/uispec4j/interception/WindowInterceptor.html推荐的方法是使用init来捕获模式对话框是init\process序列。
要捕获非模态,建议我们应该使用以下内容:
Window window = WindowInterceptor.run(panel.getButton("open").triggerClick());
但我不知道在哪里以及如何称呼它。
从上面提到的我提到的第一个问题来看,我们应该能够做到这一点,因为它的答案提到启动jnlp应用程序,这是一个外部应用程序。
我尝试了jre 6更新0,我至少可以运行测试。在java更新37中,从我上面提到的第三个问题中,我得到了抽象方法未实现的错误。
我做错了什么?知道吗?
我使用的是最新的UISpec4J软件包-版本2.4。
提前感谢,-尼尔。
我是UISpec4J的新手,但我猜它需要在同一JVM中运行,才能拦截GUI组件并与之交互。当使用exec启动exe文件时,它将创建一个新进程和一个新的独立JVM。如果我正确理解UISpec4J,那就行不通了。
关于非模态示例,文档中说"您将从测试中检索窗口…",因此在设置方法或测试中应该可以工作。