private void BtnDone_Click(object sender, EventArgs e)
        {
            List <ActionData> lstSteps = new List <ActionData>();

            foreach (Control ctrGroup in fpBody.Controls)
            {
                if (ctrGroup is frmGroupHandle)
                {
                    List <Control> lstControls = ((frmGroupHandle)ctrGroup).GetChildControl();
                    ActionData     action      = new ActionData();
                    action.Actions = new List <Action <ChromiumWebBrowser> >();

                    foreach (Control ctrControl in lstControls)
                    {
                        if (!(ctrControl is frmMouseHandle) && !(ctrControl is frmInputHandle))
                        {
                            continue;
                        }

                        if (ctrControl is frmMouseHandle)
                        {
                            frmMouseHandle frm = ctrControl as frmMouseHandle;
                            string         strHandle;
                            string         strQuery;
                            bool           isPosition;
                            int            iX;
                            int            iY;
                            frm.GetData(out strHandle, out strQuery, out isPosition, out iX, out iY);

                            if (isPosition)
                            {
                                if (strHandle.Equals(Define.DblClick))
                                {
                                    action.Actions.Add(new Action <ChromiumWebBrowser>((_browser) =>
                                    {
                                        _browser.InitMouseHandlePoint();
                                        _browser.SendMouseHandle(Define.Click, iX, iY);
                                        _browser.SendMouseHandle(Define.Click, iX, iY);
                                    }));
                                }
                                else
                                {
                                    action.Actions.Add(new Action <ChromiumWebBrowser>((_browser) =>
                                    {
                                        _browser.InitMouseHandlePoint();
                                        _browser.SendMouseHandle(strHandle, iX, iY);
                                    }));
                                }
                            }
                            else
                            {
                                if (strHandle.Equals(Define.DblClick))
                                {
                                    action.Actions.Add(new Action <ChromiumWebBrowser>((_browser) =>
                                    {
                                        _browser.InitMouseHandle();
                                        _browser.SendMouseHandle(Define.Click, strQuery);
                                        _browser.SendMouseHandle(Define.Click, strQuery);
                                    }));
                                }
                                else
                                {
                                    action.Actions.Add(new Action <ChromiumWebBrowser>((_browser) =>
                                    {
                                        _browser.InitMouseHandle();
                                        _browser.SendMouseHandle(strHandle, strQuery);
                                    }));
                                }
                            }
                        }
                        else if (ctrControl is frmInputHandle)
                        {
                            frmInputHandle frm = ctrControl as frmInputHandle;
                            string         strValue;
                            string         strQuery;
                            frm.GetData(out strQuery, out strValue);

                            action.Actions.Add(new Action <ChromiumWebBrowser>((_browser) =>
                            {
                                _browser.SendText(strQuery, strValue);
                            }));
                        }
                    }

                    if (action.Actions.Count > 0)
                    {
                        lstSteps.Add(action);
                    }
                }
            }

            ResendData?.Invoke(txtUrl.Text.Trim(), lstSteps);
        }
        void SaveData(string fileName)
        {
            try
            {
                XmlDocument xmlDoc = new XmlDocument();

                this.fileName = fileName;
                if (System.IO.File.Exists(fileName))
                {
                    xmlDoc.Load(fileName);
                }
                else
                {
                    xmlDoc.InitDocument();
                }

                XmlNode xmlPage = xmlDoc.SelectSingleNode($"/{Define.Page}");
                xmlPage.RemoveAll();

                /*Save Url*/
                if (xmlPage.Attributes[Define.Url] == null)
                {
                    xmlPage.Attributes.Append(xmlDoc.CreateAttribute(Define.Url));
                }

                xmlPage.Attributes[Define.Url].Value = txtUrl.Text.Trim();

                /*Save XML*/
                foreach (Control ctrGroup in fpBody.Controls)
                {
                    #region Group
                    if (ctrGroup is frmGroupHandle)
                    {
                        XmlElement     xmlGroup    = xmlDoc.CreateElement(Define.Group);
                        List <Control> lstControls = ((frmGroupHandle)ctrGroup).GetChildControl();

                        foreach (Control ctrControl in lstControls)
                        {
                            if (ctrControl is frmMouseHandle)
                            {
                                frmMouseHandle frm = ctrControl as frmMouseHandle;
                                string         strHandle;
                                string         strQuery;
                                bool           isPosition;
                                int            iX;
                                int            iY;
                                frm.GetData(out strHandle, out strQuery, out isPosition, out iX, out iY);

                                if (isPosition)
                                {
                                    XmlElement xmlControl             = xmlDoc.CreateElement(Define.Control);
                                    Dictionary <string, string> attrs = new Dictionary <string, string>();
                                    attrs.Add(Define.Type, Define.Mouse);
                                    attrs.Add(Define.Handle, strHandle.ToLower());
                                    attrs.Add(Define.Query, strQuery);
                                    attrs.Add(Define.IsPosition, isPosition.ToString());
                                    attrs.Add(Define.PositionX, iX.ToString());
                                    attrs.Add(Define.PositionY, iY.ToString());
                                    attrs.ToList().ForEach(x =>
                                    {
                                        XmlAttribute xmlAttr = xmlDoc.CreateAttribute(x.Key);
                                        xmlAttr.Value        = x.Value;
                                        xmlControl.Attributes.Append(xmlAttr);
                                    });
                                    xmlGroup.AppendChild(xmlControl);
                                }
                                else
                                {
                                    XmlElement xmlControl             = xmlDoc.CreateElement(Define.Control);
                                    Dictionary <string, string> attrs = new Dictionary <string, string>();
                                    attrs.Add(Define.Type, Define.Mouse);
                                    attrs.Add(Define.Handle, strHandle.ToLower());
                                    attrs.Add(Define.Query, strQuery);
                                    attrs.ToList().ForEach(x =>
                                    {
                                        XmlAttribute xmlAttr = xmlDoc.CreateAttribute(x.Key);
                                        xmlAttr.Value        = x.Value;
                                        xmlControl.Attributes.Append(xmlAttr);
                                    });
                                    xmlGroup.AppendChild(xmlControl);
                                }
                            }
                            else if (ctrControl is frmInputHandle)
                            {
                                frmInputHandle frm = ctrControl as frmInputHandle;
                                string         strValue;
                                string         strQuery;
                                frm.GetData(out strQuery, out strValue);

                                XmlElement xmlControl             = xmlDoc.CreateElement(Define.Control);
                                Dictionary <string, string> attrs = new Dictionary <string, string>();
                                attrs.Add(Define.Type, Define.Input);
                                attrs.Add(Define.Query, strQuery);
                                attrs.Add(Define.Value, strValue);
                                attrs.ToList().ForEach(x =>
                                {
                                    XmlAttribute xmlAttr = xmlDoc.CreateAttribute(x.Key);
                                    xmlAttr.Value        = x.Value;
                                    xmlControl.Attributes.Append(xmlAttr);
                                });
                                xmlGroup.AppendChild(xmlControl);
                            }
                        }

                        xmlPage.AppendChild(xmlGroup);
                    }
                    #endregion
                }

                xmlDoc.Save(fileName);
            }
            catch (Exception ex)
            {
                this.showError(Caption: ex.Message);
            }
        }