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

时间:2013-04-03 12:57:38

标签: swing testing junit uispec4j

我有一些代码,我正在显示一个带有两个文本框和两个按钮的对话框(如OK,和Cancel,典型的登录窗口)。在“.setVisible(true)”之后执行主代码的条件是在该模态窗口上输入的值。

我现在面临的问题是,如果我做这样的事情:

        WindowInterceptor.init(new Trigger() {
            @Override
            public void run() throws Exception {
                LoginModal loginWin=new LoginModal();
                loginWin.setVisible(true);
                if(loginWin.getPassword().equals("any")) {
                    System.out.println("password OK!");
                }
            }
        }).process(new WindowHandler() {
            @Override
            public Trigger process(Window window) {
                System.out.println("triggered!");
            }
        }).run();

然后,密码永远不会正常,因为在触发器未完成之前不会调用处理程序。当我调用setVisible(true)时,我希望它被调用,因为否则,我无法根据窗口处理程序输入的内容运行我的“触发器”。

测试此方法的正确方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

这似乎是UISpec4J和Java 1.6u38的问题,1.6u37可以正常使用。

例如,使用这个简单的代码:

    WindowInterceptor.init(new Trigger() {

        @Override
        public void run() throws Exception {
            String myValue=JOptionPane.showInputDialog("thisssss");
            System.out.println("value " + myValue);
        }
    }).process(new WindowHandler() {
        @Override
        public Trigger process(Window window) {
            System.out.println("tal tal");
            return null
        }
    }).run();

myValue始终为null,我的处理程序从未触发过。再次,在1.6u37它工作正常。