我正在尝试选择隐藏在编码UI中的单选按钮。我正在进行手工编码和使用Visual Studio Professional 2015。
这是我的单选按钮属性:
<span id="AddExtraDataWidget_un10_NoorgSportInd_WRAPPER">
<input id="AddExtraDataWidget_un10_No_GROUP" class="Radio" type="radio" value="AddExtraDataWidget_un10_No" onfocus="null" onblur="null" onclick="null;showHideCntrldByCaption(this.checked,'','No','false')" name="AddExtraDataWidget_un10_orgSportInd" tabindex="21"/></span>
我收到以下异常: “Microsoft.VisualStudio.TestTools.UITest.Extension。 FailedToPerformActionOnHiddenControlException ”发生在Microsoft.VisualStudio.TestTools.UITesting.dll中,但未在用户代码中处理“
我的代码是:
HtmlRadioButton radioButtonObject = new HtmlRadioButton(browserWindow);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Id, radioButtonObjectIDVal, PropertyExpressionOperator.Contains);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Name, radioButtonObjectNameVal, PropertyExpressionOperator.Contains);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Value, "AddExtraDataWidget_un10_No", PropertyExpressionOperator.Contains);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.ControlType, "RadioButton", PropertyExpressionOperator.EqualTo);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Class, "Radio", PropertyExpressionOperator.EqualTo);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Type, "radio", PropertyExpressionOperator.EqualTo);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.ClassName, "HtmlRadioButton", PropertyExpressionOperator.EqualTo);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.TagName, "INPUT", PropertyExpressionOperator.EqualTo);
radioButtonObject.FindMatchingControls();
radioButtonObject.GetClickablePoint();
radioButtonObject.DrawHighlight();
radioButtonObject.Find();
radioButtonObject.EnsureClickable();
Mouse.Click(radioButtonObject);
radioButtonObject.Selected = fieldVal;
我几乎尝试了在这些论坛和MSDN中建议的所有内容,但没有运气。
有人可以帮我这个吗?非常感谢您的帮助。
由于
答案 0 :(得分:0)
搜索时通常更少。如果你知道id,你只需要设置id(假设id在页面中实际上是唯一的)。
HtmlRadioButton radioButtonObject = new HtmlRadioButton(browserWindow);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Id, "AddExtraDataWidget_un10_No_GROUP", PropertyExpressionOperator.Equals);
拥有额外的搜索属性只会使测试工作比以前更难:)
如果包含多个此部分ID,则执行包含可能会有危险。如果你需要部分匹配并且知道可以找到多个匹配,请使用FindMatchingControls()并使用LINQ或其他东西过滤到你想要的那个。
我有一个在http://codeduiexamples.com/examples/example1
找到隐藏控件的示例你的控件是如何被隐藏的?例如,显示:无,可见性:隐藏,从DOM中删除,......?
答案 1 :(得分:0)
对于发现这篇文章的其他人来说,还有另一种方法可以解决这个问题。基本上OP的搜索和过滤属性不正确。其他前端UI框架(KendoUI,Angular)将创建“隐藏”的单选按钮,即使您的属性正确,您也无法通过CodedUI与它们进行交互。这也可能会影响其他控件。
我的手动编码测试解决方案是编写一个看起来像这样的共享方法:
/// <summary>
/// Clicks any control on a page for the given area.
/// </summary>
/// <param name="controlObject">Control Object to Click</param>
public static void ClickControl(UITestControl controlObject, int offset = 5)
{
Rectangle clickArea = controlObject.BoundingRectangle;
Point clickPoint = new Point(clickArea.X + offset, clickArea.Y + offset);
Mouse.Click(clickPoint);
}
在简单的英语中,它使用控件的边界框来单击其中的一个点(X和Y值来自左上角)。具有良好ID的控件可能会被隐藏,但无论如何您都可以单击它。