UISpec4J 和外部应用程序
UISpec4J and external application
我正在尝试启动外部应用程序以使用 UISpec4J 进行测试。
以下是我目前提到的问题及其答案:
How to automate a swing java web start application which runs clicking a link into a web application, which is automated with Selenium WebDriver?
Getting all windows using UISpec4J
UISpec4J Capturing modal dialog, before the trigger finish
下面提到的 my.exe 是一个 Java 使用某种工具包装在 exe 中的应用程序。它在内部使用罐子并且是 Java GUI 应用程序。
此可执行文件首先启动初始屏幕,然后是一个对话框,用于选择您要连接到的位置,然后显示主要 window。除非我可以在我可以连接的地方实现自动化,否则我不会得到 main window.
基于这些问题,我得出了以下代码片段:
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);
}
});
}
});
在上面的方法中,我简单地得到 "No window was shown" 错误。
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];
}
});
在上面的第二种方法中,我仍然得到 "No window shown" 错误并且控制永远不会到达重写的 "process" 方法。
我提到了 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 中,从我上面提到的第三个问题,我得到 abstract method not implemented 错误。
我做错了什么?有什么想法吗?
我正在使用最新的 UISpec4J 包 - 版本 2.4。
提前致谢,
-尼尔.
我是 UISpec4J 的新手,但我猜它需要在同一个 JVM 中 运行 才能拦截 GUI 组件并与之交互。当您使用 exec 启动 exe 文件时,它将创建一个新进程和一个新的独立 JVM。如果我正确理解 UISpec4J,那是行不通的。
关于非模态示例,文档说 "You would retrieve the window from within the test...",因此在设置方法或测试中应该有效。
我正在尝试启动外部应用程序以使用 UISpec4J 进行测试。
以下是我目前提到的问题及其答案:
How to automate a swing java web start application which runs clicking a link into a web application, which is automated with Selenium WebDriver?
Getting all windows using UISpec4J
UISpec4J Capturing modal dialog, before the trigger finish
下面提到的my.exe 是一个 Java 使用某种工具包装在 exe 中的应用程序。它在内部使用罐子并且是 Java GUI 应用程序。
此可执行文件首先启动初始屏幕,然后是一个对话框,用于选择您要连接到的位置,然后显示主要 window。除非我可以在我可以连接的地方实现自动化,否则我不会得到 main window.
基于这些问题,我得出了以下代码片段:
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);
}
});
}
});
在上面的方法中,我简单地得到 "No window was shown" 错误。
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];
}
});
在上面的第二种方法中,我仍然得到 "No window shown" 错误并且控制永远不会到达重写的 "process" 方法。
我提到了 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 中,从我上面提到的第三个问题,我得到 abstract method not implemented 错误。
我做错了什么?有什么想法吗?
我正在使用最新的 UISpec4J 包 - 版本 2.4。
提前致谢, -尼尔.
我是 UISpec4J 的新手,但我猜它需要在同一个 JVM 中 运行 才能拦截 GUI 组件并与之交互。当您使用 exec 启动 exe 文件时,它将创建一个新进程和一个新的独立 JVM。如果我正确理解 UISpec4J,那是行不通的。
关于非模态示例,文档说 "You would retrieve the window from within the test...",因此在设置方法或测试中应该有效。