Кодовый UI и интерфейс автоматизации не идут рука об руку

Обновить

April 2019

Просмотры

91 раз

1

I'm trying to automate a windows based application Using Coded UI. In this application some control are not accesible so i have used UI automatin element to identify the control.

First Screen Contains List of Employees in the form Grid.

When user Doubles click on selected Employee. New Tab is created where it contains emplyee Details in the form of TextBox

New TabPage we have TextBox and some other controls such as Checkbox and ListItem.

List Item are detectable using coded ui but TextBox are not detectable with coded ui so we have used UI Automation Element for this.

[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;
        }
    }

// Class contains controls which are detectable using coded ui

класс EmployeeUIMap общественного {общественного WinTabPage ListEmpmTab {получить {WinTabPage вкладка = новый WinTabPage ();
Вкладка возврата; }}

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

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

общественный класс 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 с помощью кодированного пользовательского интерфейса, которые workds, но когда я пытаюсь ввести текст в текстовое поле с помощью автоматизации пользовательского интерфейса. Это бросает исключение в нуль 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"); // сделать Усин автоматизации элемент}

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

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

1 ответы

0

UI Automation is a framework to implement standardized support for non-standard UI widgets. This being said, if the support is not implemented(and installed) on the test machíne, CUIT will handle all objects as generic Objects. You need to implement support first via the UI Automation framework for your widgets aka you have to teach windows why a specific WinClass is a Button and what should happen in the background when it is clicked.

Afterwards CUIT will be able to interact with your Object. So don't think of UI Automation as a magic solution for everything. It is something similar like the HPE UFT Extensibility Kit, just on a lower level (OS). HPE Ext Kit operates on the Application Level