如何限制 Coded UI 测试控件搜索

3
使用MS Coded UI,有没有一种方法可以指定搜索控件必须从特定的父级开始?
我正在搜索一个控件,并且希望根据该搜索的成功或失败执行不同的操作。不幸的是,由于另一个具有完全不同父级的控件具有相同的自动化ID(应用程序非常大,因此这经常发生),因此搜索总是成功的。
我猜测搜索从指定的父级开始,并寻找所需的控件。当未找到时,我认为搜索会再次从根开始,而这次找到了具有相同名称的控件(虽然它不是我感兴趣的控件,但它是另一个子树的一部分)。
我的问题是,您是否可以将对控件的搜索限制在特定的子树中。例如,考虑主视图Main有两个子视图View1和View2的情况。每个子视图都包含一个自动ID为“coolControl”的控件。
是否有一种方法可以限制UI搜索,以便仅当在特定父级下找到控件时搜索才成功(比如View1)?失败时,我能否防止搜索重新从根开始?
4个回答

2

我相信您可以做到,

您是否熟悉搜索属性和筛选属性?

如果不是,我建议您按照以下步骤操作:

  1. 打开 UIMap.uitest 文件

  2. 右键单击您的操作,选择 属性

在搜索属性中,您可以添加新的属性,例如 TagName 或 TagInstance,或删除导致问题的属性或过滤属性。

如果这样做没有效果,或者您已经尝试过,那么您将需要手动编写搜索代码,这可能有些棘手。


1
常见的解决方法是添加更多的详细信息到 SearchPropertiesFilterProperties 中。
对于更复杂的解决方法,请查看由Coded UI记录的方法。UI Map类中的方法有像这样的行(此行来自单击Windows 7开始按钮):
WinButton uIStartButton = this.UIStartWindow.UIStartButton;

更普遍地说,这些行就像是:
SomeUiControl uISomeControl = this.UIParent.UIChild.UIGrandChild;

然后代码只需使用控件,例如在上面的开始按钮上使用 Mouse.Click(uIStartButton, new Point(29, 27));
您可以将自己的方法添加到 uimap.cs 文件中,但不要添加到 uimap.designer.cs 文件中,因为每当 UI 映射更改时,该文件都会被重新生成。由于它使用了 partial class,所以您的代码可以选择任何顶级控件,并从那里开始搜索。
我建议仔细阅读生成的代码,了解 Coded UI 生成的代码如何在 UI Map 中使用类、类型和实例。还要注意,使用属性(例如在表达式 this.UIParent.UIChild 中使用 UIParent 的值)会调用 Find 方法,并使用该项的 SearchProperties 和 FilterProperties。

谢谢您的回复!我们正在进行的测试是在Coded UI测试框架的基础上构建的,我们正在手动编码所有内容。我正在使用您提到的语法访问控件,问题是我需要更多地控制实际搜索;我想防止搜索失败后重新启动搜索。我认为您是正确的,我需要更严格地探索搜索属性。再次感谢! - Calvin Belden

0
每个继承自UITestControl的类都有一个构造函数,它接受另一个UITestControl作为参数 - 该UITestControl成为您要搜索的控件的父级(或祖先更高层次),从而有效地限制了您想要的搜索方式。默认构造函数(无参数)使用桌面作为搜索的祖先。例如:
WinButton UIButtonStartButton = new WinButton();

创建一个按钮,用于添加搜索属性,可以在从桌面下降的任何窗口中。
WinButton UIButtonStartButton = new WinButton(MyApplicationWindow);

创建一个按钮,用于将搜索属性添加到指定窗口中。
WinButton UIButtonStartButton = new WinButton(View1);

创建一个按钮,将搜索属性添加到指定视图中。

任何UITestControl都可以作为父级传递,尽管只有某些UITestControls会有后代。


0
也许现在有点晚了,但是还是有一种方法可以找到确切的控件。您可以在其父级下按照确切的层次结构查找控件。
Playback.PlaybackSettings.MatchExactHierarchy = true;

在测试初始化中使用上述行,如果将MatchExactHierarchy设置为true,则只会找到您所指定的相同父级下的控件。

可能会出现一些缓存问题,可能会再次找到错误的控件。

如果想了解更多关于CodedUI的信息,请参考我的博客


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