Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как использовать один контрол несколько раз в ходе выполнения автотеста?


(anton_matyushkin) #1

В автотесте мне нужно несколько раз использовать один и тот же контрол (например, несколько раз надо нажать кнопку "Создать" - нужно, чтобы создать "сколько-либо" документов).

Мне для работоспособности  автотеста приходится в описании кнопки нужно делать описание свойств поиска кнопки столько раз, сколько нужно будет нажать данную кнопку:

 

public class UIСоздатьButton : WinButton
    {
 
        public UIСоздатьButton(UITestControl searchLimitContainer) :
            base(searchLimitContainer)
        {
            #region Условия поиска
            this.SearchProperties[WinButton.PropertyNames.Name] = "Создать";
            this.WindowTitles.Add("AKSi-клиника - Mozilla Firefox");
            #endregion
        }
 
        #region Properties
        public WinEdit UIСоздатьEdit
        {
            get
            {
                if ((this.mUIСоздатьEdit == null))
                {
                    this.mUIСоздатьEdit = new WinEdit(this);
                    #region Условия поиска
                    this.mUIСоздатьEdit.SearchProperties[WinEdit.PropertyNames.Name] = "Создать";
                    this.mUIСоздатьEdit.WindowTitles.Add("AKSi-клиника - Mozilla Firefox");
                    #endregion
                }
                return this.mUIСоздатьEdit;
            }
        }
 
        public WinEdit UIСоздать1Edit
        {
            get
            {
                if ((this.mUIСоздать1Edit == null))
                {
                    this.mUIСоздать1Edit = new WinEdit(this);
                    #region Условия поиска
                    this.mUIСоздать1Edit.SearchProperties[WinEdit.PropertyNames.Name] = "Создать";
                    this.mUIСоздать1Edit.WindowTitles.Add("AKSi-клиника - Mozilla Firefox");
                    #endregion
                }
                return this.mUIСоздать1Edit;
            }
        }
 
        public WinEdit UIСоздать2Edit
        {
            get
            {
                if ((this.mUIСоздать2Edit == null))
                {
                    this.mUIСоздать2Edit = new WinEdit(this);
                    #region Условия поиска
                    this.mUIСоздать2Edit.SearchProperties[WinEdit.PropertyNames.Name] = "Создать";
                    this.mUIСоздать2Edit.WindowTitles.Add("AKSi-клиника - Mozilla Firefox");
                    #endregion
                }
                return this.mUIСоздать2Edit;
            }
        }
        #endregion
 
        #region Fields
        private WinEdit mUIСоздатьEdit;
 
        private WinEdit mUIСоздать1Edit;
 
        private WinEdit mUIСоздать2Edit;
        #endregion
    }
Если использовать одно свойство поиска, то при попытки второй раз использовать контрол получаю ошибку: 
исключение: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: Дополнительные сведения При воспроизведении не удалось найти элемент управления с указанными свойствами поиска.: 
Можно ли использовать одно описание свойств контрола более одного раза?

 


(Дмитрий Жарий) #2

 

Попробуйте убрать вот этот if из каждой декларации:

if ((this.mUIСоздать2Edit == null))

 // … а мясо оставить :)

}

Так, чтобы свойство высчитывалось каждый раз при следующем обращении.  


(apetrovskiy) #3

Чуть-чуть в тему написания кода: некоторые объекты (с Coded UI не работал, а вот в UI Automation подобное наблюдал) существуют как этакие структуры полей, в которых ничего нет, но они не null.

Т.е. иногда проверка на null делается не так

if (null == yourObject)

а

if (null == (yourObject as yourObjectInterfaceOrClass))

Сорри, если не в тему