Test recorder的源码分析(4)

9、鼠标事件 HookMouseUp

cEXWB1控件中打开的网页进行处理,调用wscript.AddClick对鼠标事件进行判断,在AddClick中调用AddAction将动作加入列表的操作

void HookMouseUp(object sender,  Microsoft.Win32.MouseHookEventArgs e)

        {

            if (e.Control != null && e.Control.Name == "cEXWB1" && e.Button == MouseButtons.Right)

            {

                IHTMLElement pelem = cEXWB1.GetActiveElement();

                if (pelem != null && pelem.tagName.ToLower(CultureInfo.InvariantCulture) == "select")

                {

                    //ShowPropertyWindow(pelem,  new Point(e.X,  e.Y));

                }

                return;

            }

 

            if (e.Button == MouseButtons.Right)

            {

                return;

            }

 

            IHTMLElement activeElement;

            try

            {

                activeElement = cEXWB1.GetActiveElement();

            }

            catch (Exception)

            {

                return;

            }

 

 

            if (e.Control != null

                && e.Control.Name == "cEXWB1"

                && e.Control.Parent != null

                && e.Control.Parent.Name == "frmMain"

                && activeElement != null)

            {

                // Freddy Guime

                // We are doing this differently now.

                // The issue being that clicks capture will not relate to the correct

                // activeelement if a "change" on the activeelement has been made.

 

                // 1) Figure out if there was an "active" element before.

 

                // 2) Make Click record the "TextActiveElement"

                if (activeElement != textActiveElement) WriteKeys();

                textActiveElement = activeElement;

 

                if (textActiveElement.tagName.ToLower(CultureInfo.InvariantCulture) == "body")

                {

                    Point clientPoint = cEXWB1.PointToClient(new Point(e.X,  e.Y));

                    textActiveElement = cEXWB1.ElementFromPoint(true,  clientPoint.X,  clientPoint.Y);

                }

                    /*

                else if (textActiveElement.tagName.ToLower(System.Globalization.CultureInfo.InvariantCulture) == "object")

                {

                    Point clientPoint = cEXWB1.PointToClient(new Point(e.X,  e.Y));

                    wscript.AddObjectClick(Watinie,  textActiveElement,  clientPoint);

                    return;

                }

                 */

                else

                {

                    Point clientPoint = cEXWB1.PointToClient(new Point(e.X,  e.Y));

                    IHTMLElement eItem = cEXWB1.ElementFromPoint(true,  clientPoint.X,  clientPoint.Y);

                    if (eItem != textActiveElement

                        && eItem.GetType() != typeof (mshtml.HTMLFrameElementClass)

                        && eItem.GetType() != typeof (mshtml.HTMLIFrameClass)) textActiveElement = eItem;

                }

 

                wscript.AddClick(watinie,  textActiveElement);

            }

            else if (e.Control != null

                     && e.Control.Name == "cEXWB1"

                     && e.Control.Parent != null

                     && e.Control.Parent.Name == "frmPopup")

            {

                if (m_frmPopup.GetActiveElement() != null)

                {

                    wscript.AddClick(((frmPopup) e.Control.Parent).Watinie,  m_frmPopup.GetActiveElement());

                }

            }

        }

