CodedUI在使用FindMatchingControls后只找到TopLevelWindow

本文关键字:TopLevelWindow FindMatchingControls CodedUI | 更新日期: 2023-09-27 18:10:57

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

我试图点击一个弹出窗口的基本按钮。我有类似的窗口工作良好,从外部库,但这是来自我自己的。

Mouse.Click(UIMap.StubWindow.OK);

这会产生一个错误,因为它找不到OK按钮。另外要求:

UIMap.StubWindow.DrawHighlight();

也失败,无法找到窗口。然而,有时它会在Windows的开始按钮周围画一个轮廓。奇怪的是,在调用FindMatchingControls()之后,下面的两行都能正常工作。

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

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

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

x = 1

是否有这样的原因,或者我不需要调用FindMatchingControls的方法?我已经尝试更改搜索配置,以始终搜索窗口和OK按钮,但这不起作用。

SearchProperties依赖于一个AutomationId和一个Framework ID,两者都使用EqualsTo操作符。

即使直接从测试构建器中使用也不能工作。我只发现FindMatchingControls使它在调试时工作,检查歧义。

CodedUI在使用FindMatchingControls后只找到TopLevelWindow

刚刚修复了这个问题。现在看起来很明显,但是弹出窗口写得很快,没有标题。

没有注意到/认为这很重要,但有相当大的影响。添加标题并重新设置UIMap,效果很好

您是否尝试过使用UIMap来定义控件?像这样的?:

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());