How to use AutomationProperties.Name?

柔情痞子 提交于 2019-12-12 07:47:09

问题


Question

Can anyone please explain (preferrably with a code example) how the AutomationProperties.Name property is used programmatically and declaratively with XAML?

Explanation

I understand that the Coded UI Builder in Visual Studio 2010, for instance, takes a Window's name as SearchProperty.

Since my Window's name changes, I would like to have a constant SearchProperty that my Coded UI Tests can rely on.

In the code example below, I don't want the window title to be hard-coded as "Properties of Pipe 1" since that changes.

Code example

[GeneratedCode("Coded UITest Builder", "10.0.30319.1")]
public class UIListViewPropertiesTable1 : WpfTable
{

    public UIListViewPropertiesTable1(UITestControl searchLimitContainer) : 
            base(searchLimitContainer)
    {
        #region Search Criteria
        this.SearchProperties[WpfTable.PropertyNames.AutomationId] = "listViewProperties";
        this.WindowTitles.Add("Properties of Pipe 1");
        #endregion
    }

    #region Properties
    public WpfText NameOfComponent
    {
        get
        {
            if ((this.mNameOfComponent == null))
            {
                this.mNameOfComponent = new WpfText(this);
                #region Search Criteria
                this.mNameOfComponent.SearchProperties[WpfText.PropertyNames.Name] = "Pipe 1";
                this.mNameOfComponent.WindowTitles.Add("Properties of Pipe 1");
                #endregion
            }
            return this.mNameOfComponent;
        }
    }
    #endregion

    #region Fields
    private WpfText mNameOfComponent;
    #endregion
}

Links

Here is an example: How To: Get automation working properly on data bound WPF list or combo box. I wasn't able to adapt it for a Window.


回答1:


You can change the attached property AutomationProperties.Name either in XAML using:

AutomationProperties.Name = "new name"

or in code using:

Button.SetValue(AutomationProperties.NameProperty, "new value");
or
AutomationProperties.SetName(Button, "new value");




回答2:


You can pass the Window Title as parameter to its parent and set this parameter while initializing.

I do this way and works fine.




回答3:


There is a way to work around that but its a bit ugly.

We will be using the fact that the the proprty that contains the reference to the window is cached and not looked up every time.

uimap class is a partial class and you can have code in the uimap.cs file that stil counts as a part of the uimap class.

Add a method there that accepts as a parameter the window title, and performs the search, and that puts the found window into the UIListViewPropertiesTable1 property of the generated code.



来源:https://stackoverflow.com/questions/2920062/how-to-use-automationproperties-name

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!