【问题标题】:UISpec4J and external applicationUISpec4J 和外部应用程序
【发布时间】:2015-02-19 10:31:58
【问题描述】:

我正在尝试使用 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 是使用某种工具封装在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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的评论。不得不为同一个应用程序提出另一个问题。你能检查一下你是否可以帮助我 - stackoverflow.com/questions/28711933/…
    • 对不起,我对osgi插件不熟悉。
    • 我无法启动我的 jnlp 文件可能是由于 jre 1.7+,因为我的测试项目使用 jre 1.6 并且正在测试的应用程序使用 1.7+ 我收到以下异常:线程“SPARCS 中的异常” N4" java.lang.UnsupportedClassVersionError:com/navis/framework/ulc/client/jnlp/CarinaJnlpLauncher:不支持的major.minor 51.0版
    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 2021-05-13
    • 1970-01-01
    • 2012-03-06
    • 2021-01-17
    • 2019-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多