我已经为出现在Windows应用程序每个屏幕上的一组工具栏定义了一个UI测试控件。工具栏上每个控件的搜索属性在每个显示的屏幕上都相同,除了一个。
因此在下面的示例中...
UITestControl ControlName = AllUIMaps.ClientMaps.TopBars.Window.Screen.Toolbar_Icon.Toolbar.Button_ChangePassword
...第五元素(Screen
)接受ControlName
的搜索属性,我可以为工具栏上出现的每个屏幕写一个UIMap
。但是,这似乎有点过分。
是否可以更改以上示例(ControlName = whateverscreenIamon
)的第5个元素的搜索属性,因此我可以编写一个传递给整个UITestControl
并修改.Screen元素的助手。
答案 0 :(得分:0)
我的测试项目中有一个WpfCustom对象。该类没有任何代码可以更改这些搜索属性,它继承了WPFCustom类,但我对其进行了修改,以向您展示如何在控件的新实例中传递这些搜索属性。 我尚未确认此代码有效,它更像一个概念。我省略了null检查等,以使示例更加清晰:
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UITesting.WpfControls;
using System.Collections.Generic;
using System.Linq;
namespace Example
{
public class Sample : UITestControl
{
public Sample(UITestControl searchLimitContainer) :
base(searchLimitContainer)
{
#region Search Criteria
this.SearchProperties[WpfControl.PropertyNames.ClassName] = "Foo";
this.SearchProperties[WpfControl.PropertyNames.AutomationId] = "Bar";
#endregion
}
/// <summary>
/// Create a control with user defined searchproperties using a existing control from e.g. the UIMap.
/// </summary>
/// <param name="searchLimitContainer">your control.</param>
/// <param name="searchPropList">List of properties needed to find the control on your UI.</param>
public Sample(UITestControl searchLimitContainer, params KeyValuePair<PropertyExpression, string>[] searchPropList) :
base(searchLimitContainer)
{
foreach (var keyValuePairItem in searchPropList)
{
this.SearchProperties.Single(sp => sp == keyValuePairItem.Key).PropertyValue = keyValuePairItem.Value;
}
}
}
}
您应该能够像这样使用它:
UITestControl ControlName = new Sample(AllUIMaps.ClientMaps.TopBars.Window.Screen, searchPropList)
不确定您是否可以实际更改UIMap,它是生成的代码