public IMessage SyncProcessMessage(IMessage msg)
        {
            try
            {
                IMethodCallMessage mcm = (msg as IMethodCallMessage);

                // Check if Selenium Log Trace attribute is applied
                SeleniumLogTraceAttribute[] attrs = (SeleniumLogTraceAttribute[])mcm.MethodBase.GetCustomAttributes(typeof(SeleniumLogTraceAttribute), true);

                // Execute the Pre Method Processing
                for (int i = 0; i < attrs.Length; i++)
                {
                    attrs[i].MethodCallHandler.PreMethodExecutionProcess(ref mcm);
                }

                this.PreMethodExecution(ref mcm);
                IMessage             rtnMsg = _nextSink.SyncProcessMessage(msg);
                IMethodReturnMessage mrm    = (rtnMsg as IMethodReturnMessage);

                // Execute the Pre Method Processing for Selenium Log Attribute
                for (int i = 0; i < attrs.Length; i++)
                {
                    attrs[i].MethodCallHandler.PostMethodExecutionProcess(mcm, ref mrm);
                }

                this.PostMethodExecution(msg as IMethodCallMessage, ref mrm);
                return(mrm);
            }
            catch (Exception e)
            {
                SeleniumLog log = SeleniumLog.Instance();
                log.Warning().WriteLine("SeleniumLog Exception: 01-10 - " + e.Message);
                return(null);
            }
        }
        internal void PrintValues(IMethodCallMessage msg)
        {
            try {
                SeleniumLog log = SeleniumLog.Instance();
                log.Blue().WriteLine("Expand to view input parameters");
                log.SaveIndent("__SELENIUMLOG_PRINT_INPUTS__");
                log.Indent();

                int argumentIndex = 0;
                foreach (var arg in msg.Args)
                {
                    //  Display Values for custom attribute
                    CURRENT_ARGUMENT_NAME = msg.GetInArgName(argumentIndex);
                    DispalyInformation(CURRENT_ARGUMENT_NAME, arg);

                    argumentIndex++;
                }
                log.RestoreIndent("__SELENIUMLOG_PRINT_INPUTS__");
            }
            catch (Exception e)
            {
                SeleniumLog log = SeleniumLog.Instance();
                log.Warning().WriteLine("SeleniumLog Exception: 01-18 - " + e.Message);
            }
        }
        private void OnScriptExecuted(object sender, WebDriverScriptEventArgs webDriverScriptEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnScriptExecute_LogAfterEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Script Executed Successfully!", take_screenshot: log.Config.OnScriptExecute_TakeScreenshotAfterEvent);
                log.Unindent();
            }
        }
        private void OnScriptExecuting(object sender, WebDriverScriptEventArgs webDriverScriptEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnScriptExecute_LogBeforeEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Script Executing: " + webDriverScriptEventArgs.Script, take_screenshot: log.Config.OnScriptExecute_TakeScreenshotBeforeEvent);
                log.Unindent();
            }
        }
        private void OnNavigatedForward(object sender, WebDriverNavigationEventArgs webDriverNavigationEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnNavigatingForward_LogAfterEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Navigate Forward Success!", take_screenshot: log.Config.OnNavigatingForward_TakeScreenshotAfterEvent);
                log.Unindent();
            }
        }
        private void OnNavigatingForward(object sender, WebDriverNavigationEventArgs webDriverNavigationEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnNavigatingForward_LogBeforeEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Navigating Forward: " + webDriverNavigationEventArgs.Url, take_screenshot: log.Config.OnNavigatingForward_TakeScreenshotBeforeEvent);
                log.Unindent();
            }
        }
        private void OnFindingElementCompleted(object sender, FindElementEventArgs findElementEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnFindElement_LogAfterEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Element Found!", take_screenshot: log.Config.OnFindElement_TakeScreenshotAfterEvent);
                log.Unindent();
            }
        }
        private void OnElementClicking(object sender, WebElementEventArgs webElementEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnClick_LogBeforeEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Clicking Element: " + _locator, take_screenshot: log.Config.OnClick_TakeScreenshotBeforeEvent);
                log.Unindent();
            }
        }
 public SeleniumLogTraceAttribute(bool enabled = true)
 {
     try
     {
         this._methodCallHandler = new SeleniumLogTraceHandler(enabled);
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         log.Warning().WriteLine("SeleniumLog Exception: 01-03 - " + e.Message);
     }
 }
        private void OnElementClicked(object sender, WebElementEventArgs webElementEventArgs)
        {
            //Console.WriteLine("ElementClicked: " + webElementEventArgs.Element);
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnClick_LogAfterEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Click Success!", take_screenshot: log.Config.OnClick_TakeScreenshotAfterEvent);
                log.Unindent();
            }
        }
        /// <summary>
        /// Explores any data structure and display the entire tree of elements and values in the log. Works with Lists, Stacks, Queues, etc., or any combination thereof.
        /// </summary>
        /// <param name="arg">The data structure to be explored.</param>
        /// <param name="comment">Optional string to be displayed in the log.</param>
        public void Explore(object arg, string comment = "")
        {
            SeleniumLog log = SeleniumLog.Instance();

            log.SaveIndent("ExploreParams");
            PrintParameters printParameters = new PrintParameters();

            printParameters.PrintValues(arg, comment);
            log.RestoreIndent("ExploreParams");
            //log.MessageSettings.indentModel.SimulateIndentations(MessageSettings.MessageStr);
            log.MessageSettings1.GetPendingLevel();
        }
 public override void GetPropertiesForNewContext(
     System.Runtime.Remoting.Activation.IConstructionCallMessage ctorMsg)
 {
     try
     {
         ctorMsg.ContextProperties.Add(new InterceptProperty());
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         log.Warning().WriteLine("SeleniumLog Exception: 01-07 - " + e.Message);
     }
 }
 public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink)
 {
     try
     {
         IMessageCtrl rtnMsgCtrl = _nextSink.AsyncProcessMessage(msg, replySink);
         return(rtnMsgCtrl);
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         log.Warning().WriteLine("SeleniumLog Exception: 01-11 - " + e.Message);
         return(null);
     }
 }
        private void OnFindingElement(object sender, FindElementEventArgs findElementEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            string[] FindMethodStr = findElementEventArgs.FindMethod.ToString().Split(':');
            _by      = FindMethodStr[0].Split('.')[1].Trim();
            _locator = FindMethodStr[1].Trim();

            if (log.Config.OnFindElement_LogBeforeEvent)
            {
                log.Indent();
                log.Debug("[Selenium Event]  Finding Element: " + _locator, take_screenshot: log.Config.OnFindElement_TakeScreenshotBeforeEvent);
                log.Unindent();
            }
        }
 internal static FieldInfo[] GetPublicFields(object arg)
 {
     try
     {
         Type         type  = arg.GetType();
         BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
         return(type.GetFields(flags));
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         log.Warning().WriteLine("SeleniumLog Exception: 01-17 - " + e.Message);
         return(null);
     }
 }
            public void DisplayResults()
            {
                SeleniumLog log = SeleniumLog.Instance();

                foreach (Result result in Results)
                {
                    if (result.result == true)
                    {
                        log.Green().Pass().WriteLine(result.cummulative_xpath + "  - XPath Found - " + result.matches + " matches.");
                    }
                    else
                    {
                        log.Red().Fail().WriteLine(result.cummulative_xpath + "  - XPath Not Found!");
                    }
                }
            }
 public void Process(IMethodCallMessage callMsg, ref IMethodReturnMessage retMsg)
 {
     if (_enabled)
     {
         SeleniumLog log = SeleniumLog.Instance();
         try
         {
             //_stopwatch.Stop();
             log.Blue().WriteLine(string.Format("Return value: {0}", retMsg.ReturnValue));
             log.RestoreIndent("__SELENIUMLOG_INDENT__");
         }
         catch (Exception e)
         {
             log.Warning().WriteLine("SeleniumLog Exception: 01-05 - " + e.Message);
         }
     }
 }
 private void PostMethodExecution(IMethodCallMessage callMsg, ref IMethodReturnMessage rtnMsg)
 {
     try {
         PostMethodExecutionAttribute[] attrs =
             (PostMethodExecutionAttribute[])
             callMsg.MethodBase.GetCustomAttributes(typeof(PostMethodExecutionAttribute), true);
         for (int i = 0; i < attrs.Length; i++)
         {
             attrs[i].MethodCallHandler.Process(callMsg, ref rtnMsg);
         }
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         log.Warning().WriteLine("SeleniumLog Exception: 01-13 - " + e.Message);
     }
 }
 private void DispalyInformation(string argumentName, object arg)
 {
     try
     {
         SeleniumLog log = SeleniumLog.Instance();
         // Display data structure
         if (arg == null)
         {
             if (log.Config.FunctionTrace_DisplayNullInputs == true)
             {
                 log.Pink().WriteLine(argumentName + " [NULL]");
             }
         }
         else
         {
             if (ParameterProcessor.CheckIfEnumerable(arg))
             {
                 //log.Red().WriteLine("Property: " + argumentName);
                 log.Blue().WriteLine(argumentName + " :");
                 log.SaveIndent("__DISPLAY_ARRAY__");
                 log.Indent();
                 int i = 0;
                 foreach (var iterateValue in (IEnumerable)arg)
                 {
                     ManageCustomDataStructure(argumentName, iterateValue, 1, i);
                     i++;
                 }
                 log.RestoreIndent("__DISPLAY_ARRAY__");
             }
             else
             {
                 // Display property (simple structure)
                 ManageCustomDataStructure(argumentName, arg, 0);
             }
         }
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         if (log.Config.Enable_Generic_Function_Trace == true)
         {
             log.Warning().WriteLine("SeleniumLog Exception: 01-19 - " + e.Message);
         }
     }
 }
        private void OnElementValueChanged(object sender, WebElementEventArgs webElementEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnChangeValue_LogAfterEvent)
            {
                log.SaveIndent("OnElementValueChanged");
                log.Indent();
                log.Debug("[Selenium Event]  Successfully changed value [" + webElementEventArgs.Element.GetAttribute("value") + "]", take_screenshot: log.Config.OnChangeValue_TakeScreenshotAfterEvent);
                log.Unindent();

                if (!string.IsNullOrEmpty(_keyInput))
                {
                    //log.WriteLine("Input was: " + _keyInput);
                }
                log.RestoreIndent("OnElementValueChanged");
            }
        }
        internal static bool CheckIfCustomType(Type type)
        {
            try
            {
                if (type.Namespace != null && !type.Namespace.ToLowerInvariant().Contains("system"))
                {
                    return(true);
                }

                return(false);
            }
            catch (Exception e)
            {
                SeleniumLog log = SeleniumLog.Instance();
                log.Warning().WriteLine("SeleniumLog Exception: 01-15 - " + e.Message);
                return(false);
            }
        }
        public void Process(ref IMethodCallMessage msg)
        {
            SeleniumLog log = SeleniumLog.Instance();

            try
            {
                log.Blue().WriteLine("FUNCTION CALL: " + msg.MethodBase);
                log.SaveIndent("__SELENIUMLOG_INDENT__");
                log.Indent();

                PrintParameters printParameters = new PrintParameters();
                printParameters.PrintValues(msg);
            }
            catch (Exception e)
            {
                log.Warning().WriteLine("SeleniumLog Exception: 01-04 - " + e.Message);
            }
        }
 public override bool IsNewContextOK(Context newCtx)
 {
     try
     {
         InterceptProperty p = newCtx.GetProperty("Intercept") as InterceptProperty;
         if (p == null)
         {
             return(false);
         }
         return(true);
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         log.Warning().WriteLine("SeleniumLog Exception: 01-09 - " + e.Message);
         return(false);
     }
 }
        private void OnElementValueChanging(object sender, WebElementEventArgs webElementEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnChangeValue_LogBeforeEvent)
            {
                log.SaveIndent("OnElementValueChanging");
                log.Indent();
                if (!string.IsNullOrEmpty(_keyInput))
                {
                    log.Debug("[Selenium Event]  Element value changing to [" + _keyInput + "]", take_screenshot: log.Config.OnChangeValue_TakeScreenshotBeforeEvent);
                }
                else
                {
                    log.Debug("[Selenium Event]  Element value changing to - NULL or EMPTY - ", take_screenshot: log.Config.OnChangeValue_TakeScreenshotBeforeEvent);
                }
                log.RestoreIndent("OnElementValueChanging", debug: true);
            }
        }
        private void OnExceptionThrown(object sender, WebDriverExceptionEventArgs webDriverExceptionEventArgs)
        {
            SeleniumLog log = SeleniumLog.Instance();

            if (log.Config.OnWebdriverExceptionThrown_LogEvent)
            {
                log.Indent();
                log.Error().Red().Debug("[Selenium Event]  Exception Thrown: " + webDriverExceptionEventArgs.ThrownException, take_screenshot: true);
                if (_by == "XPath")
                {
                    log.Red().Debug("Running XPath Diagnostics: Expand to see which part of XPath failed.");
                    log.Indent();
                    XPathTest.Test(driver, _locator);
                    XPathTest.DisplayResults();
                    log.Unindent();
                }
                log.Unindent();
            }
        }
 public override bool IsContextOK(Context ctx,
                                  System.Runtime.Remoting.Activation.IConstructionCallMessage ctorMsg)
 {
     try
     {
         InterceptProperty p = ctx.GetProperty("Intercept") as InterceptProperty;
         if (p == null)
         {
             return(false);
         }
         return(true);
     }
     catch (Exception e)
     {
         SeleniumLog log = SeleniumLog.Instance();
         log.Warning().WriteLine("SeleniumLog Exception: 01-08 - " + e.Message);
         return(false);
     }
 }
        public void PostMethodExecutionProcess(IMethodCallMessage callMsg, ref IMethodReturnMessage retMsg)
        {
            SeleniumLog log = SeleniumLog.Instance();

            try
            {
                if (_enabled)
                {
                    _stopwatch.Stop();
                    log.Blue().WriteLine(string.Format("Return value: {0}", retMsg.ReturnValue));
                    log.Blue().WriteLine(string.Format("Duration: {0} msec", _stopwatch.ElapsedMilliseconds));
                    //log.RestoreIndent("__SELENIUMLOG_INDENT__");
                    log.RestoreIndent("__PRE_METHOD_EXECUTION_PROCESS_1_");
                }
            }
            catch (Exception e)
            {
                log.Warning().WriteLine("SeleniumLog Exception: 01-02 - " + e.Message);
            }
        }
