如何在UITestControl的父元素上设置SearchProperty.Add

时间:2018-08-23 07:01:23

标签: coded-ui-tests

我已经为出现在Windows应用程序每个屏幕上的一组工具栏定义了一个UI测试控件。工具栏上每个控件的搜索属性在每个显示的屏幕上都相同,除了一个。

因此在下面的示例中...

UITestControl ControlName = AllUIMaps.ClientMaps.TopBars.Window.Screen.Toolbar_Icon.Toolbar.Button_ChangePassword

...第五元素(Screen)接受ControlName的搜索属性,我可以为工具栏上出现的每个屏幕写一个UIMap。但是,这似乎有点过分。

是否可以更改以上示例(ControlName = whateverscreenIamon)的第5个元素的搜索属性,因此我可以编写一个传递给整个UITestControl并修改.Screen元素的助手。

1 个答案:

答案 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,它是生成的代码