예제 #1
0
        void AddTestStep(HtmlElement element, String elementXPosition, String elementYPosition)
        {
            stepsList.SelectionBullet = true;
            WebBrowser browser = new WebBrowser();

            if (tabControl2.SelectedIndex == 0)
            {
                browser = webBrowser1;
            }
            else
            {
                browser = webBrowser2;
            }

            //on, in, to
            String intent = "on";

            //value of input field
            var inputValue = "";

            // value of select list
            var selectValue = "";

            // Check what type of element has been selected
            var elementType = "";

            switch (element.TagName.ToLower())
            {
            case "input":
                elementType = "input field";
                intent      = "in";
                try
                {
                    mshtml.IHTMLInputElement input = element.DomElement as mshtml.IHTMLInputElement;
                    inputValue = input.value;
                }
                catch { }

                break;

            case "select":
                elementType = "select list";
                intent      = "on";
                try
                {
                    mshtml.IHTMLSelectElement select = element.DomElement as mshtml.IHTMLSelectElement;
                    mshtml.HTMLOptionElement  option = (mshtml.HTMLOptionElement)select.item(select.selectedIndex, null);
                    if (select.selectedIndex != 0)
                    {
                        selectValue = option.text;
                    }
                }
                catch { }
                break;

            case "a":
                elementType = "link";
                intent      = "on";
                break;

            case "button":
                intent      = "on";
                elementType = "Button";
                break;

            case "img":
                intent      = "on";
                elementType = "Slide";
                break;
            }

            // Check if the selected element has an associated label we can use
            var elementLabel = "";
            var labels       = browser.Document.GetElementsByTagName("label");

            foreach (HtmlElement lbl in labels)
            {
                //check if element has an ID so we can obtain a label for it
                if (element.Id != null)
                {
                    //check if the current label for attribute matches one for our element
                    //@'for=\"name"'
                    String forLabel = lbl.OuterHtml.Replace("\"", "");
                    if (forLabel.Contains("for=" + element.Id))
                    {
                        elementLabel = lbl.OuterText;
                    }
                }
            }

            //get image alt text
            // vScreen products use images for slides!!
            if (elementType == "Slide")
            {
                mshtml.IHTMLImgElement img = element.DomElement as mshtml.IHTMLImgElement;
                //GenerateAndAddExpectedTextStep(elementType, img.alt, elementYPosition, elementXPosition);


                //BUG: Currently outputs i.e. **USER** even if we're not recording a valid action
                if (outputUser == true)
                {
                    stepsList.SelectionBullet = false;
                    //record which user is recording an action
                    stepsList.AppendText("**" + user.ToUpper() + "**" + Environment.NewLine);
                    //we only want to record the user when recording a new list of steps before an expected result
                    outputUser = false;
                }
                stepsList.SelectionBullet = true;
                stepsList.AppendText(string.Format("Click {0} '{1}' {2}{4}", intent, img.alt, elementType, user.ToUpper(), Environment.NewLine));
            }

            // get text for link
            if (elementType == "link")
            {
                elementLabel = element.InnerText;
                intent       = "on";
            }

            // check if we're dealing with a an input button/submit/reset
            if (elementType == "input field" && elementLabel == "")
            {
                try
                {
                    mshtml.IHTMLInputButtonElement button = element.DomElement as mshtml.IHTMLInputButtonElement;
                    elementType  = "button";
                    intent       = "on";
                    elementLabel = button.value;
                    if (elementLabel == null)
                    {
                        elementLabel = button.name;
                    }
                }
                catch (Exception ex)
                {
                    intent      = "in";
                    elementType = "input";
                }
            }

            if (element.TagName == "BUTTON")
            {
                mshtml.IHTMLElement button = element.DomElement as mshtml.IHTMLElement;


                //BUG: Currently outputs i.e. **USER** even if we're not recording a valid action
                if (outputUser == true)
                {
                    stepsList.SelectionBullet = false;
                    //record which user is recording an action
                    stepsList.AppendText("**" + user.ToUpper() + "**" + Environment.NewLine);
                    //we only want to record the user when recording a new list of steps before an expected result
                    outputUser = false;
                }
                stepsList.SelectionBullet = true;
                stepsList.AppendText(string.Format("Click {0} '{1}' {2}{4}", intent, button.innerHTML, elementType, user.ToUpper(), Environment.NewLine));
            }

            //check type of input
            if (element.TagName == "SELECT")
            {
                if (!string.IsNullOrWhiteSpace(selectValue))
                {
                    //BUG: Currently outputs i.e. **USER** even if we're not recording a valid action
                    if (outputUser == true)
                    {
                        stepsList.SelectionBullet = false;
                        //record which user is recording an action
                        stepsList.AppendText("**" + user.ToUpper() + "**" + Environment.NewLine);
                        //we only want to record the user when recording a new list of steps before an expected result
                        outputUser = false;
                    }
                    stepsList.SelectionBullet = true;
                    stepsList.AppendText(string.Format("Select '{0}'{2}", selectValue, user.ToUpper(), Environment.NewLine));
                }
                else
                {
                    //BUG: Currently outputs i.e. **USER** even if we're not recording a valid action
                    if (outputUser == true)
                    {
                        stepsList.SelectionBullet = false;
                        //record which user is recording an action
                        stepsList.AppendText("**" + user.ToUpper() + "**" + Environment.NewLine);
                        //we only want to record the user when recording a new list of steps before an expected result
                        outputUser = false;
                    }
                    stepsList.SelectionBullet = true;
                    if (RecordElementPosition == true)
                    {
                        // we found the label associated to the selected input and it doesn't have a value input
                        stepsList.AppendText(string.Format("Click {0} '{1}' {2} toward {4} {5} of page{6}", intent, elementLabel, elementType, user.ToUpper(), elementYPosition, elementXPosition, Environment.NewLine));
                    }
                    else
                    {
                        // we found the label associated to the selected input and it doesn't have a value input
                        stepsList.AppendText(string.Format("Click {0} '{1}' {2}{4}", intent, elementLabel, elementType, user.ToUpper(), Environment.NewLine));
                    }
                }
            }
            else
            {
                //check if input has a value
                if (string.IsNullOrWhiteSpace(inputValue))
                {
                    if (!string.IsNullOrWhiteSpace(elementLabel) && !string.IsNullOrWhiteSpace(elementType))
                    {
                        //BUG: Currently outputs i.e. **USER** even if we're not recording a valid action
                        if (outputUser == true)
                        {
                            stepsList.SelectionBullet = false;
                            //record which user is recording an action
                            stepsList.AppendText("**" + user.ToUpper() + "**" + Environment.NewLine);
                            //we only want to record the user when recording a new list of steps before an expected result
                            outputUser = false;
                        }

                        stepsList.SelectionBullet = true;
                        if (RecordElementPosition == true)
                        {
                            // we found the label associated to the selected input and it doesn't have a value input
                            stepsList.AppendText(string.Format("Click {0} '{1}' {2} toward {4} {5} of page{6}", intent, elementLabel, elementType, user.ToUpper(), elementYPosition, elementXPosition, Environment.NewLine));
                            //stepsList.AppendText(string.Format("**{3}**{6}Click {0} '{1}' {2} toward {4} {5} of page{6}", intent, elementLabel, elementType, user.ToUpper(), elementYPosition, elementXPosition, Environment.NewLine));
                        }
                        else
                        {
                            // we found the label associated to the selected input and it doesn't have a value input
                            stepsList.AppendText(string.Format("Click {0} '{1}' {2}{4}", intent, elementLabel, elementType, user.ToUpper(), Environment.NewLine));
                            //stepsList.AppendText(string.Format("**{3}**{4}Click {0} '{1}' {2}{4}", intent, elementLabel, elementType, user.ToUpper(), Environment.NewLine));
                        }
                    }
                }
                else
                {
                    if (elementType == "button")
                    {
                        //BUG: Currently outputs i.e. **USER** even if we're not recording a valid action
                        if (outputUser == true)
                        {
                            stepsList.SelectionBullet = false;
                            //record which user is recording an action
                            stepsList.AppendText("**" + user.ToUpper() + "**" + Environment.NewLine);
                            //we only want to record the user when recording a new list of steps before an expected result
                            outputUser = false;
                        }
                        stepsList.SelectionBullet = true;
                        if (RecordElementPosition == true)
                        {
                            // we found the label associated to the selected input and it doesn't have a value input
                            stepsList.AppendText(string.Format("Click {0} '{1}' {2} toward {4} {5} of page{6}", intent, elementLabel, elementType, user.ToUpper(), elementYPosition, elementXPosition, Environment.NewLine));
                        }
                        else
                        {
                            // we found the label associated to the selected input and it doesn't have a value input
                            stepsList.AppendText(string.Format("Click {0} '{1}' {2}{4}", intent, elementLabel, elementType, user.ToUpper(), Environment.NewLine));
                        }
                    }
                    else
                    {
                        //BUG: Currently outputs i.e. **USER** even if we're not recording a valid action
                        if (outputUser == true)
                        {
                            stepsList.SelectionBullet = false;
                            //record which user is recording an action
                            stepsList.AppendText("**" + user.ToUpper() + "**" + Environment.NewLine);
                            //we only want to record the user when recording a new list of steps before an expected result
                            outputUser = false;
                        }
                        stepsList.SelectionBullet = true;
                        // we found the label associated to the selected input
                        stepsList.AppendText(string.Format("Input '{0}'{2}", inputValue, user.ToUpper(), Environment.NewLine));
                    }
                }
            }

            stepsList.SelectionBullet = false;
            ScrollToRecordedStepsEnd();
        }
