问题
任何人都可以解释(最好用代码示例)如何使用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。我无法适应窗户。
答案 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属性中。