ControlName не работает для идентичных Wincontrols в codedui - PullRequest
0 голосов
/ 17 января 2019

У меня проблема с некоторыми элементами управления Win. Существует дата сбрасывания дат, к которой я хочу получить доступ, однако и дата начала, и дата окончания идентичны (текущая дата), поэтому каждый раз повторяется переход к первой дате начала, как для комбинированных списков даты начала и окончания.

Мой вопрос связан с этим старым сообщением, и я вижу, что проблема в этом сообщении все еще не устранена CodedUI: PropertyNames.ControlName не работает

Когда я наблюдаю за комбинированными списками, я вижу, что ControlNames уникальны, поэтому я попытался использовать имена элементов управления для элементов управления. Через UIMap.uitest я добавил ControlName в коллекцию SearchProperties и записал значения, однако теперь он не может найти.

    public WinControl UIItem17Ocak2019PerşemDropDown
    {
        get
        {
            if ((this.mUIItem17Ocak2019PerşemDropDown == null))
            {
                this.mUIItem17Ocak2019PerşemDropDown = new WinControl(this);
                #region Search Criteria
                this.mUIItem17Ocak2019PerşemDropDown.SearchProperties[UITestControl.PropertyNames.ControlType] = "DropDown";
                this.mUIItem17Ocak2019PerşemDropDown.SearchProperties[UITestControl.PropertyNames.Name] = "17 Ocak 2019 Perşembe";
                this.mUIItem17Ocak2019PerşemDropDown.SearchProperties["ControlName"] = "bBasT";
                this.mUIItem17Ocak2019PerşemDropDown.WindowTitles.Add("Filtre");
                #endregion
            }
            return this.mUIItem17Ocak2019PerşemDropDown;
        }
    }

вот исключение, которое я получаю

  Message: Test method 
 CodedUITestProject2.KayitTablolari_HurdaListesi.HurdaListesiTabloKontrol threw exception: Microsoft.VisualStudio.TestTools.UITest.Extension.UITestControlNotFoundException: The playback failed to find the control with the given search properties. Additional Details: TechnologyName:  'MSAA'ControlType:  'DropDown' Name:  '17 Ocak 2019 Perşembe' ControlName:  'bBasT'  ---System.Runtime.InteropServices.COMException: Bir COM bileşenine yapılan çağrıdan HRESULT E_FAIL hatası döndürüldü.

Или есть способ упорядочения элементов управления в окне? например, «не щелкни первым, а щелкни вторым комбинированным списком в окне».

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Далее в ответе Расима Авчи приведенный ниже код иллюстрирует сгенерированный код из UIMap. Тестируемая программа представляла собой проект Windows Forms, содержащий форму с ComboBox.

[GeneratedCode("Coded UITest Builder", "15.0.26208.0")]
public class UIForm1Window : WinWindow
{

    public UIForm1Window()
    {
        #region Search Criteria
        this.SearchProperties[WinWindow.PropertyNames.Name] = "Form1";
        this.SearchProperties.Add(new PropertyExpression(WinWindow.PropertyNames.ClassName, "WindowsForms10.Window", PropertyExpressionOperator.Contains));
        this.WindowTitles.Add("Form1");
        #endregion
    }

    #region Properties
    public UICbStartDateWindow UICbStartDateWindow
    {
        get
        {
            if ((this.mUICbStartDateWindow == null))
            {
                this.mUICbStartDateWindow = new UICbStartDateWindow(this);
            }
            return this.mUICbStartDateWindow;
        }
    }

    public UICbEndDateWindow UICbEndDateWindow
    {
        get
        {
            if ((this.mUICbEndDateWindow == null))
            {
                this.mUICbEndDateWindow = new UICbEndDateWindow(this);
            }
            return this.mUICbEndDateWindow;
        }
    }
    #endregion

    #region Fields
    private UICbStartDateWindow mUICbStartDateWindow;

    private UICbEndDateWindow mUICbEndDateWindow;
    #endregion
}

[GeneratedCode("Coded UITest Builder", "15.0.26208.0")]
public class UICbStartDateWindow : WinWindow
{

    public UICbStartDateWindow(UITestControl searchLimitContainer) : 
            base(searchLimitContainer)
    {
        #region Search Criteria
        this.SearchProperties[WinWindow.PropertyNames.ControlName] = "cbStartDate";
        this.WindowTitles.Add("Form1");
        #endregion
    }

    #region Properties
    public WinComboBox UICbStartDateComboBox
    {
        get
        {
            if ((this.mUICbStartDateComboBox == null))
            {
                this.mUICbStartDateComboBox = new WinComboBox(this);
                #region Search Criteria
                this.mUICbStartDateComboBox.SearchProperties[WinComboBox.PropertyNames.Name] = "cbStartDate";
                this.mUICbStartDateComboBox.WindowTitles.Add("Form1");
                #endregion
            }
            return this.mUICbStartDateComboBox;
        }
    }
    #endregion

    #region Fields
    private WinComboBox mUICbStartDateComboBox;
    #endregion
}

На рисунке ниже показана иерархия управления. Это ясно показывает UICbStartDateWindow как родитель для ComboBox.

enter image description here

Как видите, сгенерированный код должен следовать тому, что описано в ссылке из ответа Расима Авчи.

0 голосов
/ 18 января 2019

Я нашел решение, как описано на странице ниже, controlName не для отдельных элементов управления, а для оконных элементов управления, таких как WinWindow.

https://blogs.msdn.microsoft.com/vstsqualitytools/2010/01/15/understanding-the-window-search-and-windowed-properties/

...