Example #28
0
 public static SeleniumLog Instance(IWebDriver webdriver = null, bool overwrite = true, bool debug = false)
 {
     //get
     {
         //lock (padlock)
         {
             if (instance == null)
             {
                 instance = new SeleniumLog(webdriver: webdriver, overwrite: overwrite, debug: debug);
             }
             else
             {
                 if (webdriver != null)
                 {
                     instance.driver = webdriver;
                 }
             }
             return(instance);
         }
     }
 }
        internal static bool CheckIfEnumerable(object variable)
        {
            try
            {
                if (variable is string)
                {
                    return(false);
                }
                //if (typeof(IEnumerable).IsAssignableFrom(p.PropertyType))
                if (variable.GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable <>)))
                {
                    return(true);
                }

                return(false);
            }
            catch (Exception e)
            {
                SeleniumLog log = SeleniumLog.Instance();
                log.Warning().WriteLine("SeleniumLog Exception: 01-14 - " + e.Message);
                return(false);
            }
        }
        public void PreMethodExecutionProcess(ref IMethodCallMessage msg)
        {
            SeleniumLog log = SeleniumLog.Instance();

            try
            {
                if (_enabled)
                {
                    _stopwatch.Start();
                    log.Blue().WriteLine("FUNCTION CALL: " + msg.MethodBase);
                    log.SaveIndent("__PRE_METHOD_EXECUTION_PROCESS_1_");
                    log.Indent();
                    log.SaveIndent("__PRE_METHOD_EXECUTION_PROCESS_2_");
                    PrintParameters printParameters = new PrintParameters();
                    printParameters.PrintValues(msg);
                    log.RestoreIndent("__PRE_METHOD_EXECUTION_PROCESS_2_");
                }
            }
            catch (Exception e)
            {
                log.Warning().WriteLine("SeleniumLog Exception: 01-01 - " + e.Message);
            }
        }
 public static SeleniumLog Instance(IWebDriver webdriver = null, bool overwrite = true, bool debug = false)
 {
     //get 
     {
         //lock (padlock)
         {
             if (instance == null)
             {
                 instance = new SeleniumLog(webdriver: webdriver, overwrite: overwrite, debug: debug);
             }
             else
             {
                 if (webdriver != null)
                 {
                     instance.driver = webdriver;
                 }
             }
             return instance;
         }
     }
 }