一种自动界面测试或软件自动演示的方法。
思路很简单,就是用timer,当达到触发条件时,执行“脚本”。
这个方法的好处是把自动演示代码集中放在一起了。
unit autoDemoUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Generics.Collections;
type
CAutoDemo=class
public type
TScript=TPair<TFunc<Integer>, TFunc<Integer, Boolean>>;
private
fSs: TQueue<TScript>;
fTimer: TTimer;
procedure Timer1Timer(Sender: TObject);
public
constructor create;
destructor Destroy; override;
procedure add(trigger: TFunc<Integer>; fun: TFunc<Integer, Boolean>);
end;
implementation
{ CAutoDemo }
procedure CAutoDemo.add(trigger: TFunc<Integer>; fun: TFunc<Integer, Boolean>);
begin
fSs.Enqueue(TScript.Create(trigger, fun));
fTimer.Enabled:=True; //新加入脚本,要确保引擎启动。
end;
constructor CAutoDemo.create;
begin
fSs:=TQueue<TScript>.Create;
fTimer:=TTimer.Create(Application);
fTimer.OnTimer:=self.Timer1Timer;
end;
destructor CAutoDemo.Destroy;
begin
fSs.Free;
inherited;
end;
procedure CAutoDemo.Timer1Timer(Sender: TObject);
var
i: Integer;
par: Integer;
script: CAutoDemo.TScript;
begin
if fSs.Count>0 then begin
script:=fSs.Peek();
par:=script.Key();
if par<>0 then begin
fTimer.Enabled:=False;
if script.Value(par) then
fSs.Dequeue;
fTimer.Enabled:=True;
end;
script.key:=nil;
script.Value:=nil;
end
else begin
fTimer.Enabled:=False;
end;
end;
end.
用法,add()就是把“脚本”加入了
第一个参数是触发条件,参数返回值非零时表示触发成功
第二个参数是执行内容,它带有一个par参数,就是第一个参数的返回值
以上代码和示例放在附件里了。
Attachment:
[全部代码]
autoDemo.rar (2010-11-13 23:51, 494.01 K)
Download count 152
|