예제 #2
0
        void AddExpectedResult(HtmlElement element, String elementXPosition, String elementYPosition)
        {
            // whether or not to output the actor in the test steps script
            outputUser = true;

            //ensure bullet list for new line is off for expected result
            stepsList.SelectionBullet = false;

            //check which browser window is recording the result
            WebBrowser browser = new WebBrowser();

            if (tabControl2.SelectedIndex == 0)
            {
                browser = webBrowser1;
            }
            else
            {
                browser = webBrowser2;
            }

            var elementType = "";

            switch (element.TagName.ToLower())
            {
            case "a":
                elementType = "Link";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "h1":
                elementType = "page heading";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "h2":
                elementType = "page heading";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "h3":
                elementType = "page heading";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "h4":
                elementType = "page heading";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "h5":
                elementType = "page heading";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "h6":
                elementType = "page heading";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "p":
                elementType = "page text";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "span":
                elementType = "page";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "label":
                elementType = "Label";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;

            case "div":
                elementType = "page text";
                GenerateAndAddExpectedTextStep(elementType, element.InnerText, elementYPosition, elementXPosition);
                break;


            case "img":
                elementType = "Image";
                mshtml.IHTMLImgElement img = element.DomElement as mshtml.IHTMLImgElement;
                GenerateAndAddExpectedTextStep(elementType, img.alt, elementYPosition, elementXPosition);
                break;

            case "input":
                //check if regular input or a button!
                try
                {
                    mshtml.IHTMLInputElement input = element.DomElement as mshtml.IHTMLInputElement;
                    if (input.type.ToLower() == "text")
                    {
                        elementType = "Input";

                        // Check if the selected element has an associated label we can use
                        var inputLabel  = "";
                        var inputLabels = browser.Document.GetElementsByTagName("label");
                        foreach (HtmlElement lbl in inputLabels)
                        {
                            //check if element has an ID so we can obtain a label for it
                            if (element.Id != null)
                            {
                                //check if the current label for attribute matches one for our element
                                String forLabel = lbl.OuterHtml.Replace("\"", "");
                                if (forLabel.Contains("for=" + element.Id))
                                {
                                    inputLabel = lbl.OuterText;
                                }
                            }
                        }

                        string inputValue = "";
                        if (input.value == null)
                        {
                            inputValue = input.name;
                        }
                        else
                        {
                            inputValue = input.value;
                        }

                        if (RecordElementPosition == true)
                        {
                            stepsList.AppendText(string.Format("{5}Expected Result{5}'{6} {0}' {1} toward {3} {4} of page contains text '{2}'{5}{5}", inputLabel, elementType, inputValue, elementYPosition, elementXPosition, Environment.NewLine, user));
                        }
                        else
                        {
                            stepsList.AppendText(string.Format("{3}Expected Result{3}{4} '{0}' {1} contains text '{2}'{3}{3}", inputLabel, elementType, inputValue, Environment.NewLine, user));
                        }
                    }

                    else
                    {
                        elementType = "Button";
                        mshtml.IHTMLInputButtonElement inputButton = element.DomElement as mshtml.IHTMLInputButtonElement;

                        //need to clean up - check if field is a password field!
                        if (input.type.ToLower() == "password")
                        {
                            elementType = "Input";
                        }



                        // Check if the selected element has an associated label we can use
                        var inputLabel  = "";
                        var inputLabels = browser.Document.GetElementsByTagName("label");
                        foreach (HtmlElement lbl in inputLabels)
                        {
                            //check if element has an ID so we can obtain a label for it
                            if (element.Id != null)
                            {
                                //check if the current label for attribute matches one for our element
                                String forLabel = lbl.OuterHtml.Replace("\"", "");
                                if (forLabel.Contains("for=" + element.Id))
                                {
                                    inputLabel = lbl.OuterText;
                                }
                            }
                        }

                        string inputValue = "";
                        if (input.value == null)
                        {
                            inputValue = input.name;
                        }
                        else
                        {
                            inputValue = input.value;
                        }
                        if (RecordElementPosition == true)
                        {
                            stepsList.AppendText(string.Format("{4}Expected Result{4}{5} {0} toward {2} {3} of page contains text '{1}'{4}{4}", elementType, inputValue, elementYPosition, elementXPosition, Environment.NewLine, user.ToUpper()));
                        }
                        else
                        {
                            //    stepsList.AppendText(string.Format("Expected Result{2}{3} {0} contains text '{1}'{2}{2}", elementType, inputValue, Environment.NewLine, user));
                            if (inputLabel == "")
                            {
                                inputLabel = input.name;
                            }
                            stepsList.AppendText(string.Format("{3}Expected Result{3}{4} '{0}' {1} contains text '{2}'{3}{3}", inputLabel, elementType, inputValue, Environment.NewLine, user));
                        }
                    }
                }
                catch { }

                elementType = "Input";
                break;

            case "button":
                elementType = "Button";
                mshtml.IHTMLElement button = element.DomElement as mshtml.IHTMLElement;
                if (RecordElementPosition == true)
                {
                    stepsList.AppendText(string.Format("{4}Expected Result{4}{5} {0} toward {2} {3} of page contains text '{1}'{4}{4}", elementType, button.innerHTML, elementYPosition, elementXPosition, Environment.NewLine, user));
                }
                else
                {
                    stepsList.AppendText(string.Format("{2}Expected Result{2}{3} {0} contains text '{1}'{2}{2}", elementType, button.innerHTML, Environment.NewLine, user));
                }
                break;

            case "select":
                elementType = "Select list";
                mshtml.IHTMLSelectElement select = element.DomElement as mshtml.IHTMLSelectElement;
                mshtml.HTMLOptionElement  option = (mshtml.HTMLOptionElement)select.item(select.selectedIndex, null);

                // use select list associated label name
                // Check if the selected element has an associated label we can use
                var elementLabel = "";
                var labels       = browser.Document.GetElementsByTagName("label");
                foreach (HtmlElement lbl in labels)
                {
                    //check if element has an ID so we can obtain a label for it
                    if (element.Id != null)
                    {
                        //check if the current label for attribute matches one for our element
                        String forLabel = lbl.OuterHtml.Replace("\"", "");
                        if (forLabel.Contains("for=" + element.Id))
                        {
                            elementLabel = lbl.OuterText;
                        }
                    }
                }

                var selectValue = "";
                if (select.selectedIndex != 0)
                {
                    selectValue = option.text;
                }
                if (selectValue != "")
                {
                    if (RecordElementPosition == true)
                    {
                        stepsList.AppendText(string.Format("{5}Expected Result{5}{6} '{0}' {1} toward {3} {4} of page contains option '{2}'{5}{5}", elementLabel, elementType, selectValue, elementYPosition, elementXPosition, Environment.NewLine, user));
                        stepsList.AppendText("\n");
                    }
                    else
                    {
                        stepsList.AppendText(string.Format("{3}Expected Result{3}{4} '{0}' {1} contains option '{2}'{3}{3}", elementLabel, elementType, selectValue, Environment.NewLine, user));
                        stepsList.AppendText("\n");
                    }
                }
                break;
            }
            ScrollToRecordedStepsEnd();
        }