Как использовать AutomationProperties.Имя?

вопрос

может ли кто-нибудь объяснить (предпочтительно с примером кода), как AutomationProperties.Свойство Name используется программно и декларативно с XAML?

объяснение

Я понимаю, что кодированный конструктор пользовательского интерфейса в Visual Studio 2010, например, принимает имя окна как SearchProperty.

поскольку имя моего окна изменяется, я хотел бы иметь постоянный SearchProperty, который мой На закодированные тесты UI можно положиться.

в примере кода ниже я не хочу, чтобы заголовок окна был жестко закодирован как "свойства канала 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 с привязкой к данным. Я не смог приспособить его к окну.

3 ответов


вы можете изменить присоединенное свойство AutomationProperties.Имя либо в XAML, используя:

AutomationProperties.Name = "новое имя"

или в код, используя:

.SetValue (AutomationProperties.NameProperty, "новое значение");
или
Свойство automationproperties.SetName(кнопка "новое значение");

вы можете передать заголовок окна в качестве параметра его родителю и установить этот параметр при инициализации.

Я делаю так и отлично работаю.


есть способ обойти это, но это немного некрасиво.

мы будем использовать тот факт, что proprty, который содержит ссылку на окно, кэшируется и не просматривается каждый раз.

класс uimap является частичным классом, и вы можете иметь код в uimap.cs-файл, который все еще считается частью класса uimap.

добавьте туда метод, который принимает в качестве параметра заголовок окна и выполняет поиск, и который помещает найденное окно в Свойство uilistviewpropertiestable1 сгенерированного кода.