我正在自动化WPF应用程序,当我记录" WpfComboBox"在该控件上控制并执行选择索引,它会抛出错误,例如"无法对阻塞控制异常执行操作"。请帮我解决这个问题。
WpfControl customContr = new WpfControl(subDvnMap.SubDvsnItemCustom.SubDvsnItemTabList.SubDvsnPIPrismPrismExtensioTabPage);
customContr.SearchProperties.Add(WpfControl.PropertyNames.AutomationId, "legalFormatsControl");
WpfComboBox combLegal = new WpfComboBox(customContr);
combLegal.SearchProperties.Add(WpfComboBox.PropertyNames.AutomationId, "legalFormats");
combLegal.Find();
combLegal.SelectedIndex = 2;
以上是我的代码,它在combLegal.selectedIndex = 2
中抛出错误答案 0 :(得分:3)
此问题的原因:
控件放在一个不可见的控件内,该控件放在父控件中。就像在您的代码中一样,combLegal
组合框位于customContr
Wpfcontrol中。但是还有另一个控件阻止你访问组合框。设计人员在调试时必须将其用于其他目的,并且忘记在完成后将其删除。
可能的解决方案:
1
。尝试通过其父级访问不可见的控件。
WpfControl customContr = new WpfControl(subDvnMap.SubDvsnItemCustom......);
customContr.SearchProperties.Add(....AutomationId, "legalFormatsControl");
foreach(WpfControl TempContr in customContr.GetChildren())
{
WpfControl ChildContr = TempContr.GetChildren().ElementAt(0);
if(ChildContr is WpfComboBox)
{
combLegal.SelectedIndex = 2;
break;
}
}
2.尝试通过检查宽度来访问控件。
WpfControl customContr = new WpfControl(subDvnMap.SubDvsnItemCustom......);
customContr.SearchProperties.Add(....AutomationId, "legalFormatsControl");
foreach(WpfControl TempContr in customContr.GetChildren())
{
if(TempContr.BoundingRectangle.Width>0)
{
combLegal.SelectedIndex = 2;
break;
}
}
3.尝试通过检查父级的宽度来访问控件。
WpfControl customContr = new WpfControl(subDvnMap.SubDvsnItemCustom......);
customContr.SearchProperties.Add(....AutomationId, "legalFormatsControl");
foreach(WpfControl TempContr in customContr.GetChildren())
{
if(TempContr.BoundingRectangle.Width>0)
{
WpfControlCollection Collection = TempContr.GetChildren();
foreach(WpfControl combLegal in Collection)
{
if(combLegal is WpfComboBox)
{
combLegal.SelectedIndex = 2;
break;
}
}
}
}
其中一个应解决您的问题。如果没有,请在下面做评论,我们将进行更多尝试。祝你好运.. !!
答案 1 :(得分:0)
您好我认为您之前已在同一控件上执行了一些其他操作。
最好再次添加相同的控件并使用其他名称重命名,并确保它仅与此单个操作或操作相关联。
这会对你有帮助。
答案 2 :(得分:0)
这在角网络应用程序中发生了很多,其中有一个父控件阻止其下面的“真实”控件,也不会接受直接控制。最终@ Rajesh-S的钱是正确的,有时他的亲子方法优于这个。然而,并不总是答案。
为了解决这个问题,我的团队使用了类似的方法。谨慎使用。
/// <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);
}
传递任何您获得正确边界框的控件。请记住,偏移量将来自左上角。通常情况下,5可以与大多数控件进行交互。
答案 3 :(得分:0)
public static void ClickCenterOfAControl(UITestControl control)
{
Point location = control.BoundingRectangle.Location;
location.Offset(control.BoundingRectangle.Width / 2, control.BoundingRectangle.Height / 2);
Mouse.Click(location);
}
希望这会起作用
答案 4 :(得分:0)
如果元素是链接或按钮,那么它使用下面的代码行
Mouse.Click(element);
但是,有时我们可能想要点击div标签或span标签而不是链接。为此,如果点击的位置不明确,那么我们也会遇到这种类型的错误。
为此,我们可以使用以下代码行
Mouse.Click(element.BoundingRectangle.Location);