2013-04-03 39 views
1

我有一些代碼在那裏我展示了兩個文本框和兩個按鈕對話框(如確定,取消,典型的登錄窗口)。在「.setVisible(true)」之後執行主代碼的條件是在該模式窗口中輸入的值。UISpec4J捕獲模態對話框,觸發前完成

說我現在面臨的是,如果我不喜歡這樣的問題:

 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(真),它被調用,因爲否則的話,我不能基於窗口處理輸入了什麼東西跑我的「扳機」。

什麼是測試這種正確的做法?

謝謝!

+1

我有同樣的問題。當以testcase運行時,setVisible方法根本不會阻塞。 – Sponiro

回答

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的永遠是空的,我從來沒有處理程序觸發。再次,在1.6u37它工作正常。

+1

似乎是,在這一點上的JRE開始檢查工具箱中的JDialog的isModalityTypeSupported方法(幀,布爾),並UISpec4J總是返回false,那麼你的對話從來沒有被創建模式。 – Pete