西乡侯
发贴: 11
积分: 1
|
于 2006-06-13 10:33
前几年书写了一个技术SWING的界面测试的有些JAVA技术还比较有意思给大家分享一下。
SWING界面自动测试关键技术: 1, 如何替换掉系统的消息队列 2, 如何识别事件 3, 如何记录 4, 如何回放
第1个技术 使用 ActiveEvent
import java.awt.AWTEvent; import java.awt.ActiveEvent; import java.awt.Component; import java.awt.Dialog; import java.awt.Event; import java.awt.EventQueue; import java.awt.MenuComponent; import java.awt.event.MouseEvent;
import javax.swing.JButton; import javax.swing.JDialog;
import nc.web.AWTAutoShutdown;
public class EventDispatch extends AWTEvent implements ActiveEvent {
public static EventQueue theQueue; static{ if (theQueue == null) { java.awt.Toolkit t = java.awt.Toolkit.getDefaultToolkit(); theQueue = t.getSystemEventQueue(); } } public static void replaceSysteEventDispatch() { try { //System.out.println("new frame"); if (theQueue == null) { java.awt.Toolkit t = java.awt.Toolkit.getDefaultToolkit(); theQueue = t.getSystemEventQueue(); } theQueue.postEvent(new EventDispatch(null)); } catch (Exception e) { e.printStackTrace(); /** 可以是安全权限不能访问*/ } } /** 虚礼一个对象 */ private static JButton jb=new JButton(); public EventDispatch(Event event) { super(new MouseEvent(jb,1,1,1,1,1,1,false),1); }
public void dispatch() { while (true) { try { AWTEvent event = theQueue.getNextEvent(); /** 发送事件,可以在 Dialog.setModal(true) show ,接管事件 */ EventDispatch ed=new EventDispatch(null); theQueue.postEvent(ed); if(event.getClass() == EventDispatch.class ) continue; Object src=event.getSource(); if (event instanceof ActiveEvent) { ((ActiveEvent)event).dispatch(); } else if (src instanceof Component) { ((Component)src).dispatchEvent(event); } else if (src instanceof MenuComponent) { ((MenuComponent)src).dispatchEvent(event); } else { System.err.println("unable to dispatch event: " + event); } } catch (ThreadDeath death) { break; } catch (Throwable e) { System.err.println("Exception occurred during event dispatching:"); e.printStackTrace(); } } }
}
|