如何使用AutomationProperties.Name?

时间:2010-05-27 09:55:16

标签: c# coded-ui-tests

问题

任何人都可以解释(最好用代码示例)如何使用XAML以编程方式和声明方式使用AutomationProperties.Name属性?

解释

据我所知,Visual Studio 2010中的Coded UI Builder将Window的名称作为SearchProperty。

由于我的Window名称发生了变化,我希望我的Coded UI测试可以依赖一个常量的SearchProperty。

在下面的代码示例中,我不希望窗口标题被硬编码为“管道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
}

链接

以下是一个示例:How To: Get automation working properly on data bound WPF list or combo box。我无法适应窗户。

3 个答案:

答案 0 :(得分:11)

您可以使用以下方法在XAML中更改附加属性 AutomationProperties.Name

  

AutomationProperties.Name =“新名称”

或使用以下代码:

  

Button.SetValue(AutomationProperties.NameProperty,“new value”);
  或
  AutomationProperties.SetName(Button,“new value”);

答案 1 :(得分:1)

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

我这样做并且工作正常。

答案 2 :(得分:0)

有一种方法可以解决这个问题,但它有点难看。

我们将使用这样一个事实:包含对窗口的引用的proprty被缓存而不是每次都被查找。

uimap类是一个部分类,你可以在uimap.cs文件中包含stil作为uimap类的一部分的代码。

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