【发布时间】:2015-02-19 10:31:58
【问题描述】:
我正在尝试使用 UISpec4J 启动一个外部应用程序进行测试。
以下是我目前提到的问题及其答案:
Getting all windows using UISpec4J
UISpec4J Capturing modal dialog, before the trigger finish
下面提到的my.exe 是使用某种工具封装在exe 中的Java 应用程序。它在内部使用 jars 并且是 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];
}
});
在上面的第二种方法中,我仍然得到“没有显示窗口”错误并且控制永远不会到达覆盖的“进程”方法。
我提到了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 update 0 并且至少可以运行测试。在 java update 37 中,从我上面提到的第三个问题中,我得到 abstract method not implemented 错误。
我做错了什么?有什么想法吗?
我正在使用最新的 UISpec4J 包 - 2.4 版。
提前致谢, -尼尔。
【问题讨论】:
标签: java testing automation uispec4j