/// <summary>
        /// Populate member data and testresults are cleaned up.
        /// if there is existing data, clean up first and populate
        /// please don't call it directly but use UpdateElementAction.
        /// it would make Ux and Runtime separation easier since all communication is done via Actions.
        /// </summary>
        /// <param name="element"></param>
        public static void PopulateAllPropertiesWithLiveData(this A11yElement element)
        {
            element.Clear();

            if (element.IsSafeToRefresh())
            {
                element.PopulatePropertiesAndPatternsFromCache();
                element.PopulatePlatformProperties();
            }
        }
        /// <summary>
        /// Populate member data and testresults are cleaned up.
        /// if there is existing data, clean up first and populate
        /// please don't call it directly but use UpdateElementAction. 
        /// it would make Ux and Runtime separation easier since all communication is done via Actions. 
        /// </summary>
        /// <param name="element"></param>
        public static void PopulateAllPropertiesWithLiveData(this A11yElement element)
        {
            if (element == null) throw new ArgumentNullException(nameof(element));

            element.Clear();

            if (element.IsSafeToRefresh())
            {
                element.PopulatePropertiesAndPatternsFromCache();
                element.PopulatePlatformProperties();
            }
        }