2

我正在尝试使用 UISpec4J 启动一个外部应用程序进行测试。

以下是我到目前为止提到的问题及其答案:

如何自动化运行单击链接到 Web 应用程序的 Swing Java Web 启动应用程序,该应用程序由 Selenium WebDriver 自动化?

使用 UISpec4J 获取所有窗口

UISpec4J 在触发完成之前捕获模态对话框

下面提到的 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 中,从我上面提到的第三个问题,我得到抽象方法未实现错误。

我究竟做错了什么?任何想法?

我正在使用最新的 UISpec4J 包 - 2.4 版。

在此先感谢,-尼尔。

4

1 回答 1

0

我对 UISpec4J 很陌生,但我猜它需要在同一个 JVM 中运行才能拦截 GUI 组件并与之交互。当您使用 exec 启动 exe 文件时,它将创建一个新进程和一个新的独立 JVM。如果我正确理解 UISpec4J,那是行不通的。

关于非模态示例,文档说“您将从测试中检索窗口......”,因此在设置方法或测试中应该可以工作。

于 2015-04-21T18:06:31.400 回答