CodedUI 仅在使用 FindMatchingControls 后查找 TopLevelWindow

CodedUI Only Finding TopLevelWindow after using FindMatchingControls

我在 WPF 中使用 CodedUI,Visual Studio 2013,结合使用内置工具和手写测试。

我正在尝试单击弹出窗口中的基本按钮 window。我有类似的 windows,工作正常,来自外部库,但这是我自己的。

Mouse.Click(UIMap.StubWindow.OK);

这会产生一个错误,因为它找不到“确定”按钮。另外调用:

UIMap.StubWindow.DrawHighlight();

也失败了,无法找到 window。然而,有时它会在 Windows 中的开始按钮周围绘制轮廓。奇怪的是,在调用 FindMatchingControls() 之后,以下两行都可以正常工作。

UIMap.StubWindow.FindMatchingControls();
UIMap.StubWindow.DrawHighlight();
Mouse.Click(UIMap.StubWindow.OK);

问题是,FindMatchingControls 执行大约需要 5-10 秒,因为它必须搜索系统上的所有顶级 windows。即使在匹配一个 window 之后。调用查找();不起作用。然而奇怪的是,

var x = UIMap.StubWindow.FindMatchingControls().Count;

x 为 1。

这有什么原因吗,或者我不需要调用 FindMatchingControls 的方法?我尝试更改搜索配置以始终搜索 window 和“确定”按钮,但这不起作用。

SearchProperties 依赖于 AutomationId 和框架 ID,两者都使用 EqualsTo 运算符。

即使直接从测试生成器使用,这也不起作用。我只发现 FindMatchingControls 使它在调试时工作,检查歧义。

您是否尝试过使用 UIMap 定义控件 w/o? 是这样的吗?:

var app = new ApplicationUnderTest();
var x = new UITestControl(app);
x.SearchProperties.Add("Key","Value");
x.SearchProperties.Add("Key","Value");
x.SearchProperties.Add("Key","Value");

Mouse.Click(x,x.GetClickablePoint());

刚刚解决了这个问题。现在看起来相当明显,但是弹出窗口 windows 写得很快并且没有标题。

notice/think 这不是很重要,但影响相当大。添加了标题并重新设置了 UIMap,并且工作正常。