public static string GenerateInputCodeStub(RecordedGameObjectData obj, bool anyAssertions, string assert)
        {
            StringBuilder stub   = new StringBuilder();
            string        parent = string.Format("<div class='code_line'><span class='variable'>parentObject</span> = <span class='object_declaration'>Q</span>.driver.Find(By.Name, <span class='string_text'>\"{0}\"</span>, false);</div>", obj.TopLevelParentName);

            if (_lastParentObjectSet != parent)
            {
                if (obj.ParentNames.Count <= MAX_NUM_PARENTNAMES_BEFORE_DRILLDOWN)
                {
                    stub.AppendLine(parent);
                }
                _lastParentObjectSet = parent;
            }
            else
            {
                parent = string.Empty;
            }

            string midLevelParentName = string.Empty;

            if (obj.ParentNames.Count > MAX_NUM_PARENTNAMES_BEFORE_DRILLDOWN)
            {
                if (!string.IsNullOrEmpty(parent))
                {
                    stub.AppendLine(parent);
                }
                midLevelParentName = obj.ParentNames[(int)Math.Round((double)obj.ParentNames.Count / 2, 0)];
                if (midLevelParentName != obj.TopLevelParentName && _lastMidLevelObjectSet != midLevelParentName)
                {
                    _lastMidLevelObjectSet = midLevelParentName;
                    stub.AppendLine(string.Format("<div class='code_line'><span class='variable'>middleLevelObject</span> = <span class='object_declaration'>Q</span>.driver.FindIn(<span class='variable'>parentObject</span>, By.Name, <span class='string_text'>\"{0}\"</span>, false);</div>", midLevelParentName));
                }
            }

            string currentObjectFind = string.Format("<span class='object_declaration'>Q</span>.driver.FindIn(<span class='variable'>{0}</span>, By.Name, <span class='string_text'>\"{1}\"</span>)", obj.ParentNames.Count > MAX_NUM_PARENTNAMES_BEFORE_DRILLDOWN && midLevelParentName != obj.TopLevelParentName? "middleLevelObject" : "parentObject", obj.Name);

            if (anyAssertions)
            {
                string current = string.Format("<div class='code_line'><span class='variable'>currentObject</span> = {0};</div>", currentObjectFind);
                if (_lastCurrentObjectSet != current)
                {
                    _lastCurrentObjectSet = current;
                    stub.AppendLine(_lastCurrentObjectSet);
                }
            }
            if (!string.IsNullOrEmpty(assert))
            {
                stub.AppendLine(assert);
            }

            string inputClassName = string.Empty;

            for (int d = 0; d < obj.Components.Count; d++)
            {
                if (obj.Components[d] == "InputField")
                {
                    inputClassName = "InputField";
                    break;
                }
                else if (GameSpecificActableTypes.FindAll(x => x.Key.Name == obj.Components[d] && x.Value == ActableTypes.Input).Any())
                {
                    inputClassName = GameSpecificActableTypes.Find(x => x.Key.Name == obj.Components[d] && x.Value == ActableTypes.Input).Key.Name;
                    break;
                }
                else if (GameMaster.AdditionalAssetsAll.FindAll(x => x.Key.Name == obj.Components[d] && x.Value == ActableTypes.Input).Any())
                {
                    inputClassName = GameMaster.AdditionalAssetsAll.Find(x => x.Key.Name == obj.Components[d] && x.Value == ActableTypes.Input).Key.Name;
                    break;
                }
            }

            stub.AppendLine(string.Format("<div class='code_line'><span class='value'>yield return StartCoroutine</span>(<span class='object_declaration'>Q</span>.driver.SendKeys({0}.GetComponent&lt;<span class='variable'>{1}</span>&gt;(), {2}));</div>", anyAssertions ? "currentObject" : currentObjectFind, inputClassName, obj.RandomStringLength > 0 ? string.Format("<span class='object_declaration'>Q</span>.help.RandomString({0}, {1})", obj.RandomStringLength.ToString(), obj.RandomStringAllowSpecialCharacters ? "false" : "true") : string.Format("<span class='string_text'>\"{0}\"</span>", obj.TextValue)));
            return(_lastAddedStep = stub.ToString());
        }