public virtual void AddClick(BrowserWindow browser,  IHTMLElement activeElement)

        {

            // don't add the click if we're just highlighting elements

            if (MainBrowser.highlightingElements) return;

 

            var action = new ActionClick(this);

            action.SetFindMethod(browser,  activeElement);

 

            if (action.ElementType == ElementTypes.FileUpload)

            {

                WatchFileUploadBox(browser,  activeElement);

            }

            else if (action.ElementType == ElementTypes.RadioButton)

            {

                var radio = new ActionRadio

                                {

                                    ScriptCaller = this,

                                    FindMechanism = action.FindMechanism,

                                    Checked = (activeElement.outerHTML.ToLower().Contains("checked") == false)

                                };

                radio.SetFindMethod(browser,  activeElement);

                AddAction(radio);

            }

            else if (action.ElementType == ElementTypes.CheckBox)

            {

                var checkbox = new ActionCheckbox

                                   {

                                       ScriptCaller = this,

                                       FindMechanism = action.FindMechanism,

                                       Checked = (activeElement.outerHTML.ToLower().Contains("checked") == false)

                                   };

                checkbox.SetFindMethod(browser,  activeElement);

                AddAction(checkbox);

            }

            else if (action.ElementType == ElementTypes.SelectList

                || action.ElementType == ElementTypes.Frame)

            {

                // do nothing with the click

            }

            else

            {

                AddAction(action);

            }           

        }

 

10、保存 接受的事件

接受鼠标click事件,调用方法tsbSave_Click(),调用save_code(),将列表中的动作,保存为xml文件

private void tsbSave_Click(object sender,  EventArgs e)

        {

            if (wscript.Recording)

            {

                tsbStop_Click(null,  e);

            }

 

            saveCodeDialog.Filter = "Native XML Format (*.xml)|*.xml|" + templatesAvailable.GetSaveFilter();

 

            if (saveCodeDialog.ShowDialog() != DialogResult.OK

                || wscript.RecordedTests.Count == 0) return;

           

            // get the selected template

            if (saveCodeDialog.FilterIndex == 1) wscript.SaveXML(saveCodeDialog.FileName);

            else

            {

                Template selectedTemplate = templatesAvailable.GetTemplateByIndex(saveCodeDialog.FilterIndex - 2);

                wscript.SaveCode(saveCodeDialog.FileName,  selectedTemplate);

            }

        }

 

public void SaveCode(string filename,  Template selectedTemplate)

        {

            string code = GetCodeFile(selectedTemplate);

            try

            {

                File.WriteAllText(filename,  code);

            }

            catch (Exception ex)

            {

                MessageBox.Show("Could not save code:" + Environment.NewLine + ex.Message,  "Save Failed",

                                MessageBoxButtons.OK,  MessageBoxIcon.Error);

            }

           

        }

 

11、打开 接受的事件

鼠标click事件 调用方法tsbLoad_Click(),打开一个保存在本地xml文件,将里面的动作,显示在gridSource

 

12Tsbrun 接受的事件

鼠标click事件 调用方法tsbRun_Click(),步骤同运行按钮

 

编辑

接受鼠标click事件,调用方法tsbEditAction_Click(),打开编辑界面,对选定的动作进行编辑

 

Clickelement

调用方法tsbClickElement_CheckedChanged(),对选择的元素高亮显示

 

EditDataSet

调用方法tsbEditDataset_Click(),可以生成,编辑csv文件

 

WATINELEMENTS

接受鼠标的右键弹起事件调用方法treeWatin_MouseUp(),和左键的afterselect事件调用方法treeWatin_AfterSelect();通过HighlightElement(element)使选中的部分变亮

private void HighlightElement(IHTMLElement element)

        {

            try

            {

                if (lastelement != null)

                {

                    lastelement.style.setAttribute("backgroundColor",  OriginalColor,  0);

                }

 

                if (element == null)

                {

                    return;

                }

 

                lastelement = element;

                Object objColor = lastelement.style.getAttribute("backgroundColor",  0);

                OriginalColor = objColor != null ? objColor.ToString() : "";

                lastelement.style.setAttribute("backgroundColor",  wscript.Settings.DOMHighlightColor.ToKnownColor(),  0);

            }

            catch (Exception)

            {

                MessageBox.Show("Cannot highlight this element.",  "Highlight Error",  MessageBoxButtons.OK,  MessageBoxIcon.Error);

            }

        }

 

HTMLDOM

接受nodemouseclick事件,调用方法treeDOM_NodeMouseClick(),将选中的元素高亮显示

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值