在WPF CodedUI中更快地搜索顶级窗口
本文关键字:搜索 窗口 WPF CodedUI | 更新日期: 2023-09-27 18:12:37
我的应用程序有几个部分应该关闭一个窗口。使用code - ui检查这些窗口是否已关闭是非常缓慢的。现在我的代码看起来像这样:
Assert.IsFalse(UIMap.SomeWindow.TryFind(),
"X Window found when should be closed");
问题是,这需要大约30秒的时间来搜索,并且使用了大约5次,我有大约10个类似的窗口都在测试中。如果可能的话,我希望减少这个时间,因为它使我的测试变慢了。
我也尝试了一个动态的解决方案(这是基本相同的UIMap实现):
var window = new WpfWindow();
window.SearchProperties.Add(UITestControl.PropertyNames.Name, "Window Title");
Assert.IsFalse(window.TryFind());
这也一样慢。这将是很好的使用ApplicationUnderTest作为搜索父,但由于窗口是顶级的,它似乎不工作。
在我的系统中查看打开的窗口(5),并根据搜索参数检查它们的标题,这应该不会太难吧?
编辑:Using SearchConfiguration。VisibleOnly似乎也没有帮助。居然在LinkedIn上找到了我的答案。
现在使用:
Playback.PlaybackSettings.SearchTimeout = 1000; //in ms
Playback.PlaybackSettings.ShouldSearchFailFast = true;
来源:https://www.linkedin.com/grp/post/3828241 - 5843659258196959234
(C& p):
//Search Settings
// Value is in milliseconds. Default search timeout is 2 minutes.
// The search engine will continue making passes until the timeout has expired
// or the window has been found.
settings.SearchTimeout = 10000;
// Default search will make 3 attempts.
// If true the default 3 attempts is applied. If false then only one attempt should take place.
settings.ShouldSearchFailFast = true;
我想可能会有更好的答案。如果像这样设置一个全局配置,并且必须处理一个WPF表并找到一个特定的单元格,您可能会发现它不起作用。
如果有任何动态标题,使用Window name通常不是一个好主意,Control name是一个很好的常量。听起来你传递的搜索属性很差。您可以使用drawighlight()来查看CUI是否真的找到了您的控件。首先将主父窗口传递给close窗口方法,然后将其用作try。public static WinWindow _mainParent(string MainParentCtlName)
{
var _mainForm = new WinWindow();
_mainForm.SearchProperties.Add("ControlName", MainParentCtlName);
return _mainForm;
}
public static void CloseWindow(string MainWinCtlName)
{
var close = new WinButton(_mainParent(MainWinCtlName));
close.SearchProperties.Add("Name", "Close");
Mouse.Click(close);
}
try
{CloseWindow("MainWindowForm")}
catch{}