如何使用MS Coded UI测试(CUIT)检查WPF控件是否隐藏/折叠

4

我想编写一个类似于“某些WPF控件在某些条件下不应该可见”的编码UI测试。如何断言“不可见”?

重现问题的步骤:

  • 创建新的WPF应用程序
  • 除了将一个大的命名按钮添加到主窗口外,不要添加任何内容
  • 进入CUIT编辑器并识别按钮
  • 在不关闭CUIT编辑器的情况下关闭WPF应用程序
  • 将Visibility =“Hidden”添加到按钮
  • 重新启动应用程序
  • 选择CUIT编辑器中的按钮,然后按“刷新”按钮
  • 注意:隐藏按钮的属性与可见按钮的属性完全相同!

没有办法断言按钮是否隐藏!

此外:

  1. 我很乐意听取您使用的解决方法。毕竟,我需要编写测试,而不是找出CUITs。
  2. 我知道可以比较屏幕截图
  3. 有趣的是,如果您尝试对隐藏的按钮进行操作,CUIT将抛出异常。这意味着CUIT知道按钮何时被隐藏。
  4. 有趣的是,如果Visibility =“Collapsed”而不是“Hidden”,CUIT将通过报告Width = Height = -1来识别它。但这对折叠的按钮没有帮助:(
2个回答

1
我发现绕过IsVisible限制的最佳方法是使用UITestControl对象的TryGetClickablePoint(out System.Drawing.Point)方法。该方法将返回一个布尔值。例如,如果您有一个WpfButton:
WpfButton mine = new WpfButton(parent);
mine.SearchProperties["id"] = "id";

Point toString;
bool result = mine.TryGetClickablePoint(out toString);
Assert.IsTrue(result, "My Assertion here.");

那通常是有效的。但是,要处理折叠或展开,是否有某些属性会根据其状态而更改呢?例如,如果类是 class="myobject expanded",您可以轻松地基于 mine.GetProperty("Class").ToString().Contains("expanded"); 断言为布尔值。

0
尝试使用 GetProperty 方法:
WpfButton myButton = new WpfButton();
if(myButton.GetProperty("Enabled").Equals(true))
{
     ... CODE
}

1
不确定为什么这个回答被投票否决了,它和被接受的回答一样好。唯一的问题是这个回答和被接受的回答只有在某些情况下才能起作用。有可能以某种方式隐藏按钮,从而欺骗 Coded UI 测试。 - Ewan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接