@Test
  public void testValidateFunctionContext() {
    String filePath = getFilePath("ValidateFunctionContext.macro");

    Element element =
        PoshiRunnerContext.getMacroCommandElement(
            "ValidateFunctionContext#validateFunctionContextPass");

    List<Element> functionElements = element.elements("execute");

    for (Element functionElement : functionElements) {
      PoshiRunnerValidation.validateFunctionContext(functionElement, filePath);
    }

    Assert.assertEquals("ValidateFunctionContext is failing", "", getExceptionMessage());

    element =
        PoshiRunnerContext.getMacroCommandElement(
            "ValidateFunctionContext#validateFunctionContextFail1");

    functionElements = element.elements("execute");

    for (Element functionElement : functionElements) {
      PoshiRunnerValidation.validateFunctionContext(functionElement, filePath);
    }

    Assert.assertEquals(
        "validateFunctionContext is failing", "Invalid path name ClickAt", getExceptionMessage());

    element =
        PoshiRunnerContext.getMacroCommandElement(
            "ValidateFunctionContext#validateFunctionContextFail2");

    functionElements = element.elements("execute");

    for (Element functionElement : functionElements) {
      PoshiRunnerValidation.validateFunctionContext(functionElement, filePath);
    }

    Assert.assertEquals(
        "validateFunctionContext is failing",
        "Invalid path locator Click#CLICK_THERE",
        getExceptionMessage());
  }
  public static void runMacroExecuteElement(Element executeElement, String macroType)
      throws Exception {

    PoshiRunnerStackTraceUtil.setCurrentElement(executeElement);

    XMLLoggerHandler.updateStatus(executeElement, "pending");

    String classCommandName = executeElement.attributeValue(macroType);

    String className = PoshiRunnerGetterUtil.getClassNameFromClassCommandName(classCommandName);

    PoshiRunnerStackTraceUtil.pushStackTrace(executeElement);

    Element rootElement = PoshiRunnerContext.getMacroRootElement(className);

    List<Element> rootVarElements = rootElement.elements("var");

    for (Element rootVarElement : rootVarElements) {
      runVarElement(rootVarElement, false, true);
    }

    PoshiRunnerStackTraceUtil.popStackTrace();

    List<Element> executeVarElements = executeElement.elements("var");

    for (Element executeVarElement : executeVarElements) {
      runVarElement(executeVarElement, false, false);
    }

    PoshiRunnerStackTraceUtil.pushStackTrace(executeElement);

    SummaryLoggerHandler.startSummary(executeElement);

    Element commandElement = PoshiRunnerContext.getMacroCommandElement(classCommandName);

    try {
      Map<String, String> macroReturns = runMacroCommandElement(classCommandName, commandElement);

      List<Element> returnElements = executeElement.elements("return");

      for (Element returnElement : returnElements) {
        String returnFrom = returnElement.attributeValue("from");

        String returnValue = macroReturns.get(returnFrom);

        if (returnValue != null) {
          String returnName = returnElement.attributeValue("name");

          PoshiRunnerVariablesUtil.putIntoCommandMap(returnName, returnValue);
        }
      }
    } catch (Exception e) {
      SummaryLoggerHandler.failSummary(executeElement, e.getMessage());

      throw e;
    }

    SummaryLoggerHandler.passSummary(executeElement);

    PoshiRunnerStackTraceUtil.popStackTrace();

    XMLLoggerHandler.updateStatus(executeElement, "pass");
  }