编码ui测试项目,获取asp标签的值

时间:2017-07-21 11:00:04

标签: c# asp.net coded-ui-tests

在webforms中创建了一个简单的计算器应用程序。 用户在文本字段MainContent_numberTb中输入一个数字,然后点击结果按钮。

在我的解决方案中添加了一个新的“编码UI测试项目”。通过添加'5'测试了UI,这一切都很好。现在想将实际结果与预期结果进行比较。

BrowserWindow Browser = BrowserWindow.Launch("http://url");

UITestControl UiInputField = new UITestControl(Browser);
UiInputField.TechnologyName = "Web";
UiInputField.SearchProperties.Add("ControlType", "Edit");
UiInputField.SearchProperties.Add("Id", "MainContent_numberTb");

//Populate input field
Keyboard.SendKeys(UiInputField, "5");

//Results Button
UITestControl ResultsBtn = new UITestControl(Browser);
ResultsBtn.TechnologyName = "Web";
ResultsBtn.SearchProperties.Add("ControlType", "Button");
ResultsBtn.SearchProperties.Add("Id", "MainContent_calBtn");

Mouse.Click(ResultsBtn);

以上所有代码都运行正常,尝试访问标签时出现问题

<asp:Label ID="AllNumLbl_Res" runat="server"></asp:Label>

我在控件类型旁插入什么?它不是编辑,因为编辑是文本字段。那么,什么存储实际结果,以便我可以比较AllNumsTB

string expectedAllNums = "1, 2, 3, 4, 5";
UITestControl AllNumsTB = new UITestControl(Browser);
AllNumsTB.TechnologyName = "Web";
AllNumsTB.SearchProperties.Add("ControlType", "?????");
AllNumsTB.SearchProperties.Add("Id", "MainContent_AllNumLbl_Res");

if(expectedAllNums != AllNumsTB.??????)
{
    Assert.Fail("Wrong Answer");
}

更新 好的,所以使用调试器控制台,我能够使用((Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlSpan)new System.Collections.ArrayList.ArrayListDebugView(((System.Collections.CollectionBase)(AllNumsTB.FindMatchingControls()).List).InnerList).Items[0]).DisplayText

获取标签的值

但是当我在代码中使用它时由于保护,ArrayListDebugView无法访问?

/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /// 的更新 感谢K Scandrett的回答...如果我可能想知道你是否也可以帮我验证...如果用户输入一个字母或一个非正号码,错误信息将会触发..

<asp:RegularExpressionValidator ID="regexpName"

 //VALIDATION MESSAGE
                UITestControl PositiveNumValMsg = new UITestControl(Browser);
                PositiveNumValMsg.TechnologyName = "Web";
                PositiveNumValMsg.SearchProperties.Add("Id", "MainContent_regexpName");

这一切都很好,但是我想测试标签是否出现......到目前为止我已经尝试了

//bool visible = false;
            //System.Drawing.Point p;

            //// If the control is offscreen, bring it into the viewport
            //PositiveNumValMsg.EnsureClickable();

            //    // Now check the coordinates of the clickable point
            //    visible = PositiveNumValMsg.TryGetClickablePoint(out p)
            //        && (p.X > 0 || p.Y > 0);

            var isVisible = PositiveNumValMsg.WaitForControlPropertyNotEqual(UITestControl.PropertyNames.State, ControlStates.Invisible);

但即使标签未显示,它们都会返回true,但它仍然在页面上设置为不可见。在那种情况下,我应该检查它的风格......像

这样的东西
//string labelText3 = PositiveNumValMsg.GetProperty("style").ToString();

然后检查样式是否包含visibility: visible

1 个答案:

答案 0 :(得分:3)

您想获取其InnerText属性。

设置ControlType并非强制要求,因此以下内容的某些变体应该有效:

UITestControl AllNumsTB = new UITestControl(Browser);
AllNumsTB.TechnologyName = "Web";
AllNumsTB.SearchProperties.Add(HtmlControl.PropertyNames.Id, "MainContent_AllNumLbl_Res");

var result = AllNumsTB.GetProperty(HtmlLabel.InnerText).Trim();
// var result = AllNumsTB.GetProperty("InnerText").Trim();
来自https://social.msdn.microsoft.com/Forums/en-US/69ea15e3-dcfa-4d51-bb6e-31e63deb0ace/how-to-read-dynamic-text-from-label-using-coded-ui-for-web-application?forum=vstest

var AllNumsTB = new HtmlLabel(Browser);
AllNumsTB.TechnologyName = "Web";
AllNumsTB.SearchProperties.Add(HtmlControl.PropertyNames.Id, "MainContent_AllNumLbl_Res");
var result = AllNumsTB.InnerText;

string result2;

// you may need to include this section, or you may not
if (result.Length > 0)
{
    AllNumsTB.WaitForControlReady();
    result2 = AllNumsTB.InnerText;
}

编辑:关于测试ASP.Net验证器

我已经能够使用以下方法检查验证器消息是否显示:

1)创建了一个带有正则表达式验证器的测试asp.net页面,该验证器只需要2位数字:

<asp:TextBox ID="numberTb" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="regexpName" ControlToValidate="numberTb" ValidationExpression="\d{2}" runat="server" ErrorMessage="Please enter 2 digits"></asp:RegularExpressionValidator>
<asp:Button ID="Button1" runat="server" Text="Button" />

2)运行Coded UI Test构建器并开始录制=&gt; 点击输入框;键入 s ;点击标签(显示验证程序错误消息)。

3)暂停了录音机。

4)单击“生成代码”图标并为其指定方法名称;点击“添加并生成”按钮。

5)现在我将Crosshair图标拖放到验证器消息上。向下滚动选项列表是ControlDefinition。右键单击它并选择“添加断言...”。

6)将比较器改为“包含”;比较价值“可见;”;并给它一个断言失败的消息。

7)单击“生成代码”图标,为其指定方法名称等

现在我们有代码通过运行两个方法来测试验证器 - 首先输入输入并触发(或不触发)验证器消息;第二个测试验证器的消息可见性。我复制并粘贴了生成的代码并用它来编写另一个反对的测试,使用“隐藏”;给出正确的输入。跑了两个测试,他们都过去了。

你最终会得到(有替代值):

public void DigitValidatorMsgShownWithIncorrectStringInput()
{
    #region Variable Declarations
    HtmlSpan uIAtleast2digitsPane = this.UIHomePageMyASPNETApplWindow.UIHomePageMyASPNETApplDocument.UIAtleast2digitsPane;
    #endregion

    // Verify that the 'ControlDefinition' property of 'At least 2 digits' pane contains ' visible;'
    StringAssert.Contains(uIAtleast2digitsPane.ControlDefinition, " visible;", "The validator was not shown");
}

当然,一旦你知道你在寻找什么,所有这些都可以手动编码。