如何使用AutomationProperties.Name?

12

问题

请问(最好附有代码示例),AutomationProperties.Name属性如何在XAML中以编程和声明性方式使用?

解释

我知道,例如Visual Studio 2010中的Coded UI Builder会将窗口名称作为SearchProperty。

由于我的窗口名称会更改,我希望有一个常量SearchProperty,供我的Coded UI测试依赖。

在下面的代码示例中,我不希望窗口标题硬编码为“Pipe 1的属性”,因为它会发生变化。

代码示例

[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
}

链接

这里有一个例子:如何:使绑定数据的WPF列表或组合框上的自动化正常工作。我无法将其适应于一个窗口。


1
AutomationProperties.Name和x:Name之间的区别在于,AutomationProperties.Name可以进行数据绑定。当您使用WVVM模式并希望向VM添加自动化属性并在View中进行绑定时,这非常有用。创建自己的UIMap而不使用测试生成器。这将为您提供更可控的映射。我希望创建一个小示例来演示这一点,并在我的博客上发布它。 完成后,我会给出链接。 - CoffeeCode
3个回答

13

您可以使用以下两种方式之一,在XAML中更改所附属性AutomationProperties.Name

AutomationProperties.Name = "新名称"

或者在代码中使用:

Button.SetValue(AutomationProperties.NameProperty, "新值");
或者
AutomationProperties.SetName(Button, "新值");


1

您可以将窗口标题作为参数传递给其父级,并在初始化时设置此参数。

我就是这样做的,而且运行良好。


0

有一个解决方法可以绕过这个问题,但它有点丑陋。

我们将利用包含对窗口的引用的属性被缓存并且不会每次查找的事实。

UIMap类是一个部分类,您可以在uimap.cs文件中编写代码,该代码仍然属于UIMap类的一部分。

添加一个方法作为参数接受窗口标题,执行搜索,并将找到的窗口放入生成代码的UIListViewPropertiesTable1属性中。


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