public ElementInfo AutoUpdateCurrentPOM(Common.InterfacesLib.IAgent currentAgent)
        {
            if (!IsSelfHealingConfiguredForAutoUpdateCurrentPOM())
            {
                return(null);
            }

            var passedLocator = GetCurrentPOMElementInfo().Locators.Where(x => x.LocateStatus == ElementLocator.eLocateStatus.Passed);


            if (passedLocator == null || passedLocator.Count() == 0)
            {
                if (ExecutedFrom == eExecutedFrom.Run)
                {
                    var runSetConfig = WorkSpace.Instance.RunsetExecutor.RunSetConfig;
                    if (runSetConfig != null)
                    {
                        if ((Convert.ToDateTime(GetCurrentPOMElementInfo().LastUpdatedTime).ToUniversalTime() > runSetConfig.StartTimeStamp))
                        {
                            return(null);
                        }
                    }
                }
                else
                {
                    var pomLastUpdatedTimeSpan = (System.DateTime.Now - Convert.ToDateTime(GetCurrentPOMElementInfo().LastUpdatedTime)).TotalHours;
                    if (pomLastUpdatedTimeSpan < 5)
                    {
                        return(null);
                    }
                }
            }

            var deltaElementInfos = GetUpdatedVirtulPOM(currentAgent);

            if (deltaElementInfos.Count > 0)
            {
                UpdateElementSelfHealingDetails(deltaElementInfos.ToList());
            }

            Guid currentPOMElementInfoGUID = new Guid(PomElementGUID[1]);
            var  currentElementDelta       = deltaElementInfos.Where(x => x.ElementInfo.Guid == currentPOMElementInfoGUID).FirstOrDefault();

            if (currentElementDelta == null || currentElementDelta.DeltaStatus == eDeltaStatus.Deleted)
            {
                mAct.ExInfo += "Element not found during self healing process.";
                return(null);
            }
            else
            {
                return(currentElementDelta.ElementInfo);
            }
        }
        private ObservableList <DeltaElementInfo> GetUpdatedVirtulPOM(Common.InterfacesLib.IAgent currentAgent)
        {
            var waitToCompleteLearnProcess = false;

            while (this.GetCurrentPOM().IsLearning)
            {
                waitToCompleteLearnProcess = true;
            }
            this.GetCurrentPOM().IsLearning = true;

            if (waitToCompleteLearnProcess)
            {
                var pomLastUpdatedTimeSpan = (DateTime.Now - Convert.ToDateTime(GetCurrentPOMElementInfo().LastUpdatedTime)).Minutes;
                if (pomLastUpdatedTimeSpan < 5)
                {
                    return(new ObservableList <DeltaElementInfo>());
                }
            }

            GingerCore.Agent agent = (GingerCore.Agent)currentAgent;
            var pomDeltaUtils      = new PomDeltaUtils(this.GetCurrentPOM(), agent);

            try
            {
                //set element type
                var elementList = this.GetCurrentPOM().MappedUIElements.Where(x => x.ElementTypeEnum != eElementType.Unknown).Select(y => y.ElementTypeEnum).Distinct().ToList();
                pomDeltaUtils.PomLearnUtils.LearnOnlyMappedElements = true;
                pomDeltaUtils.SelectedElementTypesList = elementList;
                pomDeltaUtils.PomLearnUtils.ElementLocatorsSettingsList = GingerCore.Platforms.PlatformsInfo.PlatformInfoBase.GetPlatformImpl(agent.Platform).GetLearningLocators();
                pomDeltaUtils.KeepOriginalLocatorsOrderAndActivation    = true;
                pomDeltaUtils.PropertiesChangesToAvoid = DeltaControlProperty.ePropertiesChangesToAvoid.All;

                mAct.ExInfo += DateTime.Now.ToString() + " Self healing operation attempting to auto update application model";
                this.GetCurrentPOM().StartDirtyTracking();

                pomDeltaUtils.LearnDelta().Wait();
                mAct.ExInfo += DateTime.Now + " Self healing operation application model was updated";
            }
            catch (Exception ex)
            {
            }
            finally
            {
                this.GetCurrentPOM().IsLearning = false;
            }

            return(pomDeltaUtils.DeltaViewElements);
        }