Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制编码的UI测试控件搜索_C#_User Interface_Msdn_Coded Ui Tests_Ui Testing - Fatal编程技术网

C# 如何限制编码的UI测试控件搜索

C# 如何限制编码的UI测试控件搜索,c#,user-interface,msdn,coded-ui-tests,ui-testing,C#,User Interface,Msdn,Coded Ui Tests,Ui Testing,使用MS编码的UI,是否有方法指定控件的搜索必须从特定父级开始 我正在搜索控件,我希望根据搜索的成功与否执行不同的操作。不幸的是,由于另一个控件(具有完全不同的父控件)具有相同的自动化id(应用程序非常大,因此这种情况经常发生),因此搜索总是成功的(无论所讨论的控件是否存在) 我猜搜索从指定的父级开始,并查找所需的控件。如果找不到,我相信搜索会从根开始,这次找到了同名控件(尽管它不是我感兴趣的控件,它是另一子树的一部分) 我的问题是是否可以将控件的搜索限制在特定子树上。例如,考虑主视图主视图有两

使用MS编码的UI,是否有方法指定控件的搜索必须从特定父级开始

我正在搜索控件,我希望根据搜索的成功与否执行不同的操作。不幸的是,由于另一个控件(具有完全不同的父控件)具有相同的自动化id(应用程序非常大,因此这种情况经常发生),因此搜索总是成功的(无论所讨论的控件是否存在)

我猜搜索从指定的父级开始,并查找所需的控件。如果找不到,我相信搜索会从根开始,这次找到了同名控件(尽管它不是我感兴趣的控件,它是另一子树的一部分)

我的问题是是否可以将控件的搜索限制在特定子树上。例如,考虑主视图主视图有两个子视图VIEW1和VIEW2。每个子视图都包含一个自动ID为“coolControl”的控件


是否有一种方法可以限制UI搜索,以便只有在特定父项下(如View1)才能成功搜索?失败后,我可以阻止从根目录重新启动搜索吗?

我相信您可以做到

您熟悉搜索属性和筛选器属性吗

如果不是,我建议你做以下几点

  • 转到UIMap.uitest文件

  • 右键单击您的操作并选择属性

  • 在“搜索属性”中,您可以添加一个新属性,如TagName或TagInstance,或删除引起问题的属性或筛选器属性


    如果这不起作用,或者您已经尝试过,您需要手动编写搜索代码,这很棘手。

    常见的答案是向搜索属性或过滤器属性添加更多详细信息

    要获得更复杂的答案,请查看编码UI记录的方法。UI映射类中的方法具有以下行(其中该行来自单击Windows 7开始按钮):

    一般来说,线条是这样的

    SomeUiControl uISomeControl = this.UIParent.UIChild.UIGrandChild;
    
    然后代码只使用控件,例如
    鼠标在上面的开始按钮上

    您可以将自己的方法添加到
    uimap.cs
    文件中,但不能添加到
    uimap.designer.cs
    文件中,因为只要UI映射发生更改,就会重新生成该文件。由于它有助于UI映射(使用
    partial class
    s),您的代码可以选择任何顶级控件并从那里开始搜索


    我建议仔细阅读生成的代码,看看编码的UI生成的代码如何使用UI映射中的类、类型和实例。还要注意使用属性(例如在表达式
    this.UIParent.UIChild
    中使用
    UIParent
    的值)导致调用
    Find
    方法,该方法使用该项的SearchProperties和FilterProperty。

    从UITestControl继承的每个类都有一个接受另一个UITestControl的构造函数-该UITestControl成为您正在搜索的控件的父级(或上级),以您想要的方式有效地限制搜索。默认构造函数(无参数构造函数)使用桌面作为搜索的祖先。例如:

    WinButton UIButtonStartButton = new WinButton();
    
    创建一个按钮,将搜索属性添加到该按钮,该按钮可以位于从桌面向下的任何窗口中

    WinButton UIButtonStartButton = new WinButton(MyApplicationWindow);
    
    创建仅在指定窗口中添加搜索属性的按钮

    WinButton UIButtonStartButton = new WinButton(View1);
    
    创建仅在指定视图中添加搜索属性的按钮


    任何UITestControl都可以作为父控件传入,当然只有某些UITestControl会有子控件。

    可能为时已晚,但有一种方法可以找到确切的控件。您可以在其父控件下找到具有精确层次结构的控件

    Playback.PlaybackSettings.MatchExactHierarchy = true;
    
    在测试初始化中使用上面的行,因此如果将MatchExactHierarchy设置为true,那么它只会在您提到的同一父级下查找控件

    可能会出现一些缓存问题,这可能会再次发现您的控制错误


    如果您想了解更多关于codedUI的信息,请参阅

    谢谢您的回复!我们正在做的测试是在编码的UI测试框架的基础上构建的,我们正在手工编码所有的东西。我使用您提到的语法访问控件,问题是我需要对实际搜索进行更多控制;我想防止搜索失败后重新启动。我认为你是对的,我需要更严格地探索搜索属性。再次感谢!
    Playback.PlaybackSettings.MatchExactHierarchy = true;