public static void Execute(this Step step, ref IWebDriver webDriver, ExecutionEnvironment executionEnvironment) { try { step.Measure.StartDate = DateTime.Now; _log_.Trace($"Begin Executing Step {step.Name} | {step.Param}| {step.Value} | {step.Measure.StartDate}"); switch (step.Type) { case (StepType.CREATE_SESSION): { webDriver = WebDriverHelper.CreateSession(executionEnvironment); var sessionId = ((OpenQA.Selenium.Remote.RemoteWebDriver)webDriver).SessionId; var windowSize = ConvertStringToSize(step.Param); webDriver.ResizeWindow(windowSize); _log_.Trace($"Session created : {sessionId.ToString()}"); step.SessionId = sessionId.ToString(); break; } case (StepType.NAVIGATE_URL): var url = UrlHelper.Combine(webDriver.Url, step.Param); webDriver.Navigate().GoToUrl(url); break; case (StepType.CLICK_BUTTON): webDriver.SmartClick(step.Selector); break; case (StepType.SET_TEXT): webDriver.SetText(step.Selector, step.Value); break; case (StepType.MOUSE_HOVER): webDriver.MouseHover(step.Selector); break; case (StepType.ASSERT_TEXT): webDriver.AssertTextEqual(step.Selector, step.Value); break; case (StepType.TAKE_SCREENSHOT): webDriver.TakeScreenshot(step.Value, Path.Combine(executionEnvironment.OutputDirectoryLocation)); break; case (StepType.RESIZE_WINDOW): { var windowSize = ConvertStringToSize(step.Param); webDriver.ResizeWindow(windowSize); break; } case (StepType.EXECUTE_JAVASCRIPT): var result = webDriver.ExecuteJavaScript <string>(step.Param); if (result != step.Value) { throw new Exception($"{step.Param} return {result} and not {step.Value} as expected."); } break; case (StepType.ASSERT_EXISTS): webDriver.AssertExists(step.Selector); break; case StepType.EXECUTE_SCENARIO: throw new InvalidOperationException("Selenium launcher execute only elementary step"); default: throw new NotImplementedException(); } step.Measure.EndDate = DateTime.Now; step.Failed = false; _log_.Trace($"End Executing Step {step.Name} | {step.Measure.StartDate} - {step.Measure.EndDate}"); } catch (Exception ex) { _log_.Trace($"End Executing Step with failure {step.Name} | {ex.Message}"); step.Failed = true; step.StackTrace = ex.Message; throw ex; } }