Test recorder的源码分析(2)

WBEvaluteNewWindow

调用方法cEXWB1_WBEvaluteNewWindow()

点击在控件中打开一个新窗口,调用 方法wscript.AddPopup(),调用AddAction,将动作加入到列表中,调用m_frmPopup.SetURL(this, wscript, e.url),通过cEXWB1.Navigate(url)方法,在新窗口显示网页

 

private void cEXWB1_WBEvaluteNewWindow(object sender,  csExWB.EvaluateNewWindowEventArgs e)

        {

            // modeless/modal flags=38

            if ((e.flags & NWMF.HTMLDIALOG)==NWMF.HTMLDIALOG)

            {

                if (MessageBox.Show(Properties.Resources.showDialogBug,  Properties.Resources.KnownBug, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)

                {

                    e.Cancel = true;

                }

            }

            else

            {

                m_frmPopup.Show();

                //m_frmPopup.PopupName = wscript.AddPopup(wscript.settings.PopupIEName,  e.url);

                wscript.AddPopup(wscript.Settings.PopupIEName, e.url,  m_frmPopup);

                m_frmPopup.SetURL(this,  wscript,  e.url);

            }

        }

public virtual void AddPopup(string ieName,  string url,  frmPopup popup)

        {

            var actpopup = new ActionOpenPopup(ieName,  url) {PopupForm = popup};

            AddAction(actpopup);

        }

public void SetURL(frmMain form,  WatinScript script,  string url)

        {

            MainScript = script;

            MainForm = form;

            cEXWB1.Navigate(url);

        }

 

 

WBKeyDown 调用方法cEXWB1_WBKeyDown

处理控件中网页,输入框,除了删除,方向键以外的键盘事件, 先调用WriteKeys()方法,然后调用wscript.AddTyping(watinie,  textActiveElement)方法,做好通过AddAction方法,将动作加入列表

 

 

WBKeyUp 调用方法cEXWB1_WBKeyUp

处理方向键,tabenter,键的键盘事件, 先调用WriteKeys()方法,然后调用wscript.AddTyping(watinie, textActiveElement)方法,做好通过AddAction方法,将动作加入列表

 

WBLButtonDown 调用方法cEXWB1_WBLButtonDown

处理控件中的WBLButtonDown事件

 

WBLButtonUp 调用方法cEXWB1_WBLButtonUp

处理控件中的WBLButtonUp事件

 

WBMouseMove 调用方法cEXWB1_WBMouseMove

处理控件中的鼠标移动事件

 

WBSecurityProblem 调用方法cEXWB1_WBSecurityProblem

处理控件中的WBSecurityProblem事件

 

WindowClosing调用方法cEXWB1_WindowClosing

处理控件中的WindowClosing事件

 

4、录制 接受的事件

接受鼠标click事件调用方法tsbRecord_Click,设置录制标识(wscript.ShouldInsertActions = true, wscript.Recording=true),开始将所有的动作加入activeTest

private void tsbRecord_Click(object sender,  EventArgs e)

        {

            if (txtTestName.Text.Trim() == "")

            {

                MessageBox.Show(Properties.Resources.TestsMustHaveAName,  Properties.Resources.TestName,  MessageBoxButtons.OK,  MessageBoxIcon.Information);

                return;

            }

            if (!System.Text.RegularExpressions.Regex.IsMatch(txtTestName.Text,  @"/A[a-zA-Z0-9_]+/z"))

            {

                MessageBox.Show(Properties.Resources.TestNameCanContainOnlyAZAnd09,  Properties.Resources.TestName,  MessageBoxButtons.OK,  MessageBoxIcon.Information);

                return;

            }

           

            tsbRecord.Enabled = false;

            tsbStop.Enabled = true;

            txtTestName.Enabled = false;

            wscript.ActiveTest.TestName = txtTestName.Text;

            wscript.Recording = true;

            wscript.ClearTimer();

 

            // inserting items into the current position

            if (wscript.ActiveTest.Count > 0 && gridSource.Selection.ActivePosition.Row+1<gridSource.RowsCount)

            {

                wscript.InsertPosition = gridSource.Selection.ActivePosition.Row;

                if (wscript.InsertPosition == -1) wscript.InsertPosition = 0;

                wscript.ShouldInsertActions = true;

            }

            else wscript.ShouldInsertActions = false;

        }

 

 

5、停止录制 接受的事件

接受鼠标click事件,调用方法tsbStop_Click,设置录制标识为false

private void tsbStop_Click(object sender,  EventArgs e)

        {

            tsbRecord.Enabled = true;

            tsbStop.Enabled = false;

            txtTestName.Enabled = true;

            wscript.Recording = false;

            for (int i = 0; i < wscript.ActiveTest.Count; i++)

            {

                String strTmp = wscript.ActiveTest[i].ParentPage.Content;

            }

           

        }

 

6、运行 接受的事件

接受鼠标click事件,调用方法tsbRunCurrent_Click,调用wscript.RunTest(),调用ActiveTest.RunTest()

在线程中执行,列表(ActiveTest)中的动作,action.Perform(),根据具体操作调用对应子类中的Perform()执行操作,比如回车事件调用ActionNavigate.csPerform(),鼠标点击事件, 通过ActionElementBase.cs中的GetElement()获取点击的是什么元素,然后调用ActionClick.cs中的Perform(),打开新窗口,调用ActionOpenWindow子类中的Perform();鼠标移动调用ActionMouse中的Perform()执行该动作

public class RunThreaded

    {

        public Thread ThisThread;

        public ActionList Actions;

        public bool BreakpointSleep = true;

        public bool SingleStep = false;

        public ActionBase CurrentAction;

        public DataRow ReplacementRow;

 

        public delegate void ActionCounterIncrementedEvent(int index);

        public ActionCounterIncrementedEvent OnActionCounterIncremented;

 

        public delegate void RunCompleteEvent();

        public RunCompleteEvent OnRunCompleted;

 

        public delegate void BreakpointEvent(ActionBase action);

        public BreakpointEvent OnBreakpoint;

 

        public delegate void ActionStatusEvent(ActionBase action);

        public ActionStatusEvent OnActionStatus;

 

        public void RunTest()

        {

            if (Actions.ReplacementTable.Rows.Count == 0)

            {

                ReplacementRow = null;

                RunTestInstance(null);

            }

            else

            {

                foreach (DataRow row in Actions.ReplacementTable.Rows)

                {

                    ReplacementRow = row;

                    RunTestInstance(row);

                }

            }

 

            if (OnRunCompleted != null) OnRunCompleted();

        }

 

        private void RunTestInstance(DataRow row)

        {

            int rowcounter = 1;

            foreach (ActionBase action in Actions)

            {

                CurrentAction = action;

                RunStep(action,  row);

                rowcounter++;

                if (OnActionCounterIncremented != null) OnActionCounterIncremented(rowcounter);

            }

        }

 

        private void RunStep(ActionBase action,  DataRow row)

        {

            if (SingleStep)

            {

                BreakpointSleep = true;

                while (BreakpointSleep)

                {

                    Thread.Sleep(500);

                    Application.DoEvents();

                }

            }

            else if (action.Breakpoint == ActionBase.BreakpointIndicators.ActiveBreakpoint)

            {

                if (OnBreakpoint != null) OnBreakpoint(action);

                   

                BreakpointSleep = true;

                while (BreakpointSleep)

                {

                    Thread.Sleep(500);

                    Application.DoEvents();

                }

            }

 

            action.ReplacementRow = row;

            action.Perform();

            if (OnActionStatus != null) OnActionStatus(action);           

        }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值