Кодированный пользовательский интерфейс и автоматизация пользовательского интерфейса не идут рука об руку - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь автоматизировать приложение на основе Windows, используя закодированный пользовательский интерфейс.В этом приложении некоторые элементы управления недоступны, поэтому я использовал элемент автоматизации пользовательского интерфейса для идентификации элемента управления.

Первый экран содержит список сотрудников в виде таблицы.

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

Новая вкладка TabBage, у нас есть TextBox и некоторые другие элементы управления, такие как Checkbox и ListItem.

Элемент списка обнаруживается с помощью закодированного интерфейса, но TextBox не обнаруживается с помощью закодированного интерфейса, поэтому мы использовали элемент автоматизации пользовательского интерфейса для этого.

[CodedUITest]
public class CodedUITest1
{   

    [TestMethod]
    public void CodedUITestMethod2()
    {

        LaunchApplication(); //done using coded ui
        Login()//done using Coded UI;
        ClickonEmpListTab()//Done Using Coded UI
        SelectEmployee()//done using Coded UI
       //now new Tab is created in application 
        empoyeeUICodedUIControl.CurrentEmpComboBox.Checked= true; //done using coded ui
       empoyeeUIAutomationControl.EnterText(empoyeeUIAutomationControl.FirsName,"MyFirstName"); // done using coded ui
        empoyeeUIAutomationControl.EnterText(empoyeeUIAutomationControl.LastName,"MyLastName"); // done usin coded ui
        }
    private EmployeeUIAutomationUIMap _employeeUIAutomationcontrol;
    public EmployeeUIAutomationUIMap empoyeeUIAutomationControl
    {
        get
        {
            if(_employeeUIAutomationcontrol == null)
            {
                _employeeUIAutomationcontrol = new EmployeeUIAutomationUIMap();
            }
            return _employeeUIAutomationcontrol;
        }
    }

    private EmployeeUIMap _employeeUICodedUIcontrol;
    public EmployeeUIMap empoyeeUICodedUIControl
    {
        get
        {
            if (_employeeUICodedUIcontrol == null)
            {
                _employeeUICodedUIcontrol = new EmployeeUIAutomationUIMap();
            }
            return _employeeUICodedUIcontrol;
        }
    }

// Класс содержит элементы управления, которые можно обнаружить с помощью закодированногоui

открытый класс EmployeeUIMap {public WinTabPage ListEmpmTab {get {WinTabPage tab = new WinTabPage ();
возврат вкладки;}}

    public WinCheckBox CurrentEmpComboBox
    {
      get 
        {
            WinCheckBox combox = new WinCheckBox();
            return combox;
        }
    }
}

// Класс содержит элемент управления, который можно обнаружить с помощью элемента автоматизации пользовательского интерфейса

открытый класс EmployeeUIAutomationUIMap {

    public Condition GetCondition(AutomationProperty propery,string value)
    {
        Condition cond = new PropertyCondition(AutomationElement.AutomationIdProperty, value);
        return cond;
    }

    public AutomationElement GetElement(AutomationElement parentControl,Condition cond)
    {
        return parentControl.FindFirst(TreeScope.Descendants, cond);
    }

    public AutomationElement MainRootElement
    {
        get
        {
            return AutomationElement.RootElement;
        }
    }

    public AutomationPattern GetPattern(AutomationElement element)
    {
        //returns the pattern as per element 
        return pattern;
    }

    public void  EnterText(AutomationElement element,string value)
    {
        var pattern = GetPattern(element);
        pattern.SetValue = value;
    }
    public AutomationElement FirsName
    {
        var cond=GetCondition(AutomationElement.AutomationIdProperty,"FNID");
        var element=GetElement(MainRootElement,cond);
        return  element;

    }

    public AutomationElement LastName
    {
        var cond=GetCondition(AutomationElement.AutomationIdProperty,"LNID");
        var element=GetElement(MainRootElement,cond);
        return  element;

    }


}

Когда я запускаю свой TestMethod, он работает нормальнодо нажатия на выбранного сотрудника.как только открывается новая вкладка, я выполняю операцию на checkBox, используя закодированный пользовательский интерфейс, который работает, но когда я пытаюсь ввести текст в текстовое поле с помощью автоматизации пользовательского интерфейса.Он выдает нулевое исключение в методе GetElement () для элемента.

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

[TestMethod]
    public void CodedUITestMethod2()
    {

        /*
          LaunchApplication(); //done using coded ui
          Login()//done using Coded UI;
          ClickonEmpListTab()//Done Using Coded UI
          SelectEmployee()//done using Coded UI
       */
        empoyeeUICodedUIControl.CurrentEmpComboBox.Checked= true; //done using coded ui

empoyeeUIAutomationControl.EnterText (empoyeeUIAutomationControl.FirsName, "MyFirstName");// сделано с помощью элемента UIAutomation

empoyeeUIAutomationControl.EnterText (empoyeeUIAutomationControl.LastName, "MyLastName");// done usin Automation Element}

Когда я запускаю мой полный метод тестирования, UIAutomation не может идентифицировать элемент управления.

Пожалуйста, помогите мне решить проблему.

1 Ответ

0 голосов
/ 10 июня 2018

UI Automation - это платформа для реализации стандартизированной поддержки нестандартных виджетов UI.При этом, если поддержка не реализована (и не установлена) на тестовой машине, CUIT будет обрабатывать все объекты как общие объекты.Сначала вам нужно реализовать поддержку через UI Automation Framework для ваших виджетов, то есть вы должны научить окна, почему определенный WinClass является кнопкой и что должно происходить в фоновом режиме при нажатии.

После этого CUIT сможетвзаимодействовать с вашим объектом.Так что не думайте об автоматизации пользовательского интерфейса как о волшебном решении для всего.Это что-то похожее на комплект расширения HPE UFT, только на более низком уровне (ОС).Комплект HPE Ext работает на уровне приложений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...