我正在为其编写编码 UI 测试的应用程序有一个窗口,其中部分窗口标题基于为临时文件生成的随机文件名,因此测试只能知道窗口标题的静态部分。
有时,当没有其他窗口打开时,测试运行良好。但是,当其他窗口打开时,这有点问题。如果其他窗口具有类似的控件,则测试选择在哪个窗口中工作是不可预测的。
我正在为其编写编码 UI 测试的应用程序有一个窗口,其中部分窗口标题基于为临时文件生成的随机文件名,因此测试只能知道窗口标题的静态部分。
有时,当没有其他窗口打开时,测试运行良好。但是,当其他窗口打开时,这有点问题。如果其他窗口具有类似的控件,则测试选择在哪个窗口中工作是不可预测的。
我已将其缩小为:搜索控件时,编码 UI 测试使用搜索属性和控件的树状结构。如果它找不到完全匹配,它会找到一个紧密匹配(因此它找不到确切的窗口标题名称,它会排除它并继续搜索与任何其他给定属性匹配的窗口),这就是它与控件一起使用的原因在其他窗口中。
解决方案实际上是为其提供更多搜索属性。我使用的一种方法是使用PropertyExpression添加属性并将其传递给PropertyExpressionOperator.Contains。
例如,我记录了打开 MS Word 并关闭它。这会在 UIMap 中生成一个控件,在其构造函数中如下:
this.SearchProperties[WinWindow.PropertyNames.Name] = "Document1 - Microsoft Word";
this.SearchProperties[WinWindow.PropertyNames.ClassName] = "OpusApp";
相反,第一行应该是:
this.SearchProperties.Add(new PropertyExpression(WinWindow.PropertyNames.Name, "Microsoft Word", PropertyExpressionOperator.Contains));
甚至更简单,您可以使用:
this.SearchProperties.Add(WinWindow.PropertyNames.Name, "Microsoft Word", PropertyExpressionOperator.Contains);