C# 编码ui测试项目,获取asp标签的值
在webforms中创建了一个简单的计算器应用程序。 用户在文本字段C# 编码ui测试项目,获取asp标签的值,c#,asp.net,coded-ui-tests,C#,Asp.net,Coded Ui Tests,在webforms中创建了一个简单的计算器应用程序。 用户在文本字段MainContent\u numberTb中输入一个数字,然后单击结果按钮 在我的解决方案中添加了一个新的“编码UI测试项目”。已经通过添加“5”测试了UI,这一切都很好。现在将实际结果与预期结果进行比较 BrowserWindow Browser = BrowserWindow.Launch("http://url"); UITestControl UiInputField = new UITestControl(Brow
MainContent\u 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>
更新
好的,使用调试器控制台,我能够使用((Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlSpan)new System.Collections.ArrayList.ArrayListDebugView(((System.Collections.CollectionBase)(AllNumsTB.FindMatchingControls()).List.InnerList)获取标签的值。项[0])。显示文本
但是当我在代码中使用它时&ArrayListDebugView
由于保护而无法访问
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
更新
感谢K Scandrett的回答…如果可以的话,我想知道您是否也可以帮助我进行验证…如果用户输入一封信或一个非正数,则会发出错误消息
<asp:RegularExpressionValidator ID="regexpName"
//VALIDATION MESSAGE
UITestControl PositiveNumValMsg = new UITestControl(Browser);
PositiveNumValMsg.TechnologyName = "Web";
PositiveNumValMsg.SearchProperties.Add("Id", "MainContent_regexpName");
但即使标签未显示,它们都返回true,但标签仍在页面上,只是设置为“不可见”。那样的话,我应该检查一下它的样式
//string labelText3 = PositiveNumValMsg.GetProperty("style").ToString();
然后检查样式是否包含可见性:可见?要获取其属性
设置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();
或来自:
编辑:关于测试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" />
当然,一旦你知道你在寻找什么,所有这些都可以手动编码。谢谢你的帮助,第二个例子对我很有用。如果可以的话,我已经更新了Q以包含验证查询。我知道这不是原始问题的一部分,我仍然会认为你的答案是正确的,但你似乎知道你在说什么,我找不到我想要的,所以我想我会问。如果没有,谢谢你的原始答案!。。。验证消息以文本形式呈现,因此您应该能够使用var positiveEnumValMsg=new HtmlSpan(浏览器)代码>如果您想更明确。变量通常以小写字母开头,因此,positiveEnumValMsg
将是一个更为传统的名称。不能使用positiveEnumValMsg.GetProperty(“样式”),因为它返回空值….trusted var positiveEnumValMsg1=new HtmlSpan(浏览器);positiveEnumValmsg1.GetProperty(“样式”);这表示表达式中存在内部错误。感谢您的回复,问题在于找不到标签。我可以通过UITestControl PositiveEnumValMsg=新UITestControl(浏览器)找到它;positiveEnumValMsg.TechnologyName=“Web”;positiveEnumValMsg.SearchProperties.Add(“Id”,“MainContent_regexpName”);问题在于查找style=“visibility:是可见还是隐藏”,这样我就可以在输入字母时测试显示是否可见。谢谢,我理解,但我认为您可以使用与搜索ControlDefinition相同的技术来搜索“visible”的出现,如果它没有找到控件,它将被隐藏。
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();
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: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" />
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